From 3728914b67bd00a8b771027767ab899d29ec9d30 Mon Sep 17 00:00:00 2001 From: Grant Gayed Date: Thu, 2 Aug 2012 11:42:02 -0400 Subject: Bug 345296 - Remove qt from org.eclipse.swt --- bundles/org.eclipse.swt/.classpath_flex | 33 - .../qt/org/eclipse/swt/browser/QtWebkit.java | 201 - .../qt/org/eclipse/swt/dnd/ByteArrayTransfer.java | 201 - .../qt/org/eclipse/swt/dnd/Clipboard.java | 410 -- .../qt/org/eclipse/swt/dnd/DragSource.java | 593 --- .../qt/org/eclipse/swt/dnd/DropTarget.java | 638 --- .../qt/org/eclipse/swt/dnd/FileTransfer.java | 145 - .../qt/org/eclipse/swt/dnd/HTMLTransfer.java | 76 - .../qt/org/eclipse/swt/dnd/ImageTransfer.java | 76 - .../qt/org/eclipse/swt/dnd/RTFTransfer.java | 79 - .../org/eclipse/swt/dnd/TableDragSourceEffect.java | 43 - .../org/eclipse/swt/dnd/TableDropTargetEffect.java | 55 - .../qt/org/eclipse/swt/dnd/TextTransfer.java | 106 - .../qt/org/eclipse/swt/dnd/Transfer.java | 163 - .../qt/org/eclipse/swt/dnd/TransferData.java | 87 - .../org/eclipse/swt/dnd/TreeDragSourceEffect.java | 42 - .../org/eclipse/swt/dnd/TreeDropTargetEffect.java | 129 - .../qt/org/eclipse/swt/dnd/URLTransfer.java | 75 - .../qt/org/eclipse/swt/graphics/Color.java | 364 -- .../qt/org/eclipse/swt/graphics/Cursor.java | 445 -- .../qt/org/eclipse/swt/graphics/Device.java | 920 ----- .../qt/org/eclipse/swt/graphics/DeviceData.java | 23 - .../qt/org/eclipse/swt/graphics/Font.java | 379 -- .../qt/org/eclipse/swt/graphics/FontData.java | 722 ---- .../qt/org/eclipse/swt/graphics/FontMetrics.java | 165 - .../qt/org/eclipse/swt/graphics/GC.java | 3555 ---------------- .../qt/org/eclipse/swt/graphics/GCData.java | 53 - .../qt/org/eclipse/swt/graphics/Image.java | 978 ----- .../qt/org/eclipse/swt/graphics/Region.java | 776 ---- .../eclipse/swt/internal/qt/DragNDropListener.java | 28 - .../org/eclipse/swt/internal/qt/FontConverter.java | 107 - .../qt/org/eclipse/swt/internal/qt/KeyUtil.java | 120 - .../eclipse/swt/internal/qt/QtSWTConverter.java | 110 - .../swt/internal/qt/QtSupplementaryFontData.java | 28 - .../qt/org/eclipse/swt/internal/qt/SWQT.java | 51 - .../eclipse/swt/internal/qt/SignalConnector.java | 74 - .../swt/internal/qt/StylableScrollArea.java | 60 - .../qt/org/eclipse/swt/internal/qt/ToString.java | 99 - .../qt/org/eclipse/swt/widgets/Button.java | 801 ---- .../qt/org/eclipse/swt/widgets/Canvas.java | 355 -- .../qt/org/eclipse/swt/widgets/Caret.java | 590 --- .../qt/org/eclipse/swt/widgets/ColorDialog.java | 164 - .../qt/org/eclipse/swt/widgets/Combo.java | 1398 ------- .../qt/org/eclipse/swt/widgets/Composite.java | 1303 ------ .../qt/org/eclipse/swt/widgets/Control.java | 4361 -------------------- .../qt/org/eclipse/swt/widgets/DateTime.java | 806 ---- .../qt/org/eclipse/swt/widgets/Decorations.java | 1218 ------ .../org/eclipse/swt/widgets/DirectoryDialog.java | 202 - .../qt/org/eclipse/swt/widgets/Display.java | 3246 --------------- .../qt/org/eclipse/swt/widgets/FileDialog.java | 443 -- .../qt/org/eclipse/swt/widgets/FontDialog.java | 246 -- .../qt/org/eclipse/swt/widgets/Group.java | 293 -- .../qt/org/eclipse/swt/widgets/Label.java | 456 -- .../qt/org/eclipse/swt/widgets/Link.java | 552 --- .../qt/org/eclipse/swt/widgets/List.java | 1380 ------- .../qt/org/eclipse/swt/widgets/Menu.java | 1423 ------- .../qt/org/eclipse/swt/widgets/MenuItem.java | 1045 ----- .../qt/org/eclipse/swt/widgets/MessageBox.java | 312 -- .../qt/org/eclipse/swt/widgets/ProgressBar.java | 318 -- .../qt/org/eclipse/swt/widgets/Sash.java | 387 -- .../qt/org/eclipse/swt/widgets/Scale.java | 494 --- .../qt/org/eclipse/swt/widgets/ScrollBar.java | 876 ---- .../qt/org/eclipse/swt/widgets/Scrollable.java | 430 -- .../qt/org/eclipse/swt/widgets/Shell.java | 1510 ------- .../qt/org/eclipse/swt/widgets/Slider.java | 632 --- .../qt/org/eclipse/swt/widgets/Spinner.java | 948 ----- .../qt/org/eclipse/swt/widgets/TabFolder.java | 755 ---- .../qt/org/eclipse/swt/widgets/TabItem.java | 389 -- .../qt/org/eclipse/swt/widgets/Table.java | 2561 ------------ .../qt/org/eclipse/swt/widgets/TableColumn.java | 664 --- .../qt/org/eclipse/swt/widgets/TableItem.java | 1441 ------- .../qt/org/eclipse/swt/widgets/Text.java | 1875 --------- .../qt/org/eclipse/swt/widgets/ToolBar.java | 530 --- .../qt/org/eclipse/swt/widgets/ToolItem.java | 981 ----- .../qt/org/eclipse/swt/widgets/ToolTip.java | 512 --- .../qt/org/eclipse/swt/widgets/Tracker.java | 859 ---- .../qt/org/eclipse/swt/widgets/TrayItem.java | 536 --- .../qt/org/eclipse/swt/widgets/Tree.java | 1913 --------- .../qt/org/eclipse/swt/widgets/TreeColumn.java | 714 ---- .../qt/org/eclipse/swt/widgets/TreeItem.java | 1573 ------- .../qt/org/eclipse/swt/widgets/Widget.java | 1358 ------ 81 files changed, 55059 deletions(-) delete mode 100644 bundles/org.eclipse.swt/.classpath_flex delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebkit.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ByteArrayTransfer.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Clipboard.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DragSource.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DropTarget.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/FileTransfer.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/HTMLTransfer.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ImageTransfer.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/RTFTransfer.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDragSourceEffect.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDropTargetEffect.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TextTransfer.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Transfer.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TransferData.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDragSourceEffect.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDropTargetEffect.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/URLTransfer.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Color.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Cursor.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Device.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/DeviceData.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Font.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontData.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontMetrics.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GCData.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Region.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/DragNDropListener.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/FontConverter.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/KeyUtil.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSWTConverter.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSupplementaryFontData.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SWQT.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SignalConnector.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/StylableScrollArea.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/ToString.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Button.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Canvas.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Caret.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ColorDialog.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Combo.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DateTime.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DirectoryDialog.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FileDialog.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FontDialog.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Group.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Label.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Link.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/List.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MenuItem.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MessageBox.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ProgressBar.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Sash.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scale.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ScrollBar.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scrollable.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Slider.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Spinner.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabItem.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Table.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableColumn.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableItem.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Text.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolBar.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolItem.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolTip.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tracker.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TrayItem.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tree.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeColumn.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeItem.java delete mode 100644 bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java diff --git a/bundles/org.eclipse.swt/.classpath_flex b/bundles/org.eclipse.swt/.classpath_flex deleted file mode 100644 index 4640d2bde8..0000000000 --- a/bundles/org.eclipse.swt/.classpath_flex +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebkit.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebkit.java deleted file mode 100644 index b0b4cc759d..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebkit.java +++ /dev/null @@ -1,201 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.browser; - -import com.trolltech.qt.core.QUrl; -import com.trolltech.qt.webkit.QWebView; - -import org.eclipse.swt.widgets.Composite; - -/** - * - */ -public class QtWebkit extends WebBrowser { - - private QWebView webView = null; - private int style; - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.swt.browser.WebBrowser#create(org.eclipse.swt.widgets.Composite - * , int) - */ - @Override - public void create(Composite parent, int style) { - this.style = style; - webView = new QWebView(parent.getQWidget()); - webView.loadProgress.connect(this, "loadProgress(int)"); //$NON-NLS-1$ - webView.loadFinished.connect(this, "loadFinished(boolean)"); //$NON-NLS-1$ - webView.titleChanged.connect(this, "titleChanged(java.lang.String)"); //$NON-NLS-1$ - - } - - public void loadProgress(int progress) { - ProgressEvent progressEvent = new ProgressEvent(browser); - progressEvent.display = browser.getDisplay(); - progressEvent.widget = browser; - progressEvent.current = progress; - for (int i = 0; i < progressListeners.length; i++) { - progressListeners[i].changed(progressEvent); - } - } - - public void loadFinished(boolean OK) { - ProgressEvent progressEvent = new ProgressEvent(browser); - progressEvent.display = browser.getDisplay(); - progressEvent.widget = browser; - for (int i = 0; i < progressListeners.length; i++) { - progressListeners[i].completed(progressEvent); - } - } - - public void titleChanged(String title) { - TitleEvent newEvent = new TitleEvent(browser); - newEvent.display = browser.getDisplay(); - newEvent.widget = browser; - newEvent.title = title; - for (int i = 0; i < titleListeners.length; i++) { - titleListeners[i].changed(newEvent); - } - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#execute(java.lang.String) - */ - @Override - public boolean execute(String script) { - webView.page().mainFrame().evaluateJavaScript(script); - webView.repaint(); // TODO seems to help for SWT Snippet161 but is a repaint really necessary ? - return true; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#back() - */ - @Override - public boolean back() { - webView.back(); - return true; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#forward() - */ - @Override - public boolean forward() { - webView.forward(); - return true; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#getBrowserType() - */ - @Override - public String getBrowserType() { - // TODO Auto-generated method stub - return "qtWebkit"; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#getText() - */ - @Override - public String getText() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#getUrl() - */ - @Override - public String getUrl() { - return webView.url().toString(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#isBackEnabled() - */ - @Override - public boolean isBackEnabled() { - return webView.history().canGoBack(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#isForwardEnabled() - */ - @Override - public boolean isForwardEnabled() { - return webView.history().canGoForward(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#refresh() - */ - @Override - public void refresh() { - webView.reload(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#setText(java.lang.String) - */ - @Override - public boolean setText(String html) { - webView.setHtml(html); - return true; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#setUrl(java.lang.String) - */ - @Override - public boolean setUrl(String url) { - webView.load(new QUrl(url)); - // TODO Auto-generated method stub - return true; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.swt.browser.WebBrowser#stop() - */ - @Override - public void stop() { - webView.stop(); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ByteArrayTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ByteArrayTransfer.java deleted file mode 100644 index e46c883f8b..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ByteArrayTransfer.java +++ /dev/null @@ -1,201 +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.dnd; - -/** - * The class ByteArrayTransfer provides a platform specific - * mechanism for converting a java byte[] to a platform specific - * representation of the byte array and vice versa. - * - *

- * ByteArrayTransfer is never used directly but is sub-classed by - * transfer agents that convert between data in a java format such as a - * String and a platform specific byte array. - * - *

- * If the data you are converting does not map to a byte[], - * you should sub-class Transfer directly and do your own mapping - * to a platform data type. - *

- * - *

- * The following snippet shows a subclass of ByteArrayTransfer that transfers - * data defined by the class MyType. - *

- * - *
- * 
- * public class MyType {
- * public String fileName;
- * public long fileLength;
- * public long lastModified;
- * }
- * 
- * 
- * - *
- * 
- * public class MyTypeTransfer extends ByteArrayTransfer {
- * 
- * private static final String MYTYPENAME = "my_type_name";
- * private static final int MYTYPEID = registerType(MYTYPENAME);
- * private static MyTypeTransfer _instance = new MyTypeTransfer();
- * 
- * private MyTypeTransfer() {}
- * 
- * public static MyTypeTransfer getInstance () {
- * 	return _instance;
- * }
- * public void javaToNative (Object object, TransferData transferData) {
- * 	if (object == null || !(object instanceof MyType[])) return;
- * 
- * 	if (isSupportedType(transferData)) {
- * 		MyType[] myTypes = (MyType[]) object;
- * 		try {
- * 			// write data to a byte array and then ask super to convert to pMedium
- * 			ByteArrayOutputStream out = new ByteArrayOutputStream();
- * 			DataOutputStream writeOut = new DataOutputStream(out);
- * 			for (int i = 0, length = myTypes.length; i < length;  i++){
- * 				byte[] buffer = myTypes[i].fileName.getBytes();
- * 				writeOut.writeInt(buffer.length);
- * 				writeOut.write(buffer);
- * 				writeOut.writeLong(myTypes[i].fileLength);
- * 				writeOut.writeLong(myTypes[i].lastModified);
- * 			}
- * 			byte[] buffer = out.toByteArray();
- * 			writeOut.close();
- * 
- * 			super.javaToNative(buffer, transferData);
- * 
- * 		} catch (IOException e) {
- * 		}
- * 	}
- * }
- * public Object nativeToJava(TransferData transferData){
- * 
- * 	if (isSupportedType(transferData)) {
- * 
- * 		byte[] buffer = (byte[])super.nativeToJava(transferData);
- * 		if (buffer == null) return null;
- * 
- * 		MyType[] myData = new MyType[0];
- * 		try {
- * 			ByteArrayInputStream in = new ByteArrayInputStream(buffer);
- * 			DataInputStream readIn = new DataInputStream(in);
- * 			while(readIn.available() > 20) {
- * 				MyType datum = new MyType();
- * 				int size = readIn.readInt();
- * 				byte[] name = new byte[size];
- * 				readIn.read(name);
- * 				datum.fileName = new String(name);
- * 				datum.fileLength = readIn.readLong();
- * 				datum.lastModified = readIn.readLong();
- * 				MyType[] newMyData = new MyType[myData.length + 1];
- * 				System.arraycopy(myData, 0, newMyData, 0, myData.length);
- * 				newMyData[myData.length] = datum;
- * 				myData = newMyData;
- * 			}
- * 			readIn.close();
- * 		} catch (IOException ex) {
- * 			return null;
- * 		}
- * 		return myData;
- * 	}
- * 
- * 	return null;
- * }
- * protected String[] getTypeNames(){
- * 	return new String[]{MYTYPENAME};
- * }
- * protected int[] getTypeIds(){
- * 	return new int[] {MYTYPEID};
- * }
- * }
- * 
- * 
- * - * @see Transfer - */ -public abstract class ByteArrayTransfer extends Transfer { - - @Override - public TransferData[] getSupportedTypes() { - int[] types = getTypeIds(); - String[] names = getTypeNames(); - TransferData[] data = new TransferData[types.length]; - for (int i = 0; i < types.length; i++) { - data[i] = new TransferData(); - data[i].type = types[i]; - data[i].format = names[i]; - } - return data; - } - - @Override - public boolean isSupportedType(TransferData transferData) { - if (transferData == null) { - return false; - } - int[] types = getTypeIds(); - for (int i = 0; i < types.length; i++) { - if (transferData.type == types[i]) { - return true; - } - } - return false; - } - - /** - * This implementation of javaToNative converts a java - * byte[] to a platform specific representation. - * - * @param object - * a java byte[] containing the data to be converted - * @param transferData - * an empty TransferData object that will be filled - * in on return with the platform specific format of the data - * - * @see Transfer#nativeToJava - */ - @Override - protected void javaToNative(Object object, TransferData transferData) { - if (!checkByteArray(object) || !isSupportedType(transferData)) { - DND.error(DND.ERROR_INVALID_DATA); - } - transferData.data = object; - } - - /** - * This implementation of nativeToJava converts a platform - * specific representation of a byte array to a java byte[]. - * - * @param transferData - * the platform specific representation of the data to be - * converted - * @return a java byte[] containing the converted data if the - * conversion was successful; otherwise null - * - * @see Transfer#javaToNative - */ - @Override - protected Object nativeToJava(TransferData transferData) { - if (!checkByteArray(transferData.data) || !isSupportedType(transferData)) { - return null; - } - return transferData.data; - } - - protected boolean checkByteArray(Object object) { - return object != null && object instanceof byte[] && ((byte[]) object).length > 0; - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Clipboard.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Clipboard.java deleted file mode 100644 index 981acde037..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Clipboard.java +++ /dev/null @@ -1,410 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.swt.dnd; - - -import org.eclipse.swt.*; -import org.eclipse.swt.widgets.*; - -/** - * The Clipboard provides a mechanism for transferring data from one - * application to another or within an application. - * - *

IMPORTANT: This class is not intended to be subclassed.

- * - * @see Clipboard snippets - * @see SWT Example: ClipboardExample - * @see Sample code and further information - * @noextend This class is not intended to be subclassed by clients. - */ -public class Clipboard { - - private Display display; - -/** - * Constructs a new instance of this class. Creating an instance of a Clipboard - * may cause system resources to be allocated depending on the platform. It is therefore - * mandatory that the Clipboard instance be disposed when no longer required. - * - * @param display the display on which to allocate the clipboard - * - * @exception SWTException - * - * @see Clipboard#dispose - * @see Clipboard#checkSubclass - */ -public Clipboard(Display display) { - checkSubclass (); - if (display == null) { - display = Display.getCurrent(); - if (display == null) { - display = Display.getDefault(); - } - } - if (display.getThread() != Thread.currentThread()) { - DND.error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - this.display = display; -} - -/** - * Checks that this class can be subclassed. - *

- * The SWT class library is intended to be subclassed - * only at specific, controlled points. This method enforces this - * rule unless it is overridden. - *

- * IMPORTANT: By providing an implementation of this - * method that allows a subclass of a class which does not - * normally allow subclassing to be created, the implementer - * agrees to be fully responsible for the fact that any such - * subclass will likely fail between SWT releases and will be - * strongly platform specific. No support is provided for - * user-written classes which are implemented in this fashion. - *

- * The ability to subclass outside of the allowed SWT classes - * is intended purely to enable those not on the SWT development - * team to implement patches in order to get around specific - * limitations in advance of when those limitations can be - * addressed by the team. Subclassing should not be attempted - * without an intimate and detailed understanding of the hierarchy. - *

- * - * @exception SWTException - */ -protected void checkSubclass () { - String name = getClass().getName (); - String validName = Clipboard.class.getName(); - if (!validName.equals(name)) { - DND.error (SWT.ERROR_INVALID_SUBCLASS); - } -} - -/** - * Throws an SWTException if the receiver can not - * be accessed by the caller. This may include both checks on - * the state of the receiver and more generally on the entire - * execution context. This method should be called by - * widget implementors to enforce the standard SWT invariants. - *

- * Currently, it is an error to invoke any method (other than - * isDisposed()) on a widget that has had its - * dispose() method called. It is also an error - * to call widget methods from any thread that is different - * from the thread that created the widget. - *

- * In future releases of SWT, there may be more or fewer error - * checks and exceptions may be thrown for different reasons. - *

- * - * @exception SWTException - */ -protected void checkWidget () { - Display display = this.display; - if (display == null) DND.error (SWT.ERROR_WIDGET_DISPOSED); - if (display.getThread() != Thread.currentThread ()) DND.error (SWT.ERROR_THREAD_INVALID_ACCESS); - if (display.isDisposed()) DND.error(SWT.ERROR_WIDGET_DISPOSED); -} - -/** - * Disposes of the operating system resources associated with the clipboard. - * The data will still be available on the system clipboard after the dispose - * method is called. - * - *

NOTE: On some platforms the data will not be available once the application - * has exited or the display has been disposed.

- * - * @exception SWTException - */ -public void dispose () { - if (isDisposed()) return; - if (display.getThread() != Thread.currentThread()) DND.error(SWT.ERROR_THREAD_INVALID_ACCESS); - display = null; -} - -/** - * Retrieve the data of the specified type currently available on the system - * clipboard. Refer to the specific subclass of Transfer to - * determine the type of object returned. - * - *

The following snippet shows text and RTF text being retrieved from the - * clipboard:

- * - *
- *    Clipboard clipboard = new Clipboard(display);
- *    TextTransfer textTransfer = TextTransfer.getInstance();
- *    String textData = (String)clipboard.getContents(textTransfer);
- *    if (textData != null) System.out.println("Text is "+textData);
- *    RTFTransfer rtfTransfer = RTFTransfer.getInstance();
- *    String rtfData = (String)clipboard.getContents(rtfTransfer);
- *    if (rtfData != null) System.out.println("RTF Text is "+rtfData);
- *    clipboard.dispose();
- *    
- * - * @param transfer the transfer agent for the type of data being requested - * @return the data obtained from the clipboard or null if no data of this type is available - * - * @exception SWTException - * @exception IllegalArgumentException - * - * @see Transfer - */ -public Object getContents(Transfer transfer) { - return getContents(transfer, DND.CLIPBOARD); -} - -/** - * Retrieve the data of the specified type currently available on the specified - * clipboard. Refer to the specific subclass of Transfer to - * determine the type of object returned. - * - *

The following snippet shows text and RTF text being retrieved from the - * clipboard:

- * - *
- *    Clipboard clipboard = new Clipboard(display);
- *    TextTransfer textTransfer = TextTransfer.getInstance();
- *    String textData = (String)clipboard.getContents(textTransfer);
- *    if (textData != null) System.out.println("Text is "+textData);
- *    RTFTransfer rtfTransfer = RTFTransfer.getInstance();
- *    String rtfData = (String)clipboard.getContents(rtfTransfer, DND.CLIPBOARD);
- *    if (rtfData != null) System.out.println("RTF Text is "+rtfData);
- *    clipboard.dispose();
- *    
- * - *

The clipboards value is either one of the clipboard constants defined in - * class DND, or must be built by bitwise OR'ing together - * (that is, using the int "|" operator) two or more - * of those DND clipboard constants.

- * - * @param transfer the transfer agent for the type of data being requested - * @param clipboards on which to look for data - * - * @return the data obtained from the clipboard or null if no data of this type is available - * - * @exception SWTException - * @exception IllegalArgumentException - * - * @see Transfer - * @see DND#CLIPBOARD - * @see DND#SELECTION_CLIPBOARD - * - * @since 3.1 - */ -public Object getContents(Transfer transfer, int clipboards) { - checkWidget(); - if (transfer == null) DND.error(SWT.ERROR_NULL_ARGUMENT); - if (!(transfer instanceof TextTransfer)) return null; - return display.getData("TextTransfer"); //$NON-NLS-1$ -} - -/** - * Returns true if the clipboard has been disposed, - * and false otherwise. - *

- * This method gets the dispose state for the clipboard. - * When a clipboard has been disposed, it is an error to - * invoke any other method using the clipboard. - *

- * - * @return true when the widget is disposed and false otherwise - * - * @since 3.0 - */ -public boolean isDisposed () { - return (display == null); -} - -/** - * Place data of the specified type on the system clipboard. More than one type - * of data can be placed on the system clipboard at the same time. Setting the - * data clears any previous data from the system clipboard, regardless of type. - * - *

NOTE: On some platforms, the data is immediately copied to the system - * clipboard but on other platforms it is provided upon request. As a result, - * if the application modifies the data object it has set on the clipboard, that - * modification may or may not be available when the data is subsequently - * requested.

- * - *

The following snippet shows text and RTF text being set on the copy/paste - * clipboard: - *

- * - *
- * 	Clipboard clipboard = new Clipboard(display);
- *	String textData = "Hello World";
- *	String rtfData = "{\\rtf1\\b\\i Hello World}";
- *	TextTransfer textTransfer = TextTransfer.getInstance();
- *	RTFTransfer rtfTransfer = RTFTransfer.getInstance();
- *	Transfer[] transfers = new Transfer[]{textTransfer, rtfTransfer};
- *	Object[] data = new Object[]{textData, rtfData};
- *	clipboard.setContents(data, transfers);
- *	clipboard.dispose();
- * 
- * - * @param data the data to be set in the clipboard - * @param dataTypes the transfer agents that will convert the data to its - * platform specific format; each entry in the data array must have a - * corresponding dataType - * - * @exception IllegalArgumentException - * @exception SWTException - * @exception SWTError - * - *

NOTE: ERROR_CANNOT_SET_CLIPBOARD should be an SWTException, since it is a - * recoverable error, but can not be changed due to backward compatibility.

- */ -public void setContents(Object[] data, Transfer[] dataTypes) { - setContents(data, dataTypes, DND.CLIPBOARD); -} - -/** - * Place data of the specified type on the specified clipboard. More than one - * type of data can be placed on the specified clipboard at the same time. - * Setting the data clears any previous data from the specified - * clipboard, regardless of type. - * - *

NOTE: On some platforms, the data is immediately copied to the specified - * clipboard but on other platforms it is provided upon request. As a result, - * if the application modifies the data object it has set on the clipboard, that - * modification may or may not be available when the data is subsequently - * requested.

- * - *

The clipboards value is either one of the clipboard constants defined in - * class DND, or must be built by bitwise OR'ing together - * (that is, using the int "|" operator) two or more - * of those DND clipboard constants.

- * - *

The following snippet shows text and RTF text being set on the copy/paste - * clipboard: - *

- * - *
- * 	Clipboard clipboard = new Clipboard(display);
- *	String textData = "Hello World";
- *	String rtfData = "{\\rtf1\\b\\i Hello World}";
- *	TextTransfer textTransfer = TextTransfer.getInstance();
- *	RTFTransfer rtfTransfer = RTFTransfer.getInstance();
- *	Transfer[] transfers = new Transfer[]{textTransfer, rtfTransfer};
- *	Object[] data = new Object[]{textData, rtfData};
- *	clipboard.setContents(data, transfers, DND.CLIPBOARD);
- *	clipboard.dispose();
- * 
- * - * @param data the data to be set in the clipboard - * @param dataTypes the transfer agents that will convert the data to its - * platform specific format; each entry in the data array must have a - * corresponding dataType - * @param clipboards on which to set the data - * - * @exception IllegalArgumentException - * @exception SWTException - * @exception SWTError - * - *

NOTE: ERROR_CANNOT_SET_CLIPBOARD should be an SWTException, since it is a - * recoverable error, but can not be changed due to backward compatibility.

- * - * @see DND#CLIPBOARD - * @see DND#SELECTION_CLIPBOARD - * - * @since 3.1 - */ -public void setContents(Object[] data, Transfer[] dataTypes, int clipboards) { - checkWidget(); - if (data == null || dataTypes == null || data.length != dataTypes.length) { - DND.error(SWT.ERROR_INVALID_ARGUMENT); - } - - for (int i = 0; i < dataTypes.length; i++) { - if (dataTypes[i] instanceof TextTransfer && data[i] instanceof String){ - display.setData("TextTransfer", data[i]); //$NON-NLS-1$ - return; - } - } -} - -/** - * Returns an array of the data types currently available on the system - * clipboard. Use with Transfer.isSupportedType. - * - * @return array of data types currently available on the system clipboard - * - * @exception SWTException - * - * @see Transfer#isSupportedType - * - * @since 3.0 - */ -public TransferData[] getAvailableTypes() { - checkWidget(); - return new TransferData[0]; -} - -/** - * Returns a platform specific list of the data types currently available on the - * system clipboard. - * - *

Note: getAvailableTypeNames is a utility for writing a Transfer - * sub-class. It should NOT be used within an application because it provides - * platform specific information.

- * - * @return a platform specific list of the data types currently available on the - * system clipboard - * - * @exception SWTException - */ -public String[] getAvailableTypeNames() { - checkWidget(); - return new String[0]; -} -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DragSource.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DragSource.java deleted file mode 100644 index fffc83ce22..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DragSource.java +++ /dev/null @@ -1,593 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.dnd; - -import com.trolltech.qt.core.QByteArray; -import com.trolltech.qt.core.QMimeData; -import com.trolltech.qt.core.Qt.DropAction; -import com.trolltech.qt.core.Qt.DropActions; -import com.trolltech.qt.gui.QDrag; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.Widget; - -/** - * - * DragSource defines the source object for a drag and drop - * transfer. - * - *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - *

- * A drag source is the object which originates a drag and drop operation. For - * the specified widget, it defines the type of data that is available for - * dragging and the set of operations that can be performed on that data. The - * operations can be any bit-wise combination of DND.MOVE, DND.COPY or DND.LINK. - * The type of data that can be transferred is specified by subclasses of - * Transfer such as TextTransfer or FileTransfer. The type of data transferred - * can be a predefined system type or it can be a type defined by the - * application. For instructions on how to define your own transfer type, refer - * to ByteArrayTransfer. - *

- * - *

- * You may have several DragSources in an application but you can only have one - * DragSource per Control. Data dragged from this DragSource can be dropped on a - * site within this application or it can be dropped on another application such - * as an external Text editor. - *

- * - *

- * The application supplies the content of the data being transferred by - * implementing the DragSourceListener and associating it with the - * DragSource via DragSource#addDragListener. - *

- * - *

- * When a successful move operation occurs, the application is required to take - * the appropriate action to remove the data from its display and remove any - * associated operating system resources or internal references. Typically in a - * move operation, the drop target makes a copy of the data and the drag source - * deletes the original. However, sometimes copying the data can take a long - * time (such as copying a large file). Therefore, on some platforms, the drop - * target may actually move the data in the operating system rather than make a - * copy. This is usually only done in file transfers. In this case, the drag - * source is informed in the DragEnd event that a DROP_TARGET_MOVE was - * performed. It is the responsibility of the drag source at this point to clean - * up its displayed information. No action needs to be taken on the operating - * system resources. - *

- * - *

- * The following example shows a Label widget that allows text to be dragged - * from it. - *

- * - *
- * 	// Enable a label as a Drag Source
- * 	Label label = new Label(shell, SWT.NONE);
- * 	// This example will allow text to be dragged
- * 	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
- * 	// This example will allow the text to be copied or moved to the drop target
- * 	int operations = DND.DROP_MOVE | DND.DROP_COPY;
- * 
- * 	DragSource source = new DragSource(label, operations);
- * 	source.setTransfer(types);
- * 	source.addDragListener(new DragSourceListener() {
- * 		public void dragStart(DragSourceEvent e) {
- * 			// Only start the drag if there is actually text in the
- * 			// label - this text will be what is dropped on the target.
- * 			if (label.getText().length() == 0) {
- * 				event.doit = false;
- * 			}
- * 		};
- * 		public void dragSetData(DragSourceEvent event) {
- * 			// A drop has been performed, so provide the data of the
- * 			// requested type.
- * 			// (Checking the type of the requested data is only
- * 			// necessary if the drag source supports more than
- * 			// one data type but is shown here as an example).
- * 			if (TextTransfer.getInstance().isSupportedType(event.dataType)){
- * 				event.data = label.getText();
- * 			}
- * 		}
- * 		public void dragFinished(DragSourceEvent event) {
- * 			// A Move operation has been performed so remove the data
- * 			// from the source
- * 			if (event.detail == DND.DROP_MOVE)
- * 				label.setText("");
- * 		}
- * 	});
- * 
- * - * - *
- *
Styles
- *
DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK
- *
Events
- *
DND.DragStart, DND.DragSetData, DND.DragEnd
- *
- * - * @see Drag and Drop - * snippets - * @see SWT Example: - * DNDExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class DragSource extends Widget { - - // info for registering as a drag source - private Control control; - private Listener controlListener; - private Transfer[] transferAgents = new Transfer[0]; - private DragSourceEffect dragEffect; - private QDrag drag; - - private static final String DEFAULT_DRAG_SOURCE_EFFECT = "DEFAULT_DRAG_SOURCE_EFFECT"; //$NON-NLS-1$ - - /** - * Creates a new DragSource to handle dragging from the - * specified Control. Creating an instance of a DragSource may - * cause system resources to be allocated depending on the platform. It is - * therefore mandatory that the DragSource instance be disposed when no - * longer required. - * - * @param control - * the Control that the user clicks on to initiate - * the drag - * @param style - * the bitwise OR'ing of allowed operations; this may be a - * combination of any of DND.DROP_NONE, DND.DROP_COPY, - * DND.DROP_MOVE, DND.DROP_LINK - * - * @exception SWTException - * - * @exception SWTError - * - * - *

- * NOTE: ERROR_CANNOT_INIT_DRAG should be an SWTException, - * since it is a recoverable error, but can not be changed - * due to backward compatibility. - *

- * - * @see Widget#dispose - * @see DragSource#checkSubclass - * @see DND#DROP_NONE - * @see DND#DROP_COPY - * @see DND#DROP_MOVE - * @see DND#DROP_LINK - */ - public DragSource(Control control, int style) { - super(control, checkStyle(style)); - this.control = control; - if (control.getData(DND.DRAG_SOURCE_KEY) != null) { - DND.error(DND.ERROR_CANNOT_INIT_DRAG); - } - control.setDragEnabled(true); - control.setData(DND.DRAG_SOURCE_KEY, this); - - controlListener = new Listener() { - public void handleEvent(Event event) { - if (event.type == SWT.DragDetect) { - if (!DragSource.this.isDisposed()) { - DragSource.this.drag(event); - return; - } - } - if (event.type == SWT.Dispose) { - if (!DragSource.this.isDisposed()) { - DragSource.this.dispose(); - } - } - } - }; - control.addListener(SWT.Dispose, controlListener); - control.addListener(SWT.DragDetect, controlListener); - - this.addListener(SWT.Dispose, new Listener() { - public void handleEvent(Event e) { - onDispose(); - } - }); - - Object effect = control.getData(DEFAULT_DRAG_SOURCE_EFFECT); - if (effect instanceof DragSourceEffect) { - dragEffect = (DragSourceEffect) effect; - } else if (control instanceof Tree) { - dragEffect = new TreeDragSourceEffect((Tree) control); - } else if (control instanceof Table) { - dragEffect = new TableDragSourceEffect((Table) control); - } - } - - private void drag(Event dragEvent) { - if (transferAgents == null || transferAgents.length == 0) { - return; - } - System.out.println("dragging ongoing"); - - try { - if (drag == null) { - DNDEvent event = new DNDEvent(); - event.widget = this; - event.x = dragEvent.x; - event.y = dragEvent.y; - event.time = dragEvent.time; - event.doit = true; - notifyListeners(DND.DragStart, event); - - if (!event.doit) { - System.out.println("stop after DragStart event"); - return; - } - - QMimeData mimeData = createMimeData(); - if (mimeData == null) { - System.out.println("stop after DragSetData event"); - return; - } - - System.out.println("send mime: " + mimeData); - - drag = new QDrag(control.getQWidget()); - - drag.setMimeData(mimeData); - - DropActions actions = convertOps2Actions(getStyle()); - DropAction dropAction = drag.exec(actions, defaultAction(actions)); - - int operation = convertAction(dropAction); - DNDEvent endEvent = new DNDEvent(); - endEvent.widget = this; - endEvent.doit = operation != 0; - endEvent.detail = operation; - notifyListeners(DND.DragEnd, endEvent); - - control.dragEnd(); - System.out.println(dropAction); - } - } finally { - drag = null; - } - } - - /** - * @param actions - * @return - */ - private DropAction defaultAction(DropActions actions) { - if (actions.isSet(DropAction.CopyAction)) { - return DropAction.CopyAction; - } else if (actions.isSet(DropAction.MoveAction)) { - return DropAction.MoveAction; - } else if (actions.isSet(DropAction.LinkAction)) { - return DropAction.LinkAction; - } else if (actions.isSet(DropAction.TargetMoveAction)) { - return DropAction.TargetMoveAction; - } - return DropAction.IgnoreAction; - } - - /** - * @param dragEvent - * @return - */ - private QMimeData createMimeData() { - QMimeData mimeData = null; - for (Transfer transfer : transferAgents) { - if (transfer == null) { - continue; - } - for (TransferData transferData : transfer.getSupportedTypes()) { - DNDEvent setDataEvent = new DNDEvent(); - setDataEvent.widget = this; - setDataEvent.dataType = transferData; - notifyListeners(DND.DragSetData, setDataEvent); - if (setDataEvent.doit && setDataEvent.data != null) { - transfer.javaToNative(setDataEvent.data, transferData); - if (mimeData == null) { - mimeData = new QMimeData(); - } - mimeData.setData(transferData.format, new QByteArray((byte[]) transferData.data)); - } - } - } - return mimeData; - } - - static int convertAction(DropAction dropAction) { - if (dropAction == DropAction.CopyAction) { - return DND.DROP_COPY; - } - if (dropAction == DropAction.MoveAction) { - return DND.DROP_MOVE; - } - if (dropAction == DropAction.LinkAction) { - return DND.DROP_LINK; - } - if (dropAction == DropAction.TargetMoveAction) { - return DND.DROP_TARGET_MOVE; - } - return DND.DROP_NONE; - } - - static int convertActions(DropActions dropActions) { - int actions = DND.DROP_NONE; - if (dropActions.isSet(DropAction.CopyAction)) { - actions |= DND.DROP_COPY; - } - if (dropActions.isSet(DropAction.MoveAction)) { - actions |= DND.DROP_MOVE; - } - if (dropActions.isSet(DropAction.LinkAction)) { - actions |= DND.DROP_LINK; - } - if (dropActions.isSet(DropAction.TargetMoveAction)) { - actions |= DND.DROP_TARGET_MOVE; - } - return actions; - } - - static DropActions convertOps2Actions(int operations) { - int actions = 0; - if ((operations & DND.DROP_COPY) != 0) { - actions |= DropAction.CopyAction.value(); - } - if ((operations & DND.DROP_MOVE) != 0) { - actions |= DropAction.MoveAction.value(); - } - if ((operations & DND.DROP_LINK) != 0) { - actions |= DropAction.LinkAction.value(); - } - if ((operations & DND.DROP_TARGET_MOVE) != 0) { - actions |= DropAction.TargetMoveAction.value(); - } - return new DropActions(actions); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when a drag and drop operation is in progress, by sending it one of the - * messages defined in the DragSourceListener interface. - * - *

- *

- *

- * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - * - * @exception SWTException - * - * - * @see DragSourceListener - * @see #getDragListeners - * @see #removeDragListener - * @see DragSourceEvent - */ - public void addDragListener(DragSourceListener listener) { - if (listener == null) { - DND.error(SWT.ERROR_NULL_ARGUMENT); - } - DNDListener typedListener = new DNDListener(listener); - typedListener.dndWidget = this; - addListener(DND.DragStart, typedListener); - addListener(DND.DragSetData, typedListener); - addListener(DND.DragEnd, typedListener); - } - - static int checkStyle(int style) { - if (style == SWT.NONE) { - return DND.DROP_MOVE; - } - return style; - } - - @Override - protected void checkSubclass() { - String name = getClass().getName(); - String validName = DragSource.class.getName(); - if (!validName.equals(name)) { - DND.error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - /** - * Returns the Control which is registered for this DragSource. This is the - * control that the user clicks in to initiate dragging. - * - * @return the Control which is registered for this DragSource - */ - public Control getControl() { - return control; - } - - /** - * Returns an array of listeners who will be notified when a drag and drop - * operation is in progress, by sending it one of the messages defined in - * the DragSourceListener interface. - * - * @return the listeners who will be notified when a drag and drop operation - * is in progress - * - * @exception SWTException - * - * - * @see DragSourceListener - * @see #addDragListener - * @see #removeDragListener - * @see DragSourceEvent - * - * @since 3.4 - */ - public DragSourceListener[] getDragListeners() { - Listener[] listeners = getListeners(DND.DragStart); - int length = listeners.length; - DragSourceListener[] dragListeners = new DragSourceListener[length]; - int count = 0; - for (int i = 0; i < length; i++) { - Listener listener = listeners[i]; - if (listener instanceof DNDListener) { - dragListeners[count] = (DragSourceListener) ((DNDListener) listener).getEventListener(); - count++; - } - } - if (count == length) { - return dragListeners; - } - DragSourceListener[] result = new DragSourceListener[count]; - System.arraycopy(dragListeners, 0, result, 0, count); - return result; - } - - /** - * Returns the drag effect that is registered for this DragSource. This drag - * effect will be used during a drag and drop operation. - * - * @return the drag effect that is registered for this DragSource - * - * @since 3.3 - */ - public DragSourceEffect getDragSourceEffect() { - return dragEffect; - } - - /** - * Returns the list of data types that can be transferred by this - * DragSource. - * - * @return the list of data types that can be transferred by this DragSource - */ - public Transfer[] getTransfer() { - return transferAgents; - } - - private void onDispose() { - if (control == null) { - return; - } - if (controlListener != null) { - control.removeListener(SWT.Dispose, controlListener); - control.removeListener(SWT.DragDetect, controlListener); - } - controlListener = null; - control.setData(DND.DRAG_SOURCE_KEY, null); - control = null; - transferAgents = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when a drag and drop operation is in progress. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - * - * @exception SWTException - * - * - * @see DragSourceListener - * @see #addDragListener - * @see #getDragListeners - */ - public void removeDragListener(DragSourceListener listener) { - if (listener == null) { - DND.error(SWT.ERROR_NULL_ARGUMENT); - } - removeListener(DND.DragStart, listener); - removeListener(DND.DragSetData, listener); - removeListener(DND.DragEnd, listener); - } - - /** - * Specifies the drag effect for this DragSource. This drag effect will be - * used during a drag and drop operation. - * - * @param effect - * the drag effect that is registered for this DragSource - * - * @since 3.3 - */ - public void setDragSourceEffect(DragSourceEffect effect) { - dragEffect = effect; - } - - /** - * Specifies the list of data types that can be transferred by this - * DragSource. The application must be able to provide data to match each of - * these types when a successful drop has occurred. - * - * @param transferAgents - * a list of Transfer objects which define the types of data that - * can be dragged from this source - */ - public void setTransfer(Transfer[] transferAgents) { - this.transferAgents = transferAgents; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DropTarget.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DropTarget.java deleted file mode 100644 index 4bf4db6afd..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DropTarget.java +++ /dev/null @@ -1,638 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.dnd; - -import java.util.ArrayList; -import java.util.List; - -import com.trolltech.qt.core.QByteArray; -import com.trolltech.qt.core.QMimeData; -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.Qt.DropAction; -import com.trolltech.qt.core.Qt.DropActions; -import com.trolltech.qt.gui.QDragEnterEvent; -import com.trolltech.qt.gui.QDragLeaveEvent; -import com.trolltech.qt.gui.QDragMoveEvent; -import com.trolltech.qt.gui.QDropEvent; -import com.trolltech.qt.gui.QWidget; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.internal.qt.DragNDropListener; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.Widget; - -/** - * - * Class DropTarget defines the target object for a drag and drop - * transfer. - * - *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - *

- * This class identifies the Control over which the user must - * position the cursor in order to drop the data being transferred. It also - * specifies what data types can be dropped on this control and what operations - * can be performed. You may have several DropTragets in an application but - * there can only be a one to one mapping between a Control and a - * DropTarget. The DropTarget can receive data from within the same - * application or from other applications (such as text dragged from a text - * editor like Word). - *

- * - *
- * 	int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
- * 	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
- * 	DropTarget target = new DropTarget(label, operations);
- * 	target.setTransfer(types);
- * 
- * - *

- * The application is notified of data being dragged over this control and of - * when a drop occurs by implementing the interface - * DropTargetListener which uses the class - * DropTargetEvent. The application can modify the type of drag - * being performed on this Control at any stage of the drag by modifying the - * event.detail field or the event.currentDataType - * field. When the data is dropped, it is the responsibility of the application - * to copy this data for its own purposes. - * - *

- * 	target.addDropListener (new DropTargetListener() {
- * 		public void dragEnter(DropTargetEvent event) {};
- * 		public void dragOver(DropTargetEvent event) {};
- * 		public void dragLeave(DropTargetEvent event) {};
- * 		public void dragOperationChanged(DropTargetEvent event) {};
- * 		public void dropAccept(DropTargetEvent event) {}
- * 		public void drop(DropTargetEvent event) {
- * 			// A drop has occurred, copy over the data
- * 			if (event.data == null) { // no data to copy, indicate failure in event.detail
- * 				event.detail = DND.DROP_NONE;
- * 				return;
- * 			}
- * 			label.setText ((String) event.data); // data copied to label text
- * 		}
- * 	});
- * 
- * - *
- *
Styles
- *
DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK
- *
Events
- *
DND.DragEnter, DND.DragLeave, DND.DragOver, DND.DragOperationChanged, - * DND.DropAccept, DND.Drop
- *
- * - * @see Drag and Drop - * snippets - * @see SWT Example: - * DNDExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class DropTarget extends Widget { - - // info for registering as a droptarget - Control control; - Listener controlListener; - Transfer[] transferAgents = new Transfer[0]; - DropTargetEffect dropEffect; - private DragNDropListener dndListener; - - static final String DEFAULT_DROP_TARGET_EFFECT = "DEFAULT_DROP_TARGET_EFFECT"; //$NON-NLS-1$ - - /** - * Creates a new DropTarget to allow data to be dropped on the - * specified Control. Creating an instance of a DropTarget may - * cause system resources to be allocated depending on the platform. It is - * therefore mandatory that the DropTarget instance be disposed when no - * longer required. - * - * @param control - * the Control over which the user positions the - * cursor to drop the data - * @param style - * the bitwise OR'ing of allowed operations; this may be a - * combination of any of DND.DROP_NONE, DND.DROP_COPY, - * DND.DROP_MOVE, DND.DROP_LINK - * - * @exception SWTException - * - * @exception SWTError - * - * - *

- * NOTE: ERROR_CANNOT_INIT_DROP should be an SWTException, - * since it is a recoverable error, but can not be changed - * due to backward compatibility. - *

- * - * @see Widget#dispose - * @see DropTarget#checkSubclass - * @see DND#DROP_NONE - * @see DND#DROP_COPY - * @see DND#DROP_MOVE - * @see DND#DROP_LINK - */ - public DropTarget(Control control, int style) { - super(control, checkStyle(style)); - this.control = control; - if (control.getData(DND.DROP_TARGET_KEY) != null) { - DND.error(DND.ERROR_CANNOT_INIT_DROP); - } - control.setData(DND.DROP_TARGET_KEY, this); - control.setAcceptDrops(true); - - controlListener = new Listener() { - public void handleEvent(Event event) { - if (!DropTarget.this.isDisposed()) { - DropTarget.this.dispose(); - } - } - }; - control.addListener(SWT.Dispose, controlListener); - - this.addListener(SWT.Dispose, new Listener() { - public void handleEvent(Event event) { - onDispose(); - } - }); - - this.dndListener = new QDNDListener(); - control.setDragNDropListener(dndListener); - - Object effect = control.getData(DEFAULT_DROP_TARGET_EFFECT); - if (effect instanceof DropTargetEffect) { - dropEffect = (DropTargetEffect) effect; - } else if (control instanceof Table) { - dropEffect = new TableDropTargetEffect((Table) control); - } else if (control instanceof Tree) { - dropEffect = new TreeDropTargetEffect((Tree) control); - } - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when a drag and drop operation is in progress, by sending it one of the - * messages defined in the DropTargetListener interface. - * - *

- *

- *

- * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - * - * @exception SWTException - * - * - * @see DropTargetListener - * @see #getDropListeners - * @see #removeDropListener - * @see DropTargetEvent - */ - public void addDropListener(DropTargetListener listener) { - if (listener == null) { - DND.error(SWT.ERROR_NULL_ARGUMENT); - } - DNDListener typedListener = new DNDListener(listener); - typedListener.dndWidget = this; - addListener(DND.DragEnter, typedListener); - addListener(DND.DragLeave, typedListener); - addListener(DND.DragOver, typedListener); - addListener(DND.DragOperationChanged, typedListener); - addListener(DND.Drop, typedListener); - addListener(DND.DropAccept, typedListener); - } - - static int checkStyle(int style) { - if (style == SWT.NONE) { - return DND.DROP_MOVE; - } - return style; - } - - @Override - protected void checkSubclass() { - String name = getClass().getName(); - String validName = DropTarget.class.getName(); - if (!validName.equals(name)) { - DND.error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - /** - * Returns the Control which is registered for this DropTarget. This is the - * control over which the user positions the cursor to drop the data. - * - * @return the Control which is registered for this DropTarget - */ - public Control getControl() { - return control; - } - - /** - * Returns an array of listeners who will be notified when a drag and drop - * operation is in progress, by sending it one of the messages defined in - * the DropTargetListener interface. - * - * @return the listeners who will be notified when a drag and drop operation - * is in progress - * - * @exception SWTException - * - * - * @see DropTargetListener - * @see #addDropListener - * @see #removeDropListener - * @see DropTargetEvent - * - * @since 3.4 - */ - public DropTargetListener[] getDropListeners() { - Listener[] listeners = getListeners(DND.DragEnter); - int length = listeners.length; - DropTargetListener[] dropListeners = new DropTargetListener[length]; - int count = 0; - for (int i = 0; i < length; i++) { - Listener listener = listeners[i]; - if (listener instanceof DropTargetListener) { - dropListeners[count] = (DropTargetListener) ((DNDListener) listener).getEventListener(); - count++; - } - } - if (count == length) { - return dropListeners; - } - DropTargetListener[] result = new DropTargetListener[count]; - System.arraycopy(dropListeners, 0, result, 0, count); - return result; - } - - /** - * Returns the drop effect for this DropTarget. This drop effect will be - * used during a drag and drop to display the drag under effect on the - * target widget. - * - * @return the drop effect that is registered for this DropTarget - * - * @since 3.3 - */ - public DropTargetEffect getDropTargetEffect() { - return dropEffect; - } - - /** - * Specifies the drop effect for this DropTarget. This drop effect will be - * used during a drag and drop to display the drag under effect on the - * target widget. - * - * @param effect - * the drop effect that is registered for this DropTarget - * - * @since 3.3 - */ - public void setDropTargetEffect(DropTargetEffect effect) { - dropEffect = effect; - } - - /** - * Returns a list of the data types that can be transferred to this - * DropTarget. - * - * @return a list of the data types that can be transferred to this - * DropTarget - */ - public Transfer[] getTransfer() { - return transferAgents; - } - - void onDispose() { - if (control == null) { - return; - } - if (controlListener != null) { - control.removeListener(SWT.Dispose, controlListener); - } - controlListener = null; - control.unsetDragNDropListener(dndListener); - dndListener = null; - control.setData(DND.DROP_TARGET_KEY, null); - control.setAcceptDrops(false); - transferAgents = null; - control = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when a drag and drop operation is in progress. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - * - * @exception SWTException - * - * - * @see DropTargetListener - * @see #addDropListener - * @see #getDropListeners - */ - public void removeDropListener(DropTargetListener listener) { - if (listener == null) { - DND.error(SWT.ERROR_NULL_ARGUMENT); - } - removeListener(DND.DragEnter, listener); - removeListener(DND.DragLeave, listener); - removeListener(DND.DragOver, listener); - removeListener(DND.DragOperationChanged, listener); - removeListener(DND.Drop, listener); - removeListener(DND.DropAccept, listener); - } - - /** - * Specifies the data types that can be transferred to this DropTarget. If - * data is being dragged that does not match one of these types, the drop - * target will be notified of the drag and drop operation but the - * currentDataType will be null and the operation will be DND.NONE. - * - * @param transferAgents - * a list of Transfer objects which define the types of data that - * can be dropped on this target - * - * @exception IllegalArgumentException - * - */ - public void setTransfer(Transfer[] transferAgents) { - if (transferAgents == null) { - DND.error(SWT.ERROR_NULL_ARGUMENT); - } - this.transferAgents = transferAgents; - } - - private final class QDNDListener implements DragNDropListener { - TransferData selectedDataType; - int selectedOperation = -1; - - public void dragEnter(QDragEnterEvent qEvent) { - System.out.println("DNDListener.dragEnter"); - - DNDEvent event = new DNDEvent(); - if (!initDNDEvent(event, qEvent.source(), qEvent.mimeData(), qEvent.pos(), qEvent.proposedAction(), qEvent - .possibleActions())) { - return; - } - - int operation = event.detail; - int allowedOperations = event.operations; - System.out.println("proposed op: " + operation + " from: " + event.operations); - selectedDataType = null; - selectedOperation = DND.DROP_NONE; - notifyListeners(DND.DragEnter, event); - - if (!handleEventResponse(qEvent, event, operation, allowedOperations)) { - qEvent.acceptProposedAction(); - } - } - - public void dragMove(QDragMoveEvent qEvent) { - System.out.println("DNDListener.dragMove"); - - DNDEvent event = new DNDEvent(); - if (!initDNDEvent(event, qEvent.source(), qEvent.mimeData(), qEvent.pos(), qEvent.proposedAction(), qEvent - .possibleActions())) { - return; - } - int operation = event.detail; - int allowedOperations = event.operations; - - System.out.println("proposed op: " + operation + " from: " + event.operations); - - selectedDataType = null; - if (selectedOperation != operation) { - System.out.println("op changed"); - notifyListeners(DND.DragOperationChanged, event); - } else { - notifyListeners(DND.DragOver, event); - } - handleEventResponse(qEvent, event, operation, allowedOperations); - } - - public void drop(QDropEvent event) { - System.out.println("DNDListener.drop. selected type: " + selectedDataType + " op: " + selectedOperation); - - DNDEvent swtEvent = new DNDEvent(); - if (!initDNDEvent(swtEvent, event.source(), event.mimeData(), event.pos(), event.proposedAction(), event - .possibleActions())) { - return; - } - - swtEvent.dataType = selectedDataType; - swtEvent.detail = selectedOperation; - - Transfer transfer = getTransfer(selectedDataType.format); - QByteArray ba = event.mimeData().data(selectedDataType.format); - if (ba == null || transfer == null) { - System.out.println("no data or transfer for format: " + selectedDataType.format); - return; - } - selectedDataType.data = ba.toByteArray(); - swtEvent.data = transfer.nativeToJava(selectedDataType); - - notifyListeners(DND.Drop, swtEvent); - handleEventResponse(event, swtEvent, selectedOperation, selectedOperation); - } - - public void dragLeave(QDragLeaveEvent event) { - System.out.println("DNDListener.dragLeave"); - DNDEvent swtEvent = new DNDEvent(); - - swtEvent.widget = DropTarget.this; - swtEvent.detail = DND.DROP_NONE; - notifyListeners(DND.DragLeave, swtEvent); - selectedDataType = null; - selectedOperation = -1; - } - - private boolean initDNDEvent(DNDEvent event, QWidget source, QMimeData mimeData, QPoint globalPos, - DropAction proposedAction, DropActions possibleActions) { - - event.operations = DragSource.convertActions(possibleActions) & getStyle(); - if (event.operations == DND.DROP_NONE) { - return false; - } - - TransferData[] dataTypes = getDataTypes(mimeData); - if (dataTypes.length == 0) { - System.out.println("no supported mime types found"); - return false; - } - - QPoint pos = source.mapToGlobal(globalPos); - event.widget = DropTarget.this; - event.x = pos.x(); - event.y = pos.y(); - event.time = DropTarget.this.control.getDisplay().getLastEventTime(); - event.dataType = dataTypes[0]; - event.dataTypes = dataTypes; - event.detail = DragSource.convertAction(proposedAction); - event.feedback = DND.FEEDBACK_SELECT; - event.doit = true; - if (dropEffect != null) { - event.item = dropEffect.getItem(event.x, event.y); - } - - return true; - } - - private boolean handleEventResponse(QDropEvent qEvent, DNDEvent event, int operation, int allowedOperations) { - selectedDataType = event.dataType; - System.out.println("selected type: " + selectedDataType); - System.out.println("op from event : " + event.detail); - if (event.detail == DND.DROP_DEFAULT) { - event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE; - } - - if (selectedDataType != null && (allowedOperations & event.detail) != 0) { - selectedOperation = event.detail; - } - System.out.println("selected op : " + selectedOperation); - - if (selectedOperation == operation) { - qEvent.acceptProposedAction(); - } else { - if (selectedOperation != DND.DROP_NONE) { - DropAction action = convertOperation(selectedOperation); - System.out.println("changed op: " + action); - qEvent.setDropAction(action); - qEvent.accept(); - } else { - return false; - } - } - return true; - } - - private Transfer getTransfer(String format) { - for (Transfer transfer : transferAgents) { - if (transfer == null) { - continue; - } - for (String typeName : transfer.getTypeNames()) { - if (format.equals(typeName)) { - return transfer; - } - } - } - return null; - } - - private TransferData[] getDataTypes(QMimeData mimeData) { - System.out.println("got mimeData " + mimeData.formats()); - - List dataTypes = new ArrayList(); - for (Transfer transfer : transferAgents) { - if (transfer == null) { - continue; - } - String[] typeNames = transfer.getTypeNames(); - int[] typeIds = transfer.getTypeIds(); - for (int i = 0; i < typeNames.length; i++) { - String typeName = typeNames[i]; - if (mimeData.hasFormat(typeName)) { - TransferData data = new TransferData(); - data.type = typeIds[i]; - data.format = typeName; - dataTypes.add(data); - } - } - } - //System.out.println("mime -> transfer types: " + dataTypes); - return dataTypes.toArray(new TransferData[dataTypes.size()]); - } - - private DropAction convertOperation(int operation) { - if (operation == DND.DROP_COPY) { - return DropAction.CopyAction; - } - if (operation == DND.DROP_MOVE) { - return DropAction.MoveAction; - } - if (operation == DND.DROP_LINK) { - return DropAction.LinkAction; - } - if (operation == DND.DROP_TARGET_MOVE) { - return DropAction.TargetMoveAction; - } - return DropAction.IgnoreAction; - } - - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/FileTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/FileTransfer.java deleted file mode 100644 index 21e615d272..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/FileTransfer.java +++ /dev/null @@ -1,145 +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.dnd; - -/** - * The class FileTransfer provides a platform specific mechanism - * for converting a list of files represented as a java String[] to - * a platform specific representation of the data and vice versa. Each - * String in the array contains the absolute path for a single file - * or directory. - * - *

- * An example of a java String[] containing a list of files is - * shown below: - *

- * - *
- *     File file1 = new File("C:\temp\file1");
- *     File file2 = new File("C:\temp\file2");
- *     String[] fileData = new String[2];
- *     fileData[0] = file1.getAbsolutePath();
- *     fileData[1] = file2.getAbsolutePath();
- * 
- * - * @see Transfer - */ -public class FileTransfer extends ByteArrayTransfer { - /** - * - */ - private static final String SEPARATOR = "\n"; - private static final String URI_LIST = "text/uri-list"; //$NON-NLS-1$ - private static final int URI_LIST_ID = registerType(URI_LIST); - - private FileTransfer() { - } - - private static FileTransfer _instance = new FileTransfer(); - - /** - * Returns the singleton instance of the FileTransfer class. - * - * @return the singleton instance of the FileTransfer class - */ - public static FileTransfer getInstance() { - return _instance; - } - - /** - * This implementation of javaToNative converts a list of file - * names represented by a java String[] to a platform specific - * representation. Each String in the array contains the - * absolute path for a single file or directory. - * - * @param object - * a java String[] containing the file names to be - * converted - * @param transferData - * an empty TransferData object that will be filled - * in on return with the platform specific format of the data - * - * @see Transfer#nativeToJava - */ - @Override - public void javaToNative(Object object, TransferData transferData) { - if (!checkStringArray(object) || !isSupportedType(transferData)) { - DND.error(DND.ERROR_INVALID_DATA); - } - boolean first = true; - StringBuilder sb = new StringBuilder(); - String[] files = (String[]) object; - for (String file : files) { - if (file == null || file.length() == 0) { - continue; - } - System.out.println("dnd file: " + file); - if (first) { - first = false; - } else { - sb.append(SEPARATOR); - } - sb.append("file://"); - sb.append(file); - } - transferData.data = sb.toString().getBytes(); - transferData.format = URI_LIST; - } - - /** - * This implementation of nativeToJava converts a platform - * specific representation of a list of file names to a java - * String[]. Each String in the array contains the absolute - * path for a single file or directory. - * - * @param transferData - * the platform specific representation of the data to be - * converted - * @return a java String[] containing a list of file names if - * the conversion was successful; otherwise null - * - * @see Transfer#javaToNative - */ - @Override - public Object nativeToJava(TransferData transferData) { - byte[] data = (byte[]) super.nativeToJava(transferData); - if (data == null) { - return null; - } - String[] files = new String(data).split(SEPARATOR); - return files; - } - - @Override - protected int[] getTypeIds() { - return new int[] { URI_LIST_ID }; - } - - @Override - protected String[] getTypeNames() { - return new String[] { URI_LIST }; - } - - boolean checkStringArray(Object object) { - if (object == null || !(object instanceof String[]) || ((String[]) object).length == 0) { - return false; - } - String[] strings = (String[]) object; - for (int i = 0; i < strings.length; i++) { - if (strings[i] == null || strings[i].length() == 0) { - return false; - } - } - return true; - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/HTMLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/HTMLTransfer.java deleted file mode 100644 index afdec0185a..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/HTMLTransfer.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 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.swt.dnd; - -/** - * The class HTMLTransfer provides a platform specific mechanism - * for converting text in HTML format represented as a java String - * to a platform specific representation of the data and vice versa. - * - *

An example of a java String containing HTML text is shown - * below:

- * - *
- *     String htmlData = "

This is a paragraph of text.

"; - *
- * - * @see Transfer - */ -public class HTMLTransfer extends ByteArrayTransfer { - - private static HTMLTransfer _instance = new HTMLTransfer(); - private static final String TYPENAME1 = "text/html\0"; - private static final int TYPEID1 = registerType(TYPENAME1); - private static final String TYPENAME2 = "TEXT/HTML\0"; - private static final int TYPEID2 = registerType(TYPENAME2); - -private HTMLTransfer() { -} -/** - * Returns the singleton instance of the HTMLTransfer class. - * - * @return the singleton instance of the HTMLTransfer class - */ -public static HTMLTransfer getInstance () { - return _instance; -} -/** - * This implementation of javaToNative converts HTML-formatted text - * represented by a java String to a platform specific representation. - * - * @param object a java String containing HTML text - * @param transferData an empty TransferData object that will - * be filled in on return with the platform specific format of the data - * - * @see Transfer#nativeToJava - */ -public void javaToNative (Object object, TransferData transferData){ -} -/** - * This implementation of nativeToJava converts a platform specific - * representation of HTML text to a java String. - * - * @param transferData the platform specific representation of the data to be converted - * @return a java String containing HTML text if the conversion was successful; - * otherwise null - * - * @see Transfer#javaToNative - */ -public Object nativeToJava(TransferData transferData){ - return null; -} -protected String[] getTypeNames(){ - return new String[]{TYPENAME1, TYPENAME2}; -} -protected int[] getTypeIds(){ - return new int[]{TYPEID1, TYPEID2}; -} -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ImageTransfer.java deleted file mode 100644 index 8e5c3a4d28..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ImageTransfer.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * 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.swt.dnd; - -/** - * The class ImageTransfer provides a platform specific mechanism - * for converting an Image represented as a java ImageData to a - * platform specific representation of the data and vice versa. - * - *

An example of a java ImageData is shown below:

- * - *
- *     Image image = new Image(display, "C:\temp\img1.gif");
- *	   ImageData imgData = image.getImageData();
- * 
- * - * @see Transfer - * - * @since 3.4 - */ -public class ImageTransfer extends ByteArrayTransfer { - -private ImageTransfer() {} - -/** - * Returns the singleton instance of the ImageTransfer class. - * - * @return the singleton instance of the ImageTransfer class - */ -public static ImageTransfer getInstance () { - return null; -} - -/** - * This implementation of javaToNative converts an ImageData object represented - * by java ImageData to a platform specific representation. - * - * @param object a java ImageData containing the ImageData to be converted - * @param transferData an empty TransferData object that will - * be filled in on return with the platform specific format of the data - * - * @see Transfer#nativeToJava - */ -public void javaToNative(Object object, TransferData transferData) { -} - -/** - * This implementation of nativeToJava converts a platform specific - * representation of an image to java ImageData. - * - * @param transferData the platform specific representation of the data to be converted - * @return a java ImageData of the image if the conversion was successful; - * otherwise null - * - * @see Transfer#javaToNative - */ -public Object nativeToJava(TransferData transferData) { - return null; -} - -protected int[] getTypeIds(){ - return null; -} - -protected String[] getTypeNames(){ - return null; -} -} \ No newline at end of file diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/RTFTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/RTFTransfer.java deleted file mode 100644 index 11085904b3..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/RTFTransfer.java +++ /dev/null @@ -1,79 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 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.swt.dnd; - - -/** - * The class RTFTransfer provides a platform specific mechanism - * for converting text in RTF format represented as a java String - * to a platform specific representation of the data and vice versa. - * - *

An example of a java String containing RTF text is shown - * below:

- * - *
- *     String rtfData = "{\\rtf1{\\colortbl;\\red255\\green0\\blue0;}\\uc1\\b\\i Hello World}";
- * 
- * - * @see Transfer - */ -public class RTFTransfer extends ByteArrayTransfer { - - private static RTFTransfer _instance = new RTFTransfer(); - private static final String TYPENAME1 = "text/rtf\0"; - private static final int TYPEID1 = registerType(TYPENAME1); - private static final String TYPENAME2 = "TEXT/RTF\0"; - private static final int TYPEID2 = registerType(TYPENAME2); - private static final String TYPENAME3 = "application/rtf\0"; - private static final int TYPEID3 = registerType(TYPENAME3); - -private RTFTransfer() { -} -/** - * Returns the singleton instance of the RTFTransfer class. - * - * @return the singleton instance of the RTFTransfer class - */ -public static RTFTransfer getInstance () { - return _instance; -} -/** - * This implementation of javaToNative converts RTF-formatted text - * represented by a java String to a platform specific representation. - * - * @param object a java String containing RTF text - * @param transferData an empty TransferData object that will - * be filled in on return with the platform specific format of the data - * - * @see Transfer#nativeToJava - */ -public void javaToNative (Object object, TransferData transferData){ -} -/** - * This implementation of nativeToJava converts a platform specific - * representation of RTF text to a java String. - * - * @param transferData the platform specific representation of the data to be converted - * @return a java String containing RTF text if the conversion was successful; - * otherwise null - * - * @see Transfer#javaToNative - */ -public Object nativeToJava(TransferData transferData){ - return null; -} -protected String[] getTypeNames(){ - return new String[]{TYPENAME1, TYPENAME2, TYPENAME3}; -} -protected int[] getTypeIds(){ - return new int[]{TYPEID1, TYPEID2, TYPEID3}; -} -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDragSourceEffect.java deleted file mode 100644 index b7dbda53be..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDragSourceEffect.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * 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.swt.dnd; - -import org.eclipse.swt.widgets.*; - -/** - * This class provides default implementations to display a source image - * when a drag is initiated from a Table. - * - *

Classes that wish to provide their own source image for a Table can - * extend the TableDragSourceEffect class, override the - * TableDragSourceEffect.dragStart method and set the field - * DragSourceEvent.image with their own image.

- * - * Subclasses that override any methods of this class must call the corresponding - * super method to get the default drag source effect implementation. - * - * @see DragSourceEffect - * @see DragSourceEvent - * @see Sample code and further information - * - * @since 3.3 - */ -public class TableDragSourceEffect extends DragSourceEffect { - /** - * Creates a new TableDragSourceEffect to handle drag effect - * from the specified Table. - * - * @param table the Table that the user clicks on to initiate the drag - */ - public TableDragSourceEffect(Table table) { - super(table); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDropTargetEffect.java deleted file mode 100644 index 8818ec6a4b..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDropTargetEffect.java +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 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.swt.dnd; - -import org.eclipse.swt.widgets.*; - -/** - * This class provides a default drag under effect (eg. select, insert and scroll) - * when a drag occurs over a Table. - * - *

Classes that wish to provide their own drag under effect for a Table - * can extend the TableDropTargetEffect and override any applicable methods - * in TableDropTargetEffect to display their own drag under effect.

- * - * Subclasses that override any methods of this class must call the corresponding - * super method to get the default drag under effect implementation. - * - *

The feedback value is either one of the FEEDBACK constants defined in - * class DND which is applicable to instances of this class, - * or it must be built by bitwise OR'ing together - * (that is, using the int "|" operator) two or more - * of those DND effect constants. - *

- *

- *

- *
Feedback:
- *
FEEDBACK_SELECT, FEEDBACK_SCROLL
- *
- *

- * - * @see DropTargetAdapter - * @see DropTargetEvent - * @see Sample code and further information - * - * @since 3.3 - */ -public class TableDropTargetEffect extends DropTargetEffect { - /** - * Creates a new TableDropTargetEffect to handle the drag under effect on the specified - * Table. - * - * @param table the Table over which the user positions the cursor to drop the data - */ - public TableDropTargetEffect(Table table) { - super(table); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TextTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TextTransfer.java deleted file mode 100644 index 0b83a9633b..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TextTransfer.java +++ /dev/null @@ -1,106 +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.dnd; - -/** - * The class TextTransfer provides a platform specific mechanism - * for converting plain text represented as a java String to a - * platform specific representation of the data and vice versa. - * - *

- * An example of a java String containing plain text is shown - * below: - *

- * - *
- *     String textData = "Hello World";
- * 
- * - * @see Transfer - */ -public class TextTransfer extends ByteArrayTransfer { - private static final String TYPENAME = "text/plain"; //$NON-NLS-1$ - private static final int TYPEID = registerType(TYPENAME); - private static TextTransfer _instance = new TextTransfer(); - - private TextTransfer() { - } - - /** - * Returns the singleton instance of the TextTransfer class. - * - * @return the singleton instance of the TextTransfer class - */ - public static TextTransfer getInstance() { - return _instance; - } - - /** - * This implementation of javaToNative converts plain text - * represented by a java String to a platform specific - * representation. - * - * @param object - * a java String containing text - * @param transferData - * an empty TransferData object that will be filled - * in on return with the platform specific format of the data - * - * @see Transfer#nativeToJava - */ - @Override - public void javaToNative(Object object, TransferData transferData) { - if (!checkText(object) || !isSupportedType(transferData)) { - DND.error(DND.ERROR_INVALID_DATA); - return; - } - transferData.data = ((String) object).getBytes(); - transferData.format = TYPENAME; - transferData.type = TYPEID; - } - - private boolean checkText(Object object) { - return object != null && object instanceof String && ((String) object).length() > 0; - } - - /** - * This implementation of nativeToJava converts a platform - * specific representation of plain text to a java String. - * - * @param transferData - * the platform specific representation of the data to be - * converted - * @return a java String containing text if the conversion was - * successful; otherwise null - * - * @see Transfer#javaToNative - */ - @Override - public Object nativeToJava(TransferData transferData) { - byte[] data = (byte[]) super.nativeToJava(transferData); - if (data == null) { - return null; - } - return new String(data); - } - - @Override - protected String[] getTypeNames() { - return new String[] { TYPENAME }; - } - - @Override - protected int[] getTypeIds() { - return new int[] { TYPEID }; - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Transfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Transfer.java deleted file mode 100644 index 4ed963d9f0..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Transfer.java +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 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.swt.dnd; - -/** - * Transfer provides a mechanism for converting between a java - * representation of data and a platform specific representation of data and - * vice versa. It is used in data transfer operations such as drag and drop and - * clipboard copy/paste. - * - *

- * You should only need to become familiar with this class if you are - * implementing a Transfer subclass and you are unable to subclass the - * ByteArrayTransfer class. - *

- * - * @see ByteArrayTransfer - * @see Drag and Drop - * snippets - * @see SWT Example: - * DNDExample - * @see Sample code and further - * information - */ -public abstract class Transfer { - - /** - * Returns a list of the platform specific data types that can be converted - * using this transfer agent. - * - *

- * Only the data type fields of the TransferData objects are - * filled in. - *

- * - * @return a list of the data types that can be converted using this - * transfer agent - */ - abstract public TransferData[] getSupportedTypes(); - - /** - * Returns true if the TransferData data type can be converted - * using this transfer agent, or false otherwise (including if transferData - * is null). - * - * @param transferData - * a platform specific description of a data type; only the data - * type fields of the TransferData object need to be - * filled in - * - * @return true if the transferData data type can be converted using this - * transfer agent - */ - abstract public boolean isSupportedType(TransferData transferData); - - /** - * Returns the platform specific names of the data types that can be - * converted using this transfer agent. - * - * @return the platform specific names of the data types that can be - * converted using this transfer agent. - */ - abstract protected String[] getTypeNames(); - - /** - * Returns the platform specific ids of the data types that can be converted - * using this transfer agent. - * - * @return the platform specific ids of the data types that can be converted - * using this transfer agent - */ - abstract protected int[] getTypeIds(); - - /** - * Converts a java representation of data to a platform specific - * representation of the data. - * - *

- * On a successful conversion, the transferData.result field will be set as - * follows: - *

    - *
  • Windows: COM.S_OK - *
  • Motif: 1 - *
  • GTK: 1 - *
  • Photon: 1 - *
- *

- * - *

- * If this transfer agent is unable to perform the conversion, the - * transferData.result field will be set to a failure value as follows: - *

    - *
  • Windows: COM.DV_E_TYMED or COM.E_FAIL - *
  • Motif: 0 - *
  • GTK: 0 - *
  • Photon: 0 - *
- *

- * - * @param object - * a java representation of the data to be converted; the type of - * Object that is passed in is dependent on the - * Transfer subclass. - * - * @param transferData - * an empty TransferData object; this object will be filled in on - * return with the platform specific representation of the data - * - * @exception org.eclipse.swt.SWTException - *
    - *
  • ERROR_INVALID_DATA - if object does not contain data - * in a valid format or is null
  • - *
- */ - abstract protected void javaToNative(Object object, TransferData transferData); - - /** - * Converts a platform specific representation of data to a java - * representation. - * - * @param transferData - * the platform specific representation of the data to be - * converted - * - * @return a java representation of the converted data if the conversion was - * successful; otherwise null. If transferData is null - * then null is returned. The type of Object that is - * returned is dependent on the Transfer subclass. - */ - abstract protected Object nativeToJava(TransferData transferData); - - /** - * Registers a name for a data type and returns the associated unique - * identifier. - * - *

- * You may register the same type more than once, the same unique identifier - * will be returned if the type has been previously registered. - *

- * - *

- * Note: On windows, do not call this method with pre-defined - * Clipboard Format types such as CF_TEXT or CF_BITMAP because the - * pre-defined identifier will not be returned - *

- * - * @param formatName - * the name of a data type - * - * @return the unique identifier associated with this data type - */ - public static int registerType(String formatName) { - return formatName.hashCode(); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TransferData.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TransferData.java deleted file mode 100644 index cd59afd06a..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TransferData.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.dnd; - -/** - * The TransferData class is a platform specific data structure for - * describing the type and the contents of data being converted by a transfer - * agent. - * - *

- * As an application writer, you do not need to know the specifics of - * TransferData. TransferData instances are passed to a subclass of Transfer and - * the Transfer object manages the platform specific issues. You can ask a - * Transfer subclass if it can handle this data by calling - * Transfer.isSupportedType(transferData). - *

- * - *

- * You should only need to become familiar with the fields in this class if you - * are implementing a Transfer subclass and you are unable to subclass the - * ByteArrayTransfer class. - *

- * - * @see Sample code and further - * information - */ -public class TransferData { - /** - * The type is a unique identifier of a system format or user defined - * format. (Warning: This field is platform dependent) - *

- * IMPORTANT: This field is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms and should never be - * accessed from application code. - *

- */ - public int type; - - // attributes specific to set/get - Object data; - String format; - - /** - * The result field contains the result of converting a java data type into - * a platform specific value. (Warning: This field is platform dependent) - *

- * IMPORTANT: This field is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms and should never be - * accessed from application code. - *

- *

- * The value of result is 1 if the conversion was successful. The value of - * result is 0 if the conversion failed. - *

- */ - // int result; - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder("TransferData {type: ");//$NON-NLS-1$ - sb.append(type); - sb.append(", format: ");//$NON-NLS-1$ - sb.append(format); - sb.append(", data: ");//$NON-NLS-1$ - sb.append(data); - sb.append("}"); //$NON-NLS-1$ - return sb.toString(); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDragSourceEffect.java deleted file mode 100644 index 7a66bebb22..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDragSourceEffect.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * 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.swt.dnd; - -import org.eclipse.swt.widgets.*; - -/** - * This class provides default implementations to display a source image - * when a drag is initiated from a Tree. - * - *

Classes that wish to provide their own source image for a Tree can - * extend TreeDragSourceEffect class and override the TreeDragSourceEffect.dragStart - * method and set the field DragSourceEvent.image with their own image.

- * - * Subclasses that override any methods of this class must call the corresponding - * super method to get the default drag under effect implementation. - * - * @see DragSourceEffect - * @see DragSourceEvent - * @see Sample code and further information - * - * @since 3.3 - */ -public class TreeDragSourceEffect extends DragSourceEffect { - /** - * Creates a new TreeDragSourceEffect to handle drag effect - * from the specified Tree. - * - * @param tree the Tree that the user clicks on to initiate the drag - */ - public TreeDragSourceEffect(Tree tree) { - super(tree); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDropTargetEffect.java deleted file mode 100644 index d5eaaeb31a..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDropTargetEffect.java +++ /dev/null @@ -1,129 +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.dnd; - -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.swt.widgets.Widget; - -/** - * This class provides a default drag under effect (eg. select, insert, scroll - * and expand) when a drag occurs over a Tree. - * - *

- * Classes that wish to provide their own drag under effect for a - * Tree can extend the TreeDropTargetEffect class and - * override any applicable methods in TreeDropTargetEffect to - * display their own drag under effect. - *

- * - * Subclasses that override any methods of this class must call the - * corresponding super method to get the default drag under effect - * implementation. - * - *

- * The feedback value is either one of the FEEDBACK constants defined in class - * DND which is applicable to instances of this class, or it must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those DND effect - * constants. - *

- *

- *

- *
Feedback:
- *
FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, - * FEEDBACK_EXPAND, FEEDBACK_SCROLL
- *
- *

- *

- * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or - * FEEDBACK_INSERT_AFTER may be specified. - *

- * - * @see DropTargetAdapter - * @see DropTargetEvent - * @see Sample code and further - * information - * - * @since 3.3 - */ -public class TreeDropTargetEffect extends DropTargetEffect { - /** - * Creates a new TreeDropTargetEffect to handle the drag under - * effect on the specified Tree. - * - * @param tree - * the Tree over which the user positions the cursor - * to drop the data - */ - public TreeDropTargetEffect(Tree tree) { - super(tree); - } - - @Override - public void dragEnter(DropTargetEvent event) { - System.out.println("TreeDropTargetEffect.dragEnter: " + event); - super.dragEnter(event); - } - - @Override - public void dragLeave(DropTargetEvent event) { - System.out.println("TreeDropTargetEffect.dragLeave: " + event); - super.dragLeave(event); - } - - @Override - public void dragOver(DropTargetEvent event) { - System.out.println("TreeDropTargetEffect.dragOver: " + event); - Tree tree = (Tree) control; - //int effect = checkEffect(event.feedback); - - TreeItem item = tree.getItem(tree.toControl(new Point(event.x, event.y))); - - tree.highlightItem(item); - } - - @Override - public void drop(DropTargetEvent event) { - System.out.println("TreeDropTargetEffect.drop: " + event); - super.drop(event); - } - - @Override - public void dropAccept(DropTargetEvent event) { - System.out.println("TreeDropTargetEffect.dropAccept: " + event); - super.dropAccept(event); - } - - @Override - public Widget getItem(int x, int y) { - //System.out.println("TreeDropTargetEffect.getItem: " + x + " " + y); - Tree tree = (Tree) control; - TreeItem item = tree.getItem(tree.toControl(new Point(x, y))); - //System.out.println("item: " + item); - return item; - } - - private int checkEffect(int effect) { - // Some effects are mutually exclusive. Make sure that only one of the mutually exclusive effects has been specified. - if ((effect & DND.FEEDBACK_SELECT) != 0) { - effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE; - } - if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) { - effect = effect & ~DND.FEEDBACK_INSERT_AFTER; - } - return effect; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/URLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/URLTransfer.java deleted file mode 100644 index 589d3ec7c1..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/URLTransfer.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 20007 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.swt.dnd; - -/** - * The class URLTransfer provides a platform specific mechanism - * for converting text in URL format represented as a java String - * to a platform specific representation of the data and vice versa. The string - * must contain a fully specified url. - * - *

An example of a java String containing a URL is shown below:

- * - *
- *     String url = "http://www.eclipse.org";
- * 
- * - * @see Transfer - * @since 3.4 - */ -public class URLTransfer extends ByteArrayTransfer { - -private URLTransfer() {} - -/** - * Returns the singleton instance of the URLTransfer class. - * - * @return the singleton instance of the URLTransfer class - */ -public static URLTransfer getInstance () { - return null; -} - -/** - * This implementation of javaToNative converts a URL - * represented by a java String to a platform specific representation. - * - * @param object a java String containing a URL - * @param transferData an empty TransferData object that will - * be filled in on return with the platform specific format of the data - * - * @see Transfer#nativeToJava - */ -public void javaToNative (Object object, TransferData transferData){ -} - -/** - * This implementation of nativeToJava converts a platform - * specific representation of a URL to a java String. - * - * @param transferData the platform specific representation of the data to be converted - * @return a java String containing a URL if the conversion was successful; - * otherwise null - * - * @see Transfer#javaToNative - */ -public Object nativeToJava(TransferData transferData){ - return null; -} - -protected int[] getTypeIds(){ - return null; -} - -protected String[] getTypeNames(){ - return null; -} -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Color.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Color.java deleted file mode 100644 index 9d39595e17..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Color.java +++ /dev/null @@ -1,364 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2007 IBM Corporation and others. - * Portion Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). - * 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 - * Nokia Corporation - Qt implementation - * Compeople AG - QtJambi/Qt based implementation for Windows/Mac OS X/Linux - *******************************************************************************/ -package org.eclipse.swt.graphics; - -import com.trolltech.qt.gui.QColor; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; - -/** - * Instances of this class manage the operating system resources that implement - * SWT's RGB color model. To create a color you can either specify the - * individual color components as integers in the range 0 to 255 or provide an - * instance of an RGB. - *

- * Application code must explicitly invoke the Color.dispose() - * method to release the operating system resources managed by each instance - * when those instances are no longer required. - *

- * - * @see RGB - * @see Device#getSystemColor - */ -public final class Color extends Resource { - - /** - * the handle to the OS color resource (Warning: This field is platform - * dependent) - *

- * IMPORTANT: This field is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms and should never be - * accessed from application code. - *

- */ - private QColor color; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Color() { - } - - /** - * Constructs a new instance of this class given a device and the desired - * red, green and blue values expressed as ints in the range 0 to 255 (where - * 0 is black and 255 is full brightness). On limited color devices, the - * color instance created by this call may not have the same RGB values as - * the ones specified by the arguments. The RGB values on the returned - * instance will be the color values of the operating system color. - *

- * You must dispose the color when it is no longer required. - *

- * - * @param device - * the device on which to allocate the color - * @param red - * the amount of red in the color - * @param green - * the amount of green in the color - * @param blue - * the amount of blue in the color - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
  • - *
  • ERROR_INVALID_ARGUMENT - if the red, green or blue - * argument is not between 0 and 255
  • - *
- * - * @see #dispose - */ - public Color(Device device, int red, int green, int blue) { - init(device, red, green, blue); - } - - /** - * Constructs a new instance of this class given a device and an - * RGB describing the desired red, green and blue values. On - * limited color devices, the color instance created by this call may not - * have the same RGB values as the ones specified by the argument. The RGB - * values on the returned instance will be the color values of the operating - * system color. - *

- * You must dispose the color when it is no longer required. - *

- * - * @param device - * the device on which to allocate the color - * @param rgb - * the RGB values of the desired color - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
  • - *
  • ERROR_NULL_ARGUMENT - if the rgb argument is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the red, green or blue - * components of the argument are not between 0 and 255
  • - *
- * - * @see #dispose - */ - public Color(Device device, RGB rgb) { - if (rgb == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - init(device, rgb.red, rgb.green, rgb.blue); - } - - /** - * Disposes of the operating system resources associated with this resource. - * Applications must dispose of all resources which they allocate. - */ - @Override - public void dispose() { - if (device == null) { - return; - } - if (device.isDisposed()) { - return; - } - if (device.tracking) { - device.dispose_Object(this); - } - device = null; - color = null; - } - - /** - * Compares the argument to the receiver, and returns true if they represent - * the same object using a class specific comparison. - * - * @param object - * the object to compare with this object - * @return true if the object is the same as this object and - * false otherwise - * - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - if (object == this) { - return true; - } - if (!(object instanceof Color)) { - return false; - } - Color color = (Color) object; - if (isDisposed() || color.isDisposed()) { - return false; - } - return this.color.equals(color.color); - } - - /** - * Returns the amount of blue in the color, from 0 to 255. - * - * @return the blue component of the color - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public int getBlue() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return color.blue(); - } - - /** - * Returns the amount of green in the color, from 0 to 255. - * - * @return the green component of the color - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public int getGreen() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return color.green(); - } - - /** - * Returns the amount of red in the color, from 0 to 255. - * - * @return the red component of the color - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public int getRed() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return color.red(); - } - - /** - * Returns an RGB representing the receiver. - * - * @return the RGB for the color - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public RGB getRGB() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return new RGB(color.red(), color.green(), color.blue()); - } - - /** - * Returns an integer hash code for the receiver. Any two objects that - * return true when passed to equals must return - * the same value for this method. - * - * @return the receiver's hash - * - * @see #equals - */ - @Override - public int hashCode() { - if (isDisposed()) { - return 0; - } - return color.hashCode(); - } - - /** - * Invokes platform specific functionality to allocate a new color. - *

- * IMPORTANT: This method is not part of the public API for - * Color. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

- * - * @param red - * the red component - * @param green - * the green component - * @param blue - * the blue component - * - * @private - */ - - void init(Device device, int red, int green, int blue) { - - if (device == null) { - device = Device.getDevice(); - } - if (device == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - this.device = device; - - if (red > 255 || red < 0 || green > 255 || green < 0 || blue > 255 || blue < 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - // Keep this after dealing with all exceptions! - if (device.tracking) { - device.new_Object(this); - } - color = new QColor(red, green, blue); - } - - public QColor getColor() { - if (color == null) { - color = new QColor(getRed(), getGreen(), getBlue()); - } - return color; - } - - /** - * Returns true if the color has been disposed, and - * false otherwise. - *

- * This method gets the dispose state for the color. When a color has been - * disposed, it is an error to invoke any other method using the color. - * - * @return true when the color is disposed and - * false otherwise - */ - @Override - public boolean isDisposed() { - return color == null; - } - - /** - * Returns a string containing a concise, human-readable description of the - * receiver. - * - * @return a string representation of the receiver - */ - @Override - public String toString() { - if (isDisposed()) { - return "Color {*DISPOSED*}"; //$NON-NLS-1$ - } - return "Color {" + getRed() + ", " + getGreen() + ", " + getBlue() + "}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - - /** - * Invokes platform specific functionality to allocate a new color. - *

- * IMPORTANT: This method is not part of the public API for - * Color. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

- * - * @param device - * the device on which to allocate the color - * @param handle - * the handle for the color - * @return a new color object containing the specified device and handle - */ - public static Color qt_new(Device device, int rgb) { - Color color = new Color(); - color.device = device; - color.color = new QColor(rgb); - return color; - } - - public static Color qt_new(Device device, QColor qColor) { - Color color = new Color(device, qColor.red(), qColor.green(), qColor.blue()); - color.color = qColor; - return color; - } - - public int getPixel() { - return getColor().value(); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Cursor.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Cursor.java deleted file mode 100644 index 6803a4d1a8..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Cursor.java +++ /dev/null @@ -1,445 +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.graphics; - -import com.trolltech.qt.core.Qt.CursorShape; -import com.trolltech.qt.gui.QCursor; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; - -/** - * Instances of this class manage operating system resources that specify the - * appearance of the on-screen pointer. To create a cursor you specify the - * device and either a simple cursor style describing one of the standard - * operating system provided cursors or the image and mask data for the desired - * appearance. - *

- * Application code must explicitly invoke the Cursor.dispose() - * method to release the operating system resources managed by each instance - * when those instances are no longer required. - *

- *
- *
Styles:
- *
- * CURSOR_ARROW, CURSOR_WAIT, CURSOR_CROSS, CURSOR_APPSTARTING, CURSOR_HELP, - * CURSOR_SIZEALL, CURSOR_SIZENESW, CURSOR_SIZENS, CURSOR_SIZENWSE, - * CURSOR_SIZEWE, CURSOR_SIZEN, CURSOR_SIZES, CURSOR_SIZEE, CURSOR_SIZEW, - * CURSOR_SIZENE, CURSOR_SIZESE, CURSOR_SIZESW, CURSOR_SIZENW, CURSOR_UPARROW, - * CURSOR_IBEAM, CURSOR_NO, CURSOR_HAND
- *
- *

- * Note: Only one of the above styles may be specified. - *

- * - * @see Cursor - * snippets - * @see Sample code and further - * information - */ - -public final class Cursor extends Resource { - - /** - * the handle to the OS cursor resource (Warning: This field is platform - * dependent) - *

- * IMPORTANT: This field is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms and should never be - * accessed from application code. - *

- */ - public QCursor cursor; - - boolean isIcon; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Cursor(Device device) { - super(device); - } - - /** - * Constructs a new cursor given a device and a style constant describing - * the desired cursor appearance. - *

- * You must dispose the cursor when it is no longer required. - *

- * - * @param device - * the device on which to allocate the cursor - * @param style - * the style of cursor to allocate - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
  • - *
  • ERROR_INVALID_ARGUMENT - when an unknown style is - * specified
  • - *
- * @exception SWTError - *
    - *
  • ERROR_NO_HANDLES - if a handle could not be obtained - * for cursor creation
  • - *
- * - * @see SWT#CURSOR_ARROW - * @see SWT#CURSOR_WAIT - * @see SWT#CURSOR_CROSS - * @see SWT#CURSOR_APPSTARTING - * @see SWT#CURSOR_HELP - * @see SWT#CURSOR_SIZEALL - * @see SWT#CURSOR_SIZENESW - * @see SWT#CURSOR_SIZENS - * @see SWT#CURSOR_SIZENWSE - * @see SWT#CURSOR_SIZEWE - * @see SWT#CURSOR_SIZEN - * @see SWT#CURSOR_SIZES - * @see SWT#CURSOR_SIZEE - * @see SWT#CURSOR_SIZEW - * @see SWT#CURSOR_SIZENE - * @see SWT#CURSOR_SIZESE - * @see SWT#CURSOR_SIZESW - * @see SWT#CURSOR_SIZENW - * @see SWT#CURSOR_UPARROW - * @see SWT#CURSOR_IBEAM - * @see SWT#CURSOR_NO - * @see SWT#CURSOR_HAND - */ - public Cursor(Device device, int style) { - super(device); - CursorShape cursorShape = null; - switch (style) { - case SWT.CURSOR_HAND: - cursorShape = CursorShape.PointingHandCursor; - break; - case SWT.CURSOR_ARROW: - cursorShape = CursorShape.ArrowCursor; - break; - case SWT.CURSOR_WAIT: - cursorShape = CursorShape.WaitCursor; - break; - case SWT.CURSOR_CROSS: - cursorShape = CursorShape.CrossCursor; - break; - case SWT.CURSOR_APPSTARTING: - cursorShape = CursorShape.BusyCursor; - break; - case SWT.CURSOR_HELP: - cursorShape = CursorShape.WhatsThisCursor; - break; - case SWT.CURSOR_SIZEALL: - cursorShape = CursorShape.SizeAllCursor; - break; - case SWT.CURSOR_SIZENESW: - cursorShape = CursorShape.SizeBDiagCursor; - break; - case SWT.CURSOR_SIZENS: - cursorShape = CursorShape.SizeVerCursor; - break; - case SWT.CURSOR_SIZENWSE: - cursorShape = CursorShape.SizeFDiagCursor; - break; - case SWT.CURSOR_SIZEWE: - cursorShape = CursorShape.SizeHorCursor; - break; - case SWT.CURSOR_SIZEN: - cursorShape = CursorShape.SizeVerCursor; - break; - case SWT.CURSOR_SIZES: - cursorShape = CursorShape.SizeVerCursor; - break; - case SWT.CURSOR_SIZEE: - cursorShape = CursorShape.SizeHorCursor; - break; - case SWT.CURSOR_SIZEW: - cursorShape = CursorShape.SizeHorCursor; - break; - case SWT.CURSOR_SIZENE: - cursorShape = CursorShape.SizeBDiagCursor; - break; - case SWT.CURSOR_SIZESE: - cursorShape = CursorShape.SizeBDiagCursor; - break; - case SWT.CURSOR_SIZESW: - cursorShape = CursorShape.SizeFDiagCursor; - break; - case SWT.CURSOR_SIZENW: - cursorShape = CursorShape.SizeFDiagCursor; - break; - case SWT.CURSOR_UPARROW: - cursorShape = CursorShape.UpArrowCursor; - break; - case SWT.CURSOR_IBEAM: - cursorShape = CursorShape.IBeamCursor; - break; - case SWT.CURSOR_NO: - cursorShape = CursorShape.ForbiddenCursor; - - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - cursor = new QCursor(cursorShape); - init(); - } - - /** - * Constructs a new cursor given a device, image and mask data describing - * the desired cursor appearance, and the x and y coordinates of the - * hotspot (that is, the point within the area covered by the - * cursor which is considered to be where the on-screen pointer is - * "pointing"). - *

- * The mask data is allowed to be null, but in this case the source must be - * an ImageData representing an icon that specifies both color data and mask - * data. - *

- * You must dispose the cursor when it is no longer required. - *

- * - * @param device - * the device on which to allocate the cursor - * @param source - * the color data for the cursor - * @param mask - * the mask data for the cursor (or null) - * @param hotspotX - * the x coordinate of the cursor's hotspot - * @param hotspotY - * the y coordinate of the cursor's hotspot - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
  • - *
  • ERROR_NULL_ARGUMENT - if the source is null
  • - *
  • ERROR_NULL_ARGUMENT - if the mask is null and the - * source does not have a mask
  • - *
  • ERROR_INVALID_ARGUMENT - if the source and the mask - * are not the same size, or if the hotspot is outside the - * bounds of the image
  • - *
- * @exception SWTError - *
    - *
  • ERROR_NO_HANDLES - if a handle could not be obtained - * for cursor creation
  • - *
- */ - public Cursor(Device device, ImageData source, ImageData mask, int hotspotX, int hotspotY) { - this(device, SWT.CURSOR_ARROW); - //TODO - // super(device); - // if (source == null) { - // SWT.error(SWT.ERROR_NULL_ARGUMENT); - // } - // if (mask == null) { - // if (source.getTransparencyType() != SWT.TRANSPARENCY_MASK) { - // SWT.error(SWT.ERROR_NULL_ARGUMENT); - // } - // mask = source.getTransparencyMask(); - // } - // /* Check the bounds. Mask must be the same size as source */ - // if (mask.width != source.width || mask.height != source.height) { - // SWT.error(SWT.ERROR_INVALID_ARGUMENT); - // } - // /* Check the hotspots */ - // if (hotspotX >= source.width || hotspotX < 0 || hotspotY >= source.height || hotspotY < 0) { - // SWT.error(SWT.ERROR_INVALID_ARGUMENT); - // } - // /* Convert depth to 1 */ - // mask = ImageData.convertMask(mask); - // source = ImageData.convertMask(source); - // - // /* Make sure source and mask scanline pad is 2 */ - // byte[] sourceData = ImageData.convertPad(source.data, source.width, source.height, source.depth, - // source.scanlinePad, 2); - // byte[] maskData = ImageData.convertPad(mask.data, mask.width, mask.height, mask.depth, mask.scanlinePad, 2); - - /* Create the cursor */ - // TODO - // cursor = new QCursor(mask.) - // int /* long */hInst = OS.GetModuleHandle(null); - // if (OS.IsWinCE) { - // SWT.error(SWT.ERROR_NOT_IMPLEMENTED); - // } - // handle = OS.CreateCursor(hInst, hotspotX, hotspotY, source.width, source.height, sourceData, maskData); - // if (handle == 0) { - // SWT.error(SWT.ERROR_NO_HANDLES); - // } - //init(); - } - - /** - * Constructs a new cursor given a device, image data describing the desired - * cursor appearance, and the x and y coordinates of the hotspot - * (that is, the point within the area covered by the cursor which is - * considered to be where the on-screen pointer is "pointing"). - *

- * You must dispose the cursor when it is no longer required. - *

- * - * @param device - * the device on which to allocate the cursor - * @param source - * the image data for the cursor - * @param hotspotX - * the x coordinate of the cursor's hotspot - * @param hotspotY - * the y coordinate of the cursor's hotspot - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
  • - *
  • ERROR_NULL_ARGUMENT - if the image is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the hotspot is outside the - * bounds of the image
  • - *
- * @exception SWTError - *
    - *
  • ERROR_NO_HANDLES - if a handle could not be obtained - * for cursor creation
  • - *
- * - * @since 3.0 - */ - public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) { - this(device, SWT.CURSOR_ARROW); - // if (source == null) { - // SWT.error(SWT.ERROR_NULL_ARGUMENT); - // } - // /* Check the hotspots */ - // if (hotspotX >= source.width || hotspotX < 0 || hotspotY >= source.height || hotspotY < 0) { - // SWT.error(SWT.ERROR_INVALID_ARGUMENT); - // } - - // ImageData mask = source.getTransparencyMask(); - // int /* long */[] result = new int[2]; // TODO = Image.init(this.device, null, source, mask); - // int /* long */hBitmap = result[0]; - // int /* long */hMask = result[1]; - // /* Create the icon */ - // ICONINFO info = new ICONINFO(); - // info.fIcon = false; - // info.hbmColor = hBitmap; - // info.hbmMask = hMask; - // info.xHotspot = hotspotX; - // info.yHotspot = hotspotY; - //TODO - // handle = OS.CreateIconIndirect(info); - // if (handle == 0) { - // SWT.error(SWT.ERROR_NO_HANDLES); - // } - // OS.DeleteObject(hBitmap); - // OS.DeleteObject(hMask); - //isIcon = true; - // init(); - } - - @Override - void destroy() { - cursor = null; - } - - /** - * Compares the argument to the receiver, and returns true if they represent - * the same object using a class specific comparison. - * - * @param object - * the object to compare with this object - * @return true if the object is the same as this object and - * false otherwise - * - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - if (object == this) { - return true; - } - if (!(object instanceof Cursor)) { - return false; - } - Cursor cursor = (Cursor) object; - return device == cursor.device && this.cursor == cursor.cursor; - } - - /** - * Returns an integer hash code for the receiver. Any two objects that - * return true when passed to equals must return - * the same value for this method. - * - * @return the receiver's hash - * - * @see #equals - */ - @Override - public int hashCode() { - return cursor.hashCode(); - } - - /** - * Returns true if the cursor has been disposed, and - * false otherwise. - *

- * This method gets the dispose state for the cursor. When a cursor has been - * disposed, it is an error to invoke any other method using the cursor. - * - * @return true when the cursor is disposed and - * false otherwise - */ - @Override - public boolean isDisposed() { - return cursor == null; - } - - /** - * Returns a string containing a concise, human-readable description of the - * receiver. - * - * @return a string representation of the receiver - */ - @Override - public String toString() { - if (isDisposed()) { - return "Cursor {*DISPOSED*}"; //$NON-NLS-1$ - } - return "Cursor {" + cursor + "}"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - /** - * Invokes platform specific functionality to allocate a new cursor. - *

- * IMPORTANT: This method is not part of the public API for - * Cursor. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

- * - * @param device - * the device on which to allocate the color - * @param handle - * the handle for the cursor - * @return a new cursor object containing the specified device and handle - */ - public static Cursor win32_new(Device device, int handle) { - Cursor cursor = new Cursor(device); - // TODO - // cursor.cursor = handle; - return cursor; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Device.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Device.java deleted file mode 100644 index 99a3dcb47a..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Device.java +++ /dev/null @@ -1,920 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.graphics; - -import java.util.ArrayList; -import java.util.List; - -import com.trolltech.qt.gui.QApplication; -import com.trolltech.qt.gui.QColor; -import com.trolltech.qt.gui.QFontDatabase; -import com.trolltech.qt.gui.QPaintDeviceInterface; -import com.trolltech.qt.gui.QPalette; -import com.trolltech.qt.gui.QPalette.ColorGroup; -import com.trolltech.qt.gui.QPalette.ColorRole; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; - -/** - * This class is the abstract superclass of all device objects, such as the - * Display device and the Printer device. Devices can have a graphics context - * (GC) created for them, and they can be drawn on by sending messages to the - * associated GC. - * - * @see Sample code and further - * information - */ -public abstract class Device implements Drawable { - - /* Debugging */ - public static boolean DEBUG; - private boolean debug = DEBUG; - boolean tracking = DEBUG; - private Error[] errors; - private Object[] objects; - private Object trackingLock; - - /* System Font */ - Font systemFont; - private QColor COLOR_LIST_BACKGROUND; - private QColor COLOR_LIST_FOREGROUND; - private QColor COLOR_LIST_SELECTION; - private QColor COLOR_LIST_SELECTION_TEXT; - private QColor COLOR_TITLE_BACKGROUND; - private QColor COLOR_TITLE_BACKGROUND_GRADIENT; - private QColor COLOR_TITLE_FOREGROUND; - private QColor COLOR_TITLE_INACTIVE_BACKGROUND; - private QColor COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT; - private QColor COLOR_TITLE_INACTIVE_FOREGROUND; - private QColor COLOR_WIDGET_BACKGROUND; - private QColor COLOR_WIDGET_BORDER; - private QColor COLOR_WIDGET_DARK_SHADOW; - private QColor COLOR_WIDGET_FOREGROUND; - private QColor COLOR_WIDGET_HIGHLIGHT_SHADOW; - private QColor COLOR_WIDGET_LIGHT_SHADOW; - private QColor COLOR_WIDGET_NORMAL_SHADOW; - private QColor COLOR_INFO_FOREGROUND; - private QColor COLOR_INFO_BACKGROUND; - - private boolean disposed; - private QPaintDeviceInterface paintDevice; - - /* - * TEMPORARY CODE. When a graphics object is created and the device - * parameter is null, the current Display is used. This presents a problem - * because SWT graphics does not reference classes in SWT widgets. The - * correct fix is to remove this feature. Unfortunately, too many - * application programs rely on this feature. - */ - protected static Device CurrentDevice; - protected static Runnable DeviceFinder; - static { - try { - Class.forName("org.eclipse.swt.widgets.Display"); //$NON-NLS-1$ - } catch (ClassNotFoundException e) { - } - } - - /* - * TEMPORARY CODE. - */ - static synchronized Device getDevice() { - if (DeviceFinder != null) { - DeviceFinder.run(); - } - Device device = CurrentDevice; - CurrentDevice = null; - return device; - } - - /** - * Constructs a new instance of this class. - *

- * You must dispose the device when it is no longer required. - *

- * - * @see #create - * @see #init - * - * @since 3.1 - */ - public Device() { - this(null); - } - - /** - * Constructs a new instance of this class. - *

- * You must dispose the device when it is no longer required. - *

- * - * @param data - * the DeviceData which describes the receiver - * - * @see #create - * @see #init - * @see DeviceData - */ - public Device(DeviceData data) { - synchronized (Device.class) { - if (data != null) { - debug = data.debug; - tracking = data.tracking; - } - if (tracking) { - errors = new Error[128]; - objects = new Object[128]; - trackingLock = new Object(); - } - create(data); - init(); - } - } - - protected void setPaintDevice(QPaintDeviceInterface paintDevice) { - this.paintDevice = paintDevice; - } - - /** - * Throws an SWTException if the receiver can not be accessed - * by the caller. This may include both checks on the state of the receiver - * and more generally on the entire execution context. This method - * should be called by device implementors to enforce the standard - * SWT invariants. - *

- * Currently, it is an error to invoke any method (other than - * isDisposed() and dispose()) on a device that - * has had its dispose() method called. - *

- *

- * In future releases of SWT, there may be more or fewer error checks and - * exceptions may be thrown for different reasons. - *

- * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - protected void checkDevice() { - if (disposed) { - SWT.error(SWT.ERROR_DEVICE_DISPOSED); - } - } - - /** - * Creates the device in the operating system. If the device does not have a - * handle, this method may do nothing depending on the device. - *

- * This method is called before init. - *

- *

- * Subclasses are supposed to reimplement this method and not call the - * super implementation. - *

- * - * @param data - * the DeviceData which describes the receiver - * - * @see #init - */ - protected void create(DeviceData data) { - } - - /** - * Destroys the device in the operating system and releases the device's - * handle. If the device does not have a handle, this method may do nothing - * depending on the device. - *

- * This method is called after release. - *

- *

- * Subclasses are supposed to reimplement this method and not call the - * super implementation. - *

- * - * @see #dispose - * @see #release - */ - protected void destroy() { - } - - /** - * Disposes of the operating system resources associated with the receiver. - * After this method has been invoked, the receiver will answer - * true when sent the message isDisposed(). - * - * @see #release - * @see #destroy - * @see #checkDevice - */ - public void dispose() { - synchronized (Device.class) { - if (isDisposed()) { - return; - } - checkDevice(); - release(); - destroy(); - disposed = true; - if (tracking) { - synchronized (trackingLock) { - printErrors(); - objects = null; - errors = null; - trackingLock = null; - } - } - } - } - - void dispose_Object(Object object) { - synchronized (trackingLock) { - for (int i = 0; i < objects.length; i++) { - if (objects[i] == object) { - objects[i] = null; - errors[i] = null; - return; - } - } - } - } - - /** - * Returns a rectangle describing the receiver's size and location. - * - * @return the bounding rectangle - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public Rectangle getBounds() { - checkDevice(); - return new Rectangle(0, 0, paintDevice.width(), paintDevice.height()); - } - - /** - * Returns a DeviceData based on the receiver. Modifications - * made to this DeviceData will not affect the receiver. - * - * @return a DeviceData containing the device's data and - * attributes - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- * - * @see DeviceData - */ - public DeviceData getDeviceData() { - checkDevice(); - DeviceData data = new DeviceData(); - data.debug = debug; - data.tracking = tracking; - if (tracking) { - synchronized (trackingLock) { - int count = 0, length = objects.length; - for (int i = 0; i < length; i++) { - if (objects[i] != null) { - count++; - } - } - int index = 0; - data.objects = new Object[count]; - data.errors = new Error[count]; - for (int i = 0; i < length; i++) { - if (objects[i] != null) { - data.objects[index] = objects[i]; - data.errors[index] = errors[i]; - index++; - } - } - } - } else { - data.objects = new Object[0]; - data.errors = new Error[0]; - } - return data; - } - - /** - * Returns a rectangle which describes the area of the receiver which is - * capable of displaying data. - * - * @return the client area - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- * - * @see #getBounds - */ - public Rectangle getClientArea() { - return getBounds(); - } - - /** - * Returns the bit depth of the screen, which is the number of bits it takes - * to represent the number of unique colors that the screen is currently - * capable of displaying. This number will typically be one of 1, 8, 15, 16, - * 24 or 32. - * - * @return the depth of the screen - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public int getDepth() { - checkDevice(); - return paintDevice.depth(); - } - - /** - * Returns a point whose x coordinate is the horizontal dots per inch of the - * display, and whose y coordinate is the vertical dots per inch of the - * display. - * - * @return the horizontal and vertical DPI - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public Point getDPI() { - checkDevice(); - return new Point(paintDevice.physicalDpiX(), paintDevice.physicalDpiY()); - } - - /** - * Returns FontData objects which describe the fonts that match - * the given arguments. If the faceName is null, all fonts will - * be returned. - * - * @param faceName - * the name of the font to look for, or null - * @param scalable - * if true only scalable fonts are returned, otherwise only - * non-scalable fonts are returned. - * @return the matching font data - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public FontData[] getFontList(String faceName, boolean scalable) { - checkDevice(); - QFontDatabase qFontDatabase = null; - qFontDatabase = new QFontDatabase(); - String fontFamilies[] = qFontDatabase.families().toArray(new String[0]); - // for storing FontData arrays - List fontData = new ArrayList(); - - for (int i = 0; i < fontFamilies.length; i++) { - String family = null; - if (faceName == null) { - family = fontFamilies[i]; - } else { - if (faceName.equals(fontFamilies[i])) { - family = fontFamilies[i]; - } else { - continue; - } - } - getFontList(fontData, qFontDatabase, family, scalable); - if (faceName != null) { - break; - } - } - - qFontDatabase.dispose(); //TODO_DISPOSE (called many times) - qFontDatabase = null; - - if (fontData.size() > 0) { - FontData[] result = new FontData[fontData.size()]; - int size = fontData.size(); - for (int i = 0; i < size; ++i) { - result[i] = fontData.get(i); - } - return result; - } else { - return new FontData[0]; - } - } - - private void getFontList(List fontData, QFontDatabase qFontDatabase, String family, boolean onlyScalable) { - String nativeStyles[] = qFontDatabase.styles(family).toArray(new String[0]); - int prevStyle = -1; - int i = 0; - // Go trough each native style of the font family, map them to SWT - // styles - // and create a new FontData for each newly found SWT style of the - // family. - // Still, it may be possible that there are no native styles for a - // family, - // in which case we add a single FontData with default SWT style: - // NORMAL. - // In addition we go trough all heights of non scalable font families, - // creating a new FontData for all heights of all native styles. - do { - String nativeStyle = nativeStyles.length > 0 ? nativeStyles[i] : null; - boolean isScalable = qFontDatabase.isScalable(family, nativeStyle); - int style = SWT.NORMAL; - if (qFontDatabase.bold(family, nativeStyle)) { - style |= SWT.BOLD; - } - if (qFontDatabase.italic(family, nativeStyle)) { - style |= SWT.ITALIC; - } - if (style != prevStyle) { - prevStyle = style; - int[] heights = null; - int j = 0; - if (onlyScalable && isScalable) { - heights = new int[1]; - heights[0] = FontData.FONT_DEF_HEIGHT; - } else if (!onlyScalable && !isScalable) { - List pointSizes = null; - if (nativeStyle == null) { - pointSizes = qFontDatabase.pointSizes(family); - } else { - pointSizes = qFontDatabase.pointSizes(family, nativeStyle); - } - heights = new int[pointSizes.size()]; - for (int x = 0; x < pointSizes.size(); x++) { - heights[x] = pointSizes.get(x); - } - } - if (heights != null) { - do { - FontData fd = new FontData(family, heights[j], style); - fontData.add(fd); - j++; - } while (!onlyScalable && !isScalable && j < heights.length); - } - } - i++; - } while (i < nativeStyles.length); - } - - /** - * Returns the matching standard color for the given constant, which should - * be one of the color constants specified in class SWT. Any - * value other than one of the SWT color constants which is passed in will - * result in the color black. This color should not be freed because it was - * allocated by the system, not the application. - * - * @param id - * the color constant - * @return the matching color - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- * - * @see SWT - */ - public Color getSystemColor(int id) { - checkDevice(); - int pixel = 0x00000000; - switch (id) { - case SWT.COLOR_WHITE: - return Color.qt_new(this, QColor.white); - case SWT.COLOR_BLACK: - return Color.qt_new(this, QColor.black); - case SWT.COLOR_RED: - return Color.qt_new(this, QColor.red); - case SWT.COLOR_DARK_RED: - return Color.qt_new(this, QColor.darkRed); - case SWT.COLOR_GREEN: - return Color.qt_new(this, QColor.green); - case SWT.COLOR_DARK_GREEN: - return Color.qt_new(this, QColor.darkGreen); - case SWT.COLOR_YELLOW: - return Color.qt_new(this, QColor.yellow); - case SWT.COLOR_DARK_YELLOW: - return Color.qt_new(this, QColor.darkYellow); - case SWT.COLOR_BLUE: - return Color.qt_new(this, QColor.blue); - case SWT.COLOR_DARK_BLUE: - return Color.qt_new(this, QColor.darkBlue); - case SWT.COLOR_MAGENTA: - return Color.qt_new(this, QColor.magenta); - case SWT.COLOR_DARK_MAGENTA: - return Color.qt_new(this, QColor.magenta); - case SWT.COLOR_CYAN: - return Color.qt_new(this, QColor.cyan); - case SWT.COLOR_DARK_CYAN: - return Color.qt_new(this, QColor.darkCyan); - case SWT.COLOR_GRAY: - return Color.qt_new(this, QColor.gray); - case SWT.COLOR_DARK_GRAY: - return Color.qt_new(this, QColor.darkGray); - case SWT.COLOR_LIST_BACKGROUND: - return Color.qt_new(this, COLOR_LIST_BACKGROUND); - case SWT.COLOR_LIST_FOREGROUND: - return Color.qt_new(this, COLOR_LIST_FOREGROUND); - case SWT.COLOR_LIST_SELECTION: - return Color.qt_new(this, COLOR_LIST_SELECTION); - case SWT.COLOR_LIST_SELECTION_TEXT: - return Color.qt_new(this, COLOR_LIST_SELECTION_TEXT); - case SWT.COLOR_TITLE_BACKGROUND: - return Color.qt_new(this, COLOR_TITLE_BACKGROUND); - case SWT.COLOR_TITLE_BACKGROUND_GRADIENT: - return Color.qt_new(this, COLOR_TITLE_BACKGROUND_GRADIENT); - case SWT.COLOR_TITLE_FOREGROUND: - return Color.qt_new(this, COLOR_TITLE_FOREGROUND); - case SWT.COLOR_TITLE_INACTIVE_BACKGROUND: - return Color.qt_new(this, COLOR_TITLE_INACTIVE_BACKGROUND); - case SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT: - return Color.qt_new(this, COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT); - case SWT.COLOR_TITLE_INACTIVE_FOREGROUND: - return Color.qt_new(this, COLOR_TITLE_INACTIVE_FOREGROUND); - case SWT.COLOR_WIDGET_BACKGROUND: - return Color.qt_new(this, COLOR_WIDGET_BACKGROUND); - case SWT.COLOR_WIDGET_BORDER: - return Color.qt_new(this, COLOR_WIDGET_BORDER); - case SWT.COLOR_WIDGET_DARK_SHADOW: - return Color.qt_new(this, COLOR_WIDGET_DARK_SHADOW); - case SWT.COLOR_WIDGET_FOREGROUND: - return Color.qt_new(this, COLOR_WIDGET_FOREGROUND); - case SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW: - return Color.qt_new(this, COLOR_WIDGET_HIGHLIGHT_SHADOW); - case SWT.COLOR_WIDGET_LIGHT_SHADOW: - return Color.qt_new(this, COLOR_WIDGET_LIGHT_SHADOW); - case SWT.COLOR_WIDGET_NORMAL_SHADOW: - return Color.qt_new(this, COLOR_WIDGET_NORMAL_SHADOW); - case SWT.COLOR_INFO_FOREGROUND: - return Color.qt_new(this, COLOR_INFO_FOREGROUND); - case SWT.COLOR_INFO_BACKGROUND: - return Color.qt_new(this, COLOR_INFO_BACKGROUND); - } - return Color.qt_new(this, pixel); - } - - /** - * Returns a reasonable font for applications to use. On some platforms, - * this will match the "default font" or "system font" if such can be found. - * This font should not be freed because it was allocated by the system, not - * the application. - *

- * Typically, applications which want the default look should simply not set - * the font on the widgets they create. Widgets are always created with the - * correct default font for the class of user-interface component they - * represent. - *

- * - * @return a font - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public Font getSystemFont() { - checkDevice(); - return Font.qt_new(this, QApplication.font()); - } - - /** - * Returns true if the underlying window system prints out - * warning messages on the console, and setWarnings had - * previously been called with true. - * - * @return trueif warnings are being handled, and - * false otherwise - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public boolean getWarnings() { - checkDevice(); - return false; - } - - /** - * Initializes any internal resources needed by the device. - *

- * This method is called after create. - *

- *

- * If subclasses reimplement this method, they must call the - * super implementation. - *

- * - * @see #create - */ - protected void init() { - /* Initialize the system font slot */ - systemFont = getSystemFont(); - QPalette palette = QApplication.style().standardPalette(); - try { - // Mapping colors from the QPalette to SWT colors. Not all - // colors are 100% right. Use snippet 235 and 235_1 to get - // all colors displayed. - - // Info - COLOR_INFO_FOREGROUND = palette.color(ColorGroup.Active, ColorRole.ToolTipText); - COLOR_INFO_BACKGROUND = palette.color(ColorGroup.Active, ColorRole.ToolTipBase); - - // List - COLOR_LIST_BACKGROUND = palette.color(ColorGroup.Active, ColorRole.Base); - COLOR_LIST_FOREGROUND = palette.color(ColorGroup.Active, ColorRole.Text); - COLOR_LIST_SELECTION = palette.color(ColorGroup.Active, ColorRole.Highlight); - COLOR_LIST_SELECTION_TEXT = palette.color(ColorGroup.Active, ColorRole.HighlightedText); - - // Title - COLOR_TITLE_BACKGROUND = new QColor(0, 84, 227); // palette.color(ColorGroup.Active, ColorRole.Highlight); - // TODO The required blue/grey does not exist in QPalette. Using grey as a substitute. - COLOR_TITLE_BACKGROUND_GRADIENT = new QColor(61, 149, 255);// palette.color(ColorGroup.Active, ColorRole.Light); - COLOR_TITLE_FOREGROUND = palette.color(ColorGroup.Active, ColorRole.HighlightedText); - - // Inactive highlight - COLOR_TITLE_INACTIVE_BACKGROUND = new QColor(122, 150, 223);// palette.color(ColorGroup.Inactive, ColorRole.Dark); - // TODO The required shade of grey does not exist in QPalette. Should be a bit lighter. - COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT = new QColor(157, 185, 235); //palette.color(ColorGroup.Inactive, ColorRole.Light); - // TODO The required shade of grey does not exist in QPalette. Should be a bit lighter. - // Even lighter still than background gradient. It's the same at the moment. - COLOR_TITLE_INACTIVE_FOREGROUND = new QColor(216, 228, 248); //palette.color(ColorGroup.Inactive, ColorRole.BrightText); - - // Window - //QApplication.style(). - COLOR_WIDGET_BACKGROUND = palette.color(ColorGroup.Active, ColorRole.Window);//new QColor(239, 235, 231); - COLOR_WIDGET_DARK_SHADOW = palette.color(ColorGroup.Active, ColorRole.Shadow); - COLOR_WIDGET_FOREGROUND = COLOR_WIDGET_BORDER = palette.color(ColorGroup.Active, ColorRole.WindowText); - COLOR_WIDGET_HIGHLIGHT_SHADOW = palette.color(ColorGroup.Active, ColorRole.Light); - - COLOR_WIDGET_LIGHT_SHADOW = new QColor(236, 233, 216); //palette.color(ColorGroup.Active, ColorRole.Button); - COLOR_WIDGET_NORMAL_SHADOW = new QColor(157, 155, 144); //palette.color(ColorGroup.Active, ColorRole.Mid); - - } finally { - palette.dispose(); - } - } - - /** - * Invokes platform specific functionality to allocate a new GC handle. - *

- * IMPORTANT: This method is not part of the public API for - * Device. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

- * - * @param data - * the platform specific GC data - * @return the platform specific GC handle - */ - public abstract QPaintDeviceInterface internal_new_GC(GCData data); - - /** - * Invokes platform specific functionality to dispose a GC handle. - *

- * IMPORTANT: This method is not part of the public API for - * Device. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

- * - * @param hDC - * the platform specific GC handle - * @param data - * the platform specific GC data - */ - public abstract void internal_dispose_GC(QPaintDeviceInterface paintDevice, GCData data); - - /** - * Returns true if the device has been disposed, and - * false otherwise. - *

- * This method gets the dispose state for the device. When a device has been - * disposed, it is an error to invoke any other method using the device. - * - * @return true when the device is disposed and - * false otherwise - */ - public boolean isDisposed() { - synchronized (Device.class) { - return disposed; - } - } - - /** - * Loads the font specified by a file. The font will be present in the list - * of fonts available to the application. - * - * @param path - * the font file path - * @return whether the font was successfully loaded - * - * @exception SWTException - *

    - *
  • ERROR_NULL_ARGUMENT - if path is null
  • - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- * - * @see Font - * - * @since 3.3 - */ - public boolean loadFont(String path) { - checkDevice(); - if (path == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - int retCode = QFontDatabase.addApplicationFont(path); - return retCode != -1; // -1 == font load failed - } - - void new_Object(Object object) { - synchronized (trackingLock) { - for (int i = 0; i < objects.length; i++) { - if (objects[i] == null) { - objects[i] = object; - errors[i] = new Error(); - return; - } - } - Object[] newObjects = new Object[objects.length + 128]; - System.arraycopy(objects, 0, newObjects, 0, objects.length); - newObjects[objects.length] = object; - objects = newObjects; - Error[] newErrors = new Error[errors.length + 128]; - System.arraycopy(errors, 0, newErrors, 0, errors.length); - newErrors[errors.length] = new Error(); - errors = newErrors; - } - } - - void printErrors() { - if (!DEBUG) { - return; - } - if (tracking) { - synchronized (trackingLock) { - if (objects == null || errors == null) { - return; - } - int objectCount = 0; - int colors = 0, cursors = 0, fonts = 0, gcs = 0, images = 0; - int paths = 0, patterns = 0, regions = 0, textLayouts = 0, transforms = 0; - for (int i = 0; i < objects.length; i++) { - Object object = objects[i]; - if (object != null) { - objectCount++; - if (object instanceof Color) { - colors++; - } - if (object instanceof Cursor) { - cursors++; - } - if (object instanceof Font) { - fonts++; - } - if (object instanceof GC) { - gcs++; - } - if (object instanceof Image) { - images++; - } - if (object instanceof Path) { - paths++; - } - if (object instanceof Pattern) { - patterns++; - } - if (object instanceof Region) { - regions++; - } - if (object instanceof TextLayout) { - textLayouts++; - } - if (object instanceof Transform) { - transforms++; - } - } - } - if (objectCount != 0) { - String string = "Summary: "; //$NON-NLS-1$ - if (colors != 0) { - string += colors + " Color(s), ";//$NON-NLS-1$ - } - if (cursors != 0) { - string += cursors + " Cursor(s), ";//$NON-NLS-1$ - } - if (fonts != 0) { - string += fonts + " Font(s), ";//$NON-NLS-1$ - } - if (gcs != 0) { - string += gcs + " GC(s), ";//$NON-NLS-1$ - } - if (images != 0) { - string += images + " Image(s), ";//$NON-NLS-1$ - } - if (paths != 0) { - string += paths + " Path(s), ";//$NON-NLS-1$ - } - if (patterns != 0) { - string += patterns + " Pattern(s), ";//$NON-NLS-1$ - } - if (regions != 0) { - string += regions + " Region(s), ";//$NON-NLS-1$ - } - if (textLayouts != 0) { - string += textLayouts + " TextLayout(s), ";//$NON-NLS-1$ - } - if (transforms != 0) { - string += transforms + " Transforms(s), ";//$NON-NLS-1$ - } - if (string.length() != 0) { - string = string.substring(0, string.length() - 2); - System.err.println(string); - } - for (int i = 0; i < errors.length; i++) { - if (errors[i] != null) { - errors[i].printStackTrace(System.err); - } - } - } - } - } - } - - /** - * Releases any internal resources back to the operating system and clears - * all fields except the device handle. - *

- * When a device is destroyed, resources that were acquired on behalf of the - * programmer need to be returned to the operating system. For example, if - * the device allocated a font to be used as the system font, this font - * would be freed in release. Also,to assist the garbage - * collector and minimize the amount of memory that is not reclaimed when - * the programmer keeps a reference to a disposed device, all fields except - * the handle are zero'd. The handle is needed by destroy. - *

- * This method is called before destroy.

- *

- * If subclasses reimplement this method, they must call the - * super implementation. - *

- * - * @see #dispose - * @see #destroy - */ - protected void release() { - paintDevice = null; - } - - /** - * If the underlying window system supports printing warning messages to the - * console, setting warnings to false prevents these messages - * from being printed. If the argument is true then message - * printing is not blocked. - * - * @param warnings - * trueif warnings should be printed, and - * false otherwise - * - * @exception SWTException - *
    - *
  • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public void setWarnings(boolean warnings) { - checkDevice(); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/DeviceData.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/DeviceData.java deleted file mode 100644 index 8dd1012d58..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/DeviceData.java +++ /dev/null @@ -1,23 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2005 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.graphics; - -public class DeviceData { - /* - * Debug fields - may not be honoured on some SWT platforms. - */ - public boolean debug; - public boolean tracking; - public Error[] errors; - public Object[] objects; -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Font.java deleted file mode 100644 index 0758f4d05f..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Font.java +++ /dev/null @@ -1,379 +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.graphics; - -import com.trolltech.qt.gui.QFont; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.internal.qt.QtSupplementaryFontData; -import org.eclipse.swt.internal.qt.SWQT; - -/** - * Instances of this class manage operating system resources that define how - * text looks when it is displayed. Fonts may be constructed by providing a - * device and either name, size and style information or a FontData - * object which encapsulates this data. - *

- * Application code must explicitly invoke the Font.dispose() - * method to release the operating system resources managed by each instance - * when those instances are no longer required. - *

- * - * @see FontData - * @see Font snippets - * @see SWT Examples: - * GraphicsExample, PaintExample - * @see Sample code and further - * information - */ - -public final class Font extends Resource { - - /** - * the handle to the OS font resource (Warning: This field is platform - * dependent) - *

- * IMPORTANT: This field is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms and should never be - * accessed from application code. - *

- */ - private QFont font; - - boolean extraFontStyle; - String xlfd; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Font() { - } - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Font(Device device) { - super(device); - } - - /** - * Constructs a new font given a device and font data which describes the - * desired font's appearance. - *

- * You must dispose the font when it is no longer required. - *

- * - * @param device - * the device to create the font on - * @param fd - * the FontData that describes the desired font (must not be - * null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
  • - *
  • ERROR_NULL_ARGUMENT - if the fd argument is null
  • - *
- * @exception SWTError - *
    - *
  • ERROR_NO_HANDLES - if a font could not be created from - * the given font data
  • - *
- */ - public Font(Device device, FontData fd) { - super(device); - init(fd); - init(); - } - - /** - * Constructs a new font given a device and an array of font data which - * describes the desired font's appearance. - *

- * You must dispose the font when it is no longer required. - *

- * - * @param device - * the device to create the font on - * @param fds - * the array of FontData that describes the desired font (must - * not be null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
  • - *
  • ERROR_NULL_ARGUMENT - if the fds argument is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the length of fds is zero
  • - *
  • ERROR_NULL_ARGUMENT - if any fd in the array is null
  • - *
- * @exception SWTError - *
    - *
  • ERROR_NO_HANDLES - if a font could not be created from - * the given font data
  • - *
- * - * @since 2.1 - */ - public Font(Device device, FontData[] fds) { - super(device); - if (fds == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (fds.length == 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - for (int i = 0; i < fds.length; i++) { - if (fds[i] == null) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - init(fds[0]); - init(); - } - - /** - * Constructs a new font given a device, a font name, the height of the - * desired font in points, and a font style. - *

- * You must dispose the font when it is no longer required. - *

- * - * @param device - * the device to create the font on - * @param name - * the name of the font (must not be null) - * @param height - * the font height in points - * @param style - * a bit or combination of NORMAL, BOLD, ITALIC - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
  • - *
  • ERROR_NULL_ARGUMENT - if the name argument is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the height is negative
  • - *
- * @exception SWTError - *
    - *
  • ERROR_NO_HANDLES - if a font could not be created from - * the given arguments
  • - *
- */ - public Font(Device device, String name, int height, int style) { - super(device); - if (name == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - init(new FontData(name, height, style)); - init(); - } - - public QFont getQFont() { - return font; - } - - // /*public*/ Font(Device device, String name, float height, int style) { - // super(device); - // if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); - // init(new FontData (name, height, style)); - // init(); - // } - @Override - void destroy() { - font.dispose(); // TODO_DISPOSE - font = null; - - } - - /** - * Compares the argument to the receiver, and returns true if they represent - * the same object using a class specific comparison. - * - * @param object - * the object to compare with this object - * @return true if the object is the same as this object and - * false otherwise - * - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - if (object == this) { - return true; - } - if (!(object instanceof Font)) { - return false; - } - Font font = (Font) object; - return this.getQFont().equals(font.getQFont()); - } - - /** - * Returns an array of FontDatas representing the receiver. On - * Windows, only one FontData will be returned per font. On X however, a - * Font object may be composed of multiple X fonts. To - * support this case, we return an array of font data objects. - * - * @return an array of font data objects describing the receiver - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public FontData[] getFontData() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - String family = font.family(); - int pointSize = font.pointSize(); - int weight = font.weight(); - boolean italic = font.italic(); - - int style = SWT.NORMAL; - if (weight > SWQT.QT_FONTNORMAL) { - style |= SWT.BOLD; - } - if (italic) { - style |= SWT.ITALIC; - } - FontData data = new FontData(family, pointSize, style); - if (xlfd != null) { - data.xlfd = xlfd; - } else if (extraFontStyle) { - data.extraFontData = new QtSupplementaryFontData(); - QtSupplementaryFontData extraData = data.extraFontData; - extraData.underline = font.underline() ? 1 : 0; - extraData.overline = font.overline() ? 1 : 0; - extraData.strikeOut = font.strikeOut() ? 1 : 0; - extraData.stretch = font.stretch(); - extraData.fixedPitch = font.fixedPitch() ? 1 : 0; - extraData.style = font.style(); - extraData.weight = font.weight(); - extraData.styleStrategy = font.styleStrategy(); - } - return new FontData[] { data }; - } - - /** - * Returns an integer hash code for the receiver. Any two objects that - * return true when passed to equals must return - * the same value for this method. - * - * @return the receiver's hash - * - * @see #equals - */ - @Override - public int hashCode() { - if (font == null) { - return 0; - } - return font.toString().hashCode(); // TODO - } - - void init(FontData fd) { - if (fd == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - int weight = QFont.Weight.Normal.value(); - boolean italic = false; - if (fd.extraFontData != null) { - weight = fd.extraFontData.weight; - italic = fd.extraFontData.style == QFont.Style.StyleItalic; - } - - font = new QFont(fd.name, fd.getHeight(), weight, italic); - // TODO font can be BOLD AND ITALIC - if (fd.style == SWT.BOLD) { - font.setBold(true); - } - if (fd.style == SWT.ITALIC) { - font.setItalic(true); - } - // int lfHeight = fontData.lfHeight; - // fontData.lfHeight = device.computePixels(fd.height); - // handle = OS.CreateFontIndirect(logFont); - // fontData.lfHeight = lfHeight; - // if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES); - } - - /** - * Returns true if the font has been disposed, and - * false otherwise. - *

- * This method gets the dispose state for the font. When a font has been - * disposed, it is an error to invoke any other method using the font. - * - * @return true when the font is disposed and - * false otherwise - */ - @Override - public boolean isDisposed() { - return font == null; - } - - /** - * Returns a string containing a concise, human-readable description of the - * receiver. - * - * @return a string representation of the receiver - */ - @Override - public String toString() { - if (isDisposed()) { - return "Font {*DISPOSED*}"; //$NON-NLS-1$ - } - return "Font {" + font.family() + "}"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - /** - * Invokes platform specific functionality to allocate a new font. - *

- * IMPORTANT: This method is not part of the public API for - * Font. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

- * - * @param device - * the device on which to allocate the color - * @param handle - * the handle for the font - * @return a new font object containing the specified device and handle - */ - public static Font qt_new(Device device, QFont fontParm) { - if (fontParm == null) { - return null; - } - if (device == null) { - device = Device.getDevice(); - } - if (device == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - Font font = new Font(); - font.font = fontParm; - font.device = device; - return font; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontData.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontData.java deleted file mode 100644 index 89db2b04ff..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontData.java +++ /dev/null @@ -1,722 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2007 IBM Corporation and others. - * Portion Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). - * 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 - * Nokia Corporation - Qt implementation - * Compeople AG - QtJambi/Qt based implementation for Windows/Mac OS X/Linux - *******************************************************************************/ -package org.eclipse.swt.graphics; - -import com.trolltech.qt.gui.QFont; -import com.trolltech.qt.gui.QFont.Style; -import com.trolltech.qt.gui.QFont.StyleStrategy; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.internal.qt.QtSupplementaryFontData; -import org.eclipse.swt.internal.qt.SWQT; - -/** - * Instances of this class describe operating system fonts. - *

- * For platform-independent behaviour, use the get and set methods corresponding - * to the following properties: - *

- *
height
- *
the height of the font in points
- *
name
- *
the face name of the font, which may include the foundry
- *
style
- *
A bitwise combination of NORMAL, ITALIC and BOLD
- *
- * If extra, platform-dependent functionality is required: - *
    - *
  • On Windows, the data member of the FontData - * corresponds to a Windows LOGFONT structure whose fields may be - * retrieved and modified.
  • - *
  • On X, the fields of the FontData correspond to the - * entries in the font's XLFD name and may be retrieved and modified. - *
- * Application code does not need to explicitly release the resources - * managed by each instance when those instances are no longer required, and - * thus no dispose() method is provided. - * - * @see Font - */ -public final class FontData { - /** - * the font name - */ - String name; - - /** - * The height of the font data in points - */ - int height; - - /** - * the font style - */ - int style; - - /** - * The locales of the font - */ - String lang, country, variant; - - QtSupplementaryFontData extraFontData; - String xlfd; - - public static final int FONT_DEF_HEIGHT = 12; - - /** - * Constructs a new uninitialized font data. - */ - public FontData() { - this("", FONT_DEF_HEIGHT, SWT.NORMAL); //$NON-NLS-1$ - } - - // The characters in the string must all be decimal digits - // the value must be given with radix 10 - - /** - * Constructs a new FontData given a string representation in the form - * generated by the FontData.toString method. - *

- * Note that the representation varies between platforms, and a FontData can - * only be created from a string that was generated on the same platform. - *

- * - * @param string - * the string representation of a FontData (must not - * be null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the argument is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the argument does not - * represent a valid description
  • - *
- * - * @see #toString - */ - public FontData(String string) { - if (string == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - parseFontDescriptor(string); - updateFontData(); - - } - - /** - * Constructs a new font data given a font name, the height of the desired - * font in points, and a font style. - * - * @param name - * the name of the font (must not be null) - * @param height - * the font height in points - * @param style - * a bit or combination of NORMAL, BOLD, ITALIC - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - when the font name is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the height is negative
  • - *
- */ - public FontData(String name, int height, int style) { - if (name == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (height < 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - setName(name); - setHeight(height); - setStyle(style); - } - - /** - * Compares the argument to the receiver, and returns true if they represent - * the same object using a class specific comparison. - * - * @param object - * the object to compare with this object - * @return true if the object is the same as this object and - * false otherwise - * - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - if (object == this) { - return true; - } - if (!(object instanceof FontData)) { - return false; - } - - FontData data = (FontData) object; - - if (!(xlfd == null && data.xlfd == null || xlfd != null && data.xlfd != null)) { - return false; - } - - if (!(extraFontData == null && data.extraFontData == null || extraFontData != null - && data.extraFontData != null)) { - return false; - } - - if (xlfd != null) { - return xlfd.trim().equals(data.xlfd.trim()); - } - - boolean mainFontStyleEqual = name.equals(data.name) && height == data.height && style == data.style; - if (mainFontStyleEqual && extraFontData != null) { - return mainFontStyleEqual && extraFontData.underline == data.extraFontData.underline - && extraFontData.underline == data.extraFontData.underline - && extraFontData.overline == data.extraFontData.overline - && extraFontData.strikeOut == data.extraFontData.strikeOut - && extraFontData.stretch == data.extraFontData.stretch - && extraFontData.fixedPitch == data.extraFontData.fixedPitch - && extraFontData.style == data.extraFontData.style - && extraFontData.weight == data.extraFontData.weight - && extraFontData.styleStrategy == data.extraFontData.styleStrategy; - } else { - return mainFontStyleEqual; - } - } - - /** - * Returns the height of the receiver in points. - * - * @return the height of this FontData - * - * @see #setHeight(int) - */ - public int getHeight() { - return height; - } - - /** - * Returns the locale of the receiver. - *

- * The locale determines which platform character set this font is going to - * use. Widgets and graphics operations that use this font will convert - * UNICODE strings to the platform character set of the specified locale. - *

- *

- * On platforms where there are multiple character sets for a given - * language/country locale, the variant portion of the locale will determine - * the character set. - *

- * - * @return the String representing a Locale object - * @since 3.0 - */ - public String getLocale() { - StringBuffer buffer = new StringBuffer(); - char sep = '_'; - if (lang != null) { - buffer.append(lang); - buffer.append(sep); - } - if (country != null) { - buffer.append(country); - buffer.append(sep); - } - if (variant != null) { - buffer.append(variant); - } - - String result = buffer.toString(); - int length = result.length(); - if (length > 0) { - if (result.charAt(length - 1) == sep) { - result = result.substring(0, length - 1); - } - } - return result; - } - - /** - * Returns the name of the receiver. On platforms that support font - * foundries, the return value will be the foundry followed by a dash ("-") - * followed by the face name. - * - * @return the name of this FontData - * - * @see #setName - */ - public String getName() { - return name; - } - - /** - * Returns the style of the receiver which is a bitwise OR of one or more of - * the SWT constants NORMAL, BOLD and ITALIC. - * - * @return the style of this FontData - * - * @see #setStyle - */ - public int getStyle() { - return style; - } - - /** - * Returns an integer hash code for the receiver. Any two objects that - * return true when passed to equals must return - * the same value for this method. - * - * @return the receiver's hash - * - * @see #equals - */ - @Override - public int hashCode() { - return name.hashCode() ^ height ^ style; - } - - void parseFontDescriptor(String string) { - int start = 0; - int end = string.indexOf('|'); - if (end == -1) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - String version1 = string.substring(start, end); - try { - if (Integer.parseInt(version1) != 1) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } catch (NumberFormatException e) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - String name = string.substring(start, end); - - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - int height = 0; - try { - height = Integer.parseInt(string.substring(start, end)); - } catch (NumberFormatException e) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - int style = 0; - try { - style = Integer.parseInt(string.substring(start, end)); - } catch (NumberFormatException e) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - - start = end + 1; - end = string.indexOf('|', start); - setName(name); - setHeight(height); - setStyle(style); - if (end == -1) { - return; - } - String platform = string.substring(start, end); - - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - return; - } - String version2 = string.substring(start, end); - - if (platform.trim().toUpperCase().equals("QT") && version2.equals("1")) { //$NON-NLS-1$ //$NON-NLS-2$ - try { - extraFontData = new QtSupplementaryFontData(); - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - return; - } - extraFontData.underline = Integer.parseInt(string.substring(start, end)); - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - return; - } - extraFontData.overline = Integer.parseInt(string.substring(start, end)); - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - return; - } - extraFontData.strikeOut = Integer.parseInt(string.substring(start, end)); - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - return; - } - int stretch = Integer.parseInt(string.substring(start, end)); - if (stretch > 0) { - if (stretch > 4000) { - stretch = 4000; - } - extraFontData.stretch = stretch; - } - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - extraFontData = null; - return; - } - extraFontData.fixedPitch = Integer.parseInt(string.substring(start, end)); - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - return; - } - int fontStyle = Integer.parseInt(string.substring(start, end)); - if (fontStyle == SWQT.QFONT_STYLE_NORMAL) { - extraFontData.style = Style.StyleNormal; - } - if (fontStyle == SWQT.QFONT_STYLE_ITALIC) { - extraFontData.style = Style.StyleItalic; - } - if (fontStyle == SWQT.QFONT_STYLE_OBLIQUE) { - extraFontData.style = Style.StyleOblique; - } - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - return; - } - int weight = Integer.parseInt(string.substring(start, end)); - if (weight > -1) { - if (weight > 99) { - weight = 99; - } - extraFontData.weight = weight; - } - start = end + 1; - end = string.indexOf('|', start); - if (end == -1) { - return; - } - int styleStrategy = Integer.parseInt(string.substring(start, end)); - int[] strategies = new int[] { SWQT.QFONT_STYLESTRATEGY_PREFERDEFALUT, - SWQT.QFONT_STYLESTRATEGY_PREFERBITMAP, SWQT.QFONT_STYLESTRATEGY_PREFERDEVICE, - SWQT.QFONT_STYLESTRATEGY_PREFEROUTLINE, SWQT.QFONT_STYLESTRATEGY_FORCEOUTLINE, - SWQT.QFONT_STYLESTRATEGY_NOANTIALIAS, SWQT.QFONT_STYLESTRATEGY_PREFERANTIALIAS, - SWQT.QFONT_STYLESTRATEGY_OPENGLCOMPATIABLE, SWQT.QFONT_STYLESTRATEGY_NOFONTMERGING }; - boolean isValidStrategy = styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERQUALITY - || styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERMATCH ? true : false; - for (int i = 0; i < strategies.length; i++) { - if ((styleStrategy & strategies[i]) == 0) { - continue; - } else { - if (styleStrategy == strategies[i] - || styleStrategy == (strategies[i] | SWQT.QFONT_STYLESTRATEGY_PREFERQUALITY) - || styleStrategy == (strategies[i] | SWQT.QFONT_STYLESTRATEGY_PREFERMATCH)) { - isValidStrategy = true; - } - break; - } - } - if (isValidStrategy) { - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_FORCEOUTLINE) { - extraFontData.styleStrategy = StyleStrategy.ForceOutline; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_NOANTIALIAS) { - extraFontData.styleStrategy = StyleStrategy.NoAntialias; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_NOFONTMERGING) { - extraFontData.styleStrategy = StyleStrategy.NoFontMerging; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_OPENGLCOMPATIABLE) { - extraFontData.styleStrategy = StyleStrategy.OpenGLCompatible; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERANTIALIAS) { - extraFontData.styleStrategy = StyleStrategy.PreferAntialias; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERBITMAP) { - extraFontData.styleStrategy = StyleStrategy.PreferBitmap; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERDEFALUT) { - extraFontData.styleStrategy = StyleStrategy.PreferDefault; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERDEVICE) { - extraFontData.styleStrategy = StyleStrategy.PreferDevice; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERMATCH) { - extraFontData.styleStrategy = StyleStrategy.PreferMatch; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFEROUTLINE) { - extraFontData.styleStrategy = StyleStrategy.PreferOutline; - } - if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERQUALITY) { - extraFontData.styleStrategy = StyleStrategy.PreferQuality; - } - } - } catch (NumberFormatException e) { - extraFontData = null; - } - } - // else if (platform.trim().toUpperCase().equals("X11") - // && OS.windowServer == OS.WS_X11) { - // start = end + 1; - // end = string.indexOf('|', start); - // if (end == -1) - // return; - // xlfd = string.substring(start, end); - // if (xlfd.length() < 1) { - // xlfd = null; - // } - // } - - } - - /** - * Sets the height of the receiver. The parameter is specified in terms of - * points, where a point is one seventy-second of an inch. - * - * @param height - * the height of the FontData - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the height is negative
  • - *
- * - * @see #getHeight - */ - public void setHeight(int height) { - if (height < 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - this.height = height; - } - - /** - * Sets the locale of the receiver. - *

- * The locale determines which platform character set this font is going to - * use. Widgets and graphics operations that use this font will convert - * UNICODE strings to the platform character set of the specified locale. - *

- *

- * On platforms where there are multiple character sets for a given - * language/country locale, the variant portion of the locale will determine - * the character set. - *

- * - * @param locale - * the String representing a Locale object - * @see java.util.Locale#toString - */ - public void setLocale(String locale) { - lang = country = variant = null; - if (locale != null) { - char sep = '_'; - int length = locale.length(); - int firstSep, secondSep; - - firstSep = locale.indexOf(sep); - if (firstSep == -1) { - firstSep = secondSep = length; - } else { - secondSep = locale.indexOf(sep, firstSep + 1); - if (secondSep == -1) { - secondSep = length; - } - } - if (firstSep > 0) { - lang = locale.substring(0, firstSep); - } - if (secondSep > firstSep + 1) { - country = locale.substring(firstSep + 1, secondSep); - } - if (length > secondSep + 1) { - variant = locale.substring(secondSep + 1); - } - } - } - - /** - * Sets the name of the receiver. - *

- * Some platforms support font foundries. On these platforms, the name of - * the font specified in setName() may have one of the following forms: - *

    - *
  1. a face name (for example, "courier")
  2. - *
  3. a foundry followed by a dash ("-") followed by a face name (for - * example, "adobe-courier")
  4. - *
- * In either case, the name returned from getName() will include the - * foundry. - *

- *

- * On platforms that do not support font foundries, only the face name (for - * example, "courier") is used in setName() and - * getName(). - *

- * - * @param name - * the name of the font data (must not be null) - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - when the font name is null
  • - *
- * - * @see #getName - */ - public void setName(String name) { - if (name == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - this.name = name; - } - - /** - * Sets the style of the receiver to the argument which must be a bitwise OR - * of one or more of the SWT constants NORMAL, BOLD and ITALIC. - * All other style bits are ignored. - * - * @param style - * the new style for this FontData - * - * @see #getStyle - */ - public void setStyle(int style) { - this.style = style; - } - - /** - * Returns a string representation of the receiver which is suitable for - * constructing an equivalent instance using the - * FontData(String) constructor. - * - * @return a string representation of the FontData - * - * @see FontData - */ - @Override - public String toString() { - StringBuffer buffer = new StringBuffer(); - buffer.append("1|"); //$NON-NLS-1$ - buffer.append(getName()); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(getHeight()); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(getStyle()); - buffer.append("|"); //$NON-NLS-1$ - if (xlfd != null) { - buffer.append("X11|1|"); //$NON-NLS-1$ - buffer.append(xlfd); - buffer.append("|"); //$NON-NLS-1$ - } else if (extraFontData != null) { - buffer.append("QT|1|"); //$NON-NLS-1$ - buffer.append(extraFontData.overline); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(extraFontData.underline); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(extraFontData.strikeOut); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(extraFontData.stretch); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(extraFontData.fixedPitch); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(extraFontData.style); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(extraFontData.weight); - buffer.append("|"); //$NON-NLS-1$ - buffer.append(extraFontData.styleStrategy); - buffer.append("|"); //$NON-NLS-1$ - } - return buffer.toString(); - } - - void updateFontData() { - if (extraFontData == null && xlfd == null) { - return; - } - - boolean italic = (style & SWT.ITALIC) != 0; - int weight = SWQT.QT_FONTNORMAL; - if ((style & SWT.BOLD) != 0) { - weight = SWQT.QT_FONTBOLD; - } - QFont font = new QFont(name, height, weight, italic); - - if (xlfd != null) { - font.setRawName(xlfd); - - } else { - if (extraFontData.underline > -1) { - font.setUnderline(extraFontData.underline > 0 ? true : false); - } - if (extraFontData.overline > -1) { - font.setOverline(extraFontData.overline > 0 ? true : false); - } - if (extraFontData.strikeOut > -1) { - font.setStrikeOut(extraFontData.strikeOut > 0 ? true : false); - } - if (extraFontData.stretch > -1) { - font.setStretch(extraFontData.stretch); - } - if (extraFontData.fixedPitch > -1) { - font.setFixedPitch(extraFontData.fixedPitch > 0 ? true : false); - } - if (extraFontData.style != null) { - font.setStyle(extraFontData.style); - } - if (extraFontData.weight > -1) { - font.setWeight(extraFontData.weight); - } - if (extraFontData.styleStrategy != null) { - font.setStyleStrategy(extraFontData.styleStrategy); - } - } - - name = font.family(); - height = font.pointSize(); - weight = font.weight(); - italic = font.italic(); - style = SWT.NORMAL; - if (weight > SWQT.QT_FONTNORMAL) { - style |= SWT.BOLD; - } - if (italic == true) { - style |= SWT.ITALIC; - } - if (extraFontData != null) { - extraFontData.underline = font.underline() == true ? 1 : 0; - extraFontData.overline = font.overline() == true ? 1 : 0; - extraFontData.strikeOut = font.strikeOut() == true ? 1 : 0; - extraFontData.stretch = font.stretch(); - extraFontData.fixedPitch = font.fixedPitch() == true ? 1 : 0; - extraFontData.style = font.style(); - extraFontData.weight = font.weight(); - extraFontData.styleStrategy = font.styleStrategy(); - font.dispose(); - } - } -} \ No newline at end of file diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontMetrics.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontMetrics.java deleted file mode 100644 index 2be6f6e78e..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontMetrics.java +++ /dev/null @@ -1,165 +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.graphics; - -import com.trolltech.qt.gui.QFontMetrics; - -/** - * Instances of this class provide measurement information about fonts including - * ascent, descent, height, leading space between rows, and average character - * width. FontMetrics are obtained from GCs using the - * getFontMetrics() method. - * - * @see GC#getFontMetrics - * @see Sample code and further - * information - */ -public final class FontMetrics { - private final int ascent; - private final int descent; - private final int aveCharWidth; - private final int leading; - private final int height; - - private FontMetrics(int ascent, int descent, int aveCharWidth, int leading, int height) { - this.ascent = ascent; - this.descent = descent; - this.aveCharWidth = aveCharWidth; - this.leading = leading; - this.height = height; - } - - /** - * Compares the argument to the receiver, and returns true if they represent - * the same object using a class specific comparison. - * - * @param object - * the object to compare with this object - * @return true if the object is the same as this object and - * false otherwise - * - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - if (object == this) { - return true; - } - if (!(object instanceof FontMetrics)) { - return false; - } - FontMetrics other = (FontMetrics) object; - return ascent == other.ascent && descent == other.descent && aveCharWidth == other.aveCharWidth - && leading == other.leading && height == other.height; - } - - /** - * Returns the ascent of the font described by the receiver. A font's - * ascent is the distance from the baseline to the top of actual - * characters, not including any of the leading area, measured in pixels. - * - * @return the ascent of the font - */ - public int getAscent() { - return ascent; - } - - /** - * Returns the average character width, measured in pixels, of the font - * described by the receiver. - * - * @return the average character width of the font - */ - public int getAverageCharWidth() { - return aveCharWidth; - } - - /** - * Returns the descent of the font described by the receiver. A font's - * descent is the distance from the baseline to the bottom of - * actual characters, not including any of the leading area, measured in - * pixels. - * - * @return the descent of the font - */ - public int getDescent() { - return descent; - } - - /** - * Returns the height of the font described by the receiver, measured in - * pixels. A font's height is the sum of its ascent, descent and - * leading area. - * - * @return the height of the font - * - * @see #getAscent - * @see #getDescent - * @see #getLeading - */ - public int getHeight() { - return height; - } - - /** - * Returns the leading area of the font described by the receiver. A font's - * leading area is the space above its ascent which may include - * accents or other marks. - * - * @return the leading space of the font - */ - public int getLeading() { - return leading; - } - - /** - * Returns an integer hash code for the receiver. Any two objects that - * return true when passed to equals must return - * the same value for this method. - * - * @return the receiver's hash - * - * @see #equals - */ - @Override - public int hashCode() { - return ascent ^ descent ^ aveCharWidth ^ leading ^ height; - } - - /** - * Invokes platform specific functionality to allocate a new font metrics. - *

- * IMPORTANT: This method is not part of the public API for - * FontMetrics. It is marked public only so that it can be - * shared within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

- * - * @param metrics - * the QFontMetrics containing information about a - * font - * @return a new font metrics object containing the specified - * TEXTMETRIC - */ - public static FontMetrics internal_new(QFontMetrics qfm) { - return new FontMetrics(qfm.ascent(), qfm.descent(), qfm.averageCharWidth(), 0, qfm.height()); - } - - public static FontMetrics internal_new(Font font) { - return internal_new(new QFontMetrics(font.getQFont())); - } - - public static FontMetrics internal_new(int ascent, int descent, int aveCharWidth, int leading, int height) { - return new FontMetrics(ascent, descent, aveCharWidth, leading, height); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java deleted file mode 100644 index 026041b62b..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java +++ /dev/null @@ -1,3555 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.graphics; - -import com.trolltech.qt.core.QPointF; -import com.trolltech.qt.core.QRect; -import com.trolltech.qt.core.Qt.AlignmentFlag; -import com.trolltech.qt.core.Qt.BGMode; -import com.trolltech.qt.core.Qt.FillRule; -import com.trolltech.qt.core.Qt.PenStyle; -import com.trolltech.qt.core.Qt.SizeMode; -import com.trolltech.qt.core.Qt.TextFlag; -import com.trolltech.qt.gui.QApplication; -import com.trolltech.qt.gui.QBrush; -import com.trolltech.qt.gui.QColor; -import com.trolltech.qt.gui.QFontMetrics; -import com.trolltech.qt.gui.QLinearGradient; -import com.trolltech.qt.gui.QPaintDeviceInterface; -import com.trolltech.qt.gui.QPainter; -import com.trolltech.qt.gui.QPixmap; -import com.trolltech.qt.gui.QPolygon; -import com.trolltech.qt.gui.QRegion; -import com.trolltech.qt.gui.QStyleOptionFocusRect; -import com.trolltech.qt.gui.QStyle.PrimitiveElement; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Class GC is where all of the drawing capabilities that are - * supported by SWT are located. Instances are used to draw on either an - * Image, a Control, or directly on a - * Display. - *
- *
Styles:
- *
LEFT_TO_RIGHT, RIGHT_TO_LEFT
- *
- * - *

- * The SWT drawing coordinate system is the two-dimensional space with the - * origin (0,0) at the top left corner of the drawing area and with (x,y) values - * increasing to the right and downward respectively. - *

- * - *

- * The result of drawing on an image that was created with an indexed palette - * using a color that is not in the palette is platform specific. Some platforms - * will match to the nearest color while other will draw the color itself. This - * happens because the allocated image might use a direct palette on platforms - * that do not support indexed palette. - *

- * - *

- * Application code must explicitly invoke the GC.dispose() method - * to release the operating system resources managed by each instance when those - * instances are no longer required. This is particularly important on - * Windows95 and Windows98 where the operating system has a limited number of - * device contexts available. - *

- * - *

- * Note: Only one of LEFT_TO_RIGHT and RIGHT_TO_LEFT may be specified. - *

- * - * @see org.eclipse.swt.events.PaintEvent - * @see GC snippets - * @see SWT Examples: - * GraphicsExample, PaintExample - * @see Sample code and further - * information - */ -public final class GC extends Resource { - - /** - * the handle to the OS device context (Warning: This field is platform - * dependent) - *

- * IMPORTANT: This field is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms and should never be - * accessed from application code. - *

- */ - private QPaintDeviceInterface paintDevice; - private QPainter activePainter; - private QRegion activeClipping; - - public int handle; - - private Drawable drawable; - private GCData data; - private FillRule fillRule; - - private int antialias = SWT.OFF; // TODO make sure this flag does not get lost, currently not interpreted - - private static final int FOREGROUND = 1 << 0; - private static final int BACKGROUND = 1 << 1; - private static final int FONT = 1 << 2; - private static final int LINE_STYLE = 1 << 3; - private static final int LINE_WIDTH = 1 << 4; - private static final int LINE_CAP = 1 << 5; - private static final int LINE_JOIN = 1 << 6; - private static final int LINE_MITERLIMIT = 1 << 7; - private static final int FOREGROUND_TEXT = 1 << 8; - private static final int BACKGROUND_TEXT = 1 << 9; - private static final int BRUSH = 1 << 10; - private static final int PEN = 1 << 11; - private static final int NULL_BRUSH = 1 << 12; - private static final int NULL_PEN = 1 << 13; - private static final int DRAW_OFFSET = 1 << 14; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - GC() { - } - - /** - * Constructs a new instance of this class which has been configured to draw - * on the specified drawable. Sets the foreground color, background color - * and font in the GC to match those in the drawable. - *

- * You must dispose the graphics context when it is no longer required. - *

- * - * @param drawable - * the drawable to draw on - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the drawable is null
  • - *
  • ERROR_NULL_ARGUMENT - if there is no current device
  • - *
  • ERROR_INVALID_ARGUMENT - if the drawable is an image - * that is not a bitmap or an icon - if the drawable is an - * image or printer that is already selected into another - * graphics context
  • - *
- * @exception SWTError - *
    - *
  • ERROR_NO_HANDLES if a handle could not be obtained for - * GC creation
  • - *
  • ERROR_THREAD_INVALID_ACCESS if not called from the - * thread that created the drawable
  • - *
- */ - public GC(Drawable drawable) { - this(drawable, SWT.NONE); - } - - /** - * Constructs a new instance of this class which has been configured to draw - * on the specified drawable. Sets the foreground color, background color - * and font in the GC to match those in the drawable. - *

- * You must dispose the graphics context when it is no longer required. - *

- * - * @param drawable - * the drawable to draw on - * @param style - * the style of GC to construct - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the drawable is null
  • - *
  • ERROR_NULL_ARGUMENT - if there is no current device
  • - *
  • ERROR_INVALID_ARGUMENT - if the drawable is an image - * that is not a bitmap or an icon - if the drawable is an - * image or printer that is already selected into another - * graphics context
  • - *
- * @exception SWTError - *
    - *
  • ERROR_NO_HANDLES if a handle could not be obtained for - * GC creation
  • - *
  • ERROR_THREAD_INVALID_ACCESS if not called from the - * thread that created the drawable
  • - *
- * - * @since 2.1.2 - */ - public GC(Drawable drawable, int style) { - if (drawable == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - - GCData data = new GCData(); - data.style = checkStyle(style); - QPaintDeviceInterface paintDevice = drawable.internal_new_GC(data); - Device device = data.device; - if (device == null) { - device = Device.getDevice(); - } - if (device == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - this.device = data.device = device; - init(drawable, data, paintDevice); - init(); - } - - private QPainter getActivePainter() { - if (activePainter == null) { - activePainter = new QPainter(); - // if (paintDevice.paintingActive()) { - //System.out.println("new painter for " + paintDevice + "active: " + paintDevice.paintingActive()); - // //paintDevice.paintEngine().end(); - // } - } - - if (!activePainter.isActive()) { - activePainter.begin(paintDevice); - } - - if (!activePainter.isActive()) { - System.out.println("inactive painter for: " + paintDevice + " painter: " //$NON-NLS-1$ //$NON-NLS-2$ - + paintDevice.paintEngine().painter()); - // RuntimeException re = new RuntimeException(); - // re.printStackTrace(); - } - - if (activeClipping != null) { - activePainter.setClipRegion(activeClipping); - } - return activePainter; - } - - static int checkStyle(int style) { - if ((style & SWT.LEFT_TO_RIGHT) != 0) { - style &= ~SWT.RIGHT_TO_LEFT; - } - return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT); - } - - void init(Drawable drawable, GCData data, QPaintDeviceInterface paintDevice) { - this.paintDevice = paintDevice; - - Color foreground = data.foregroundColor; - if (foreground != null) { - data.state &= ~(FOREGROUND | FOREGROUND_TEXT | PEN); - } else { - data.foregroundColor = data.device.getSystemColor(SWT.COLOR_BLACK); - } - Color background = data.backgroundColor; - if (background != null) { - data.state &= ~(BACKGROUND | BACKGROUND_TEXT | BRUSH); - } else { - data.backgroundColor = data.device.getSystemColor(SWT.COLOR_WHITE); - } - data.state &= ~(NULL_BRUSH | NULL_PEN); - Font font = data.font; - if (font != null) { - data.state &= ~FONT; - } else { - data.font = device.getSystemFont(); - } - Image image = data.image; - if (image != null) { - image.setMemGC(this); - } - if ((data.style & SWT.RIGHT_TO_LEFT) != 0) { - data.style |= SWT.MIRRORED; - } - this.drawable = drawable; - this.data = data; - } - - /** - * Copies a rectangular area of the receiver at the specified position into - * the image, which must be of type SWT.BITMAP. - * - * @param image - * the image to copy into - * @param x - * the x coordinate in the receiver of the area to be copied - * @param y - * the y coordinate in the receiver of the area to be copied - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the image is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the image is not a bitmap - * or has been disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public void copyArea(Image image, int x, int y) { - // TODO - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - if (image == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (!image.isBitmap() || image.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - - /** - * Copies a rectangular area of the receiver at the source position onto the - * receiver at the destination position. - * - * @param srcX - * the x coordinate in the receiver of the area to be copied - * @param srcY - * the y coordinate in the receiver of the area to be copied - * @param width - * the width of the area to copy - * @param height - * the height of the area to copy - * @param destX - * the x coordinate in the receiver of the area to copy to - * @param destY - * the y coordinate in the receiver of the area to copy to - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY) { - copyArea(srcX, srcY, width, height, destX, destY, true); - } - - /** - * Copies a rectangular area of the receiver at the source position onto the - * receiver at the destination position. - * - * @param srcX - * the x coordinate in the receiver of the area to be copied - * @param srcY - * the y coordinate in the receiver of the area to be copied - * @param width - * the width of the area to copy - * @param height - * the height of the area to copy - * @param destX - * the x coordinate in the receiver of the area to copy to - * @param destY - * the y coordinate in the receiver of the area to copy to - * @param paint - * if true paint events will be generated for old - * and obscured areas - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- * - * @since 3.1 - */ - public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - //TODO - /* - * Feature in WinCE. The function WindowFromDC is not part of the WinCE - * SDK. The fix is to remember the HWND. - */ - // int /* long */hwnd = data.hwnd; - // if (hwnd == 0) { - // OS.BitBlt(handle, destX, destY, width, height, handle, srcX, srcY, OS.SRCCOPY); - // } else { - // RECT lprcClip = null; - // int /* long */hrgn = OS.CreateRectRgn(0, 0, 0, 0); - // if (OS.GetClipRgn(handle, hrgn) == 1) { - // lprcClip = new RECT(); - // OS.GetRgnBox(hrgn, lprcClip); - // } - // OS.DeleteObject(hrgn); - // RECT lprcScroll = new RECT(); - // OS.SetRect(lprcScroll, srcX, srcY, srcX + width, srcY + height); - // int flags = paint ? OS.SW_INVALIDATE | OS.SW_ERASE : 0; - // int res = OS.ScrollWindowEx(hwnd, destX - srcX, destY - srcY, lprcScroll, lprcClip, 0, null, flags); - // - // /* - // * Feature in WinCE. ScrollWindowEx does not accept combined - // * vertical and horizontal scrolling. The fix is to do a BitBlt and - // * invalidate the appropriate source area. - // */ - // } - } - - /** - * Disposes of the operating system resources associated with the graphics - * context. Applications must dispose of all GCs which they allocate. - * - * @exception SWTError - *
    - *
  • ERROR_THREAD_INVALID_ACCESS if not called from the - * thread that created the drawable
  • - *
- */ - @Override - void destroy() { - if (activePainter != null) { - activePainter.end(); - //System.out.println("end painter for " + paintDevice); - activePainter = null; - } - - Image image = data.image; - if (image != null) { - image.setMemGC(null); - } - - if (drawable != null) { - drawable.internal_dispose_GC(paintDevice, data); - } - drawable = null; - data.image = null; - data = null; - paintDevice = null; - } - - /** - * Draws the outline of a circular or elliptical arc within the specified - * rectangular area. - *

- * The resulting arc begins at startAngle and extends for - * arcAngle degrees, using the current color. Angles are - * interpreted such that 0 degrees is at the 3 o'clock position. A positive - * value indicates a counter-clockwise rotation while a negative value - * indicates a clockwise rotation. - *

- *

- * The center of the arc is the center of the rectangle whose origin is ( - * x, y) and whose size is specified by the - * width and height arguments. - *

- *

- * The resulting arc covers an area width + 1 pixels wide by - * height + 1 pixels tall. - *

- * - * @param x - * the x coordinate of the upper-left corner of the arc to be - * drawn - * @param y - * the y coordinate of the upper-left corner of the arc to be - * drawn - * @param width - * the width of the arc to be drawn - * @param height - * the height of the arc to be drawn - * @param startAngle - * the beginning angle - * @param arcAngle - * the angular extent of the arc, relative to the start angle - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - painter.drawArc(x, y, width, height, startAngle, arcAngle); - } - - /** - * Draws a rectangle, based on the specified arguments, which has the - * appearance of the platform's focus rectangle if the platform - * supports such a notion, and otherwise draws a simple rectangle in the - * receiver's foreground color. - * - * @param x - * the x coordinate of the rectangle - * @param y - * the y coordinate of the rectangle - * @param width - * the width of the rectangle - * @param height - * the height of the rectangle - * - * @exception SWTException - *
    - *
  • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
  • - *
- * - * @see #drawRectangle(int, int, int, int) - */ - public void drawFocus(int x, int y, int width, int height) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - QStyleOptionFocusRect option = new QStyleOptionFocusRect(); - option.rect().setRect(x, y, width, height); - QApplication.style().drawPrimitive(PrimitiveElement.PE_FrameFocusRect, option, painter); - } - - /** - * Draws the given image in the receiver at the specified coordinates. - * - * @param image - * the image to draw - * @param x - * the x coordinate of where to draw - * @param y - * the y coordinate of where to draw - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the image is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
  • - *
  • ERROR_INVALID_ARGUMENT - if the given coordinates are - * outside the bounds of the image
  • - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES - if no handles are available to - * perform the operation
    • - *
    - */ - public void drawImage(Image image, int x, int y) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (image == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (image.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - - QPainter painter = getActivePainter(); - QPixmap pic = image.getQPixmap(); - painter.drawPixmap(x, y, pic); - } - - /** - * Copies a rectangular area from the source image into a (potentially - * different sized) rectangular area in the receiver. If the source and - * destination areas are of differing sizes, then the source area will be - * stretched or shrunk to fit the destination area as it is copied. The copy - * fails if any part of the source rectangle lies outside the bounds of the - * source image, or if any of the width or height arguments are negative. - * - * @param image - * the source image - * @param srcX - * the x coordinate in the source image to copy from - * @param srcY - * the y coordinate in the source image to copy from - * @param srcWidth - * the width in pixels to copy from the source - * @param srcHeight - * the height in pixels to copy from the source - * @param destX - * the x coordinate in the destination to copy to - * @param destY - * the y coordinate in the destination to copy to - * @param destWidth - * the width in pixels of the destination rectangle - * @param destHeight - * the height in pixels of the destination rectangle - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the image is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
    • - *
    • ERROR_INVALID_ARGUMENT - if any of the width or height - * arguments are negative. - *
    • ERROR_INVALID_ARGUMENT - if the source rectangle is - * not contained within the bounds of the source image
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES - if no handles are available to - * perform the operation
    • - *
    - */ - public void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, - int destWidth, int destHeight) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (srcWidth == 0 || srcHeight == 0 || destWidth == 0 || destHeight == 0) { - return; - } - if (srcX < 0 || srcY < 0 || srcWidth < 0 || srcHeight < 0 || destWidth < 0 || destHeight < 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (image == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (image.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - - QPainter painter = getActivePainter(); - painter.drawPixmap(new QRect(destX, destY, destWidth, destHeight), image.getQPixmap(), new QRect(srcX, srcY, - srcWidth, srcHeight)); - } - - /** - * Draws a line, using the foreground color, between the points ( - * x1, y1) and (x2, y2). - * - * @param x1 - * the first point's x coordinate - * @param y1 - * the first point's y coordinate - * @param x2 - * the second point's x coordinate - * @param y2 - * the second point's y coordinate - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawLine(int x1, int y1, int x2, int y2) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - painter.drawLine(x1, y1, x2, y2); - } - - /** - * Draws the outline of an oval, using the foreground color, within the - * specified rectangular area. - *

    - * The result is a circle or ellipse that fits within the rectangle - * specified by the x, y, width, and - * height arguments. - *

    - *

    - * The oval covers an area that is width + 1 pixels wide and - * height + 1 pixels tall. - *

    - * - * @param x - * the x coordinate of the upper left corner of the oval to be - * drawn - * @param y - * the y coordinate of the upper left corner of the oval to be - * drawn - * @param width - * the width of the oval to be drawn - * @param height - * the height of the oval to be drawn - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawOval(int x, int y, int width, int height) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - painter.drawEllipse(x, y, width, height); - } - - /** - * Draws the path described by the parameter. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param path - * the path to draw - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parameter is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the parameter has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see Path - * - * @since 3.1 - */ - public void drawPath(Path path) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - if (path == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (path.handle == 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - //checkGC(DRAW); - //TODO - // int /* long */gdipGraphics = data.gdipGraphics; - // Gdip.Graphics_TranslateTransform(gdipGraphics, data.gdipXOffset, data.gdipYOffset, Gdip.MatrixOrderPrepend); - // Gdip.Graphics_DrawPath(gdipGraphics, data.gdipPen, path.handle); - // Gdip.Graphics_TranslateTransform(gdipGraphics, -data.gdipXOffset, -data.gdipYOffset, Gdip.MatrixOrderPrepend); - } - } - - /** - * Draws a pixel, using the foreground color, at the specified point ( - * x, y). - *

    - * Note that the receiver's line attributes do not affect this operation. - *

    - * - * @param x - * the point's x coordinate - * @param y - * the point's y coordinate - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public void drawPoint(int x, int y) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - painter.drawPoint(x, y); - } - - /** - * Draws the closed polygon which is defined by the specified array of - * integer coordinates, using the receiver's foreground color. The array - * contains alternating x and y values which are considered to represent - * points which are the vertices of the polygon. Lines are drawn between - * each consecutive pair, and between the first pair and last pair in the - * array. - * - * @param pointArray - * an array of alternating x and y values which are the vertices - * of the polygon - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT if pointArray is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawPolygon(int[] pointArray) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - validatePointArray(pointArray); - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - painter.drawPolygon(createPolygonFromArray(pointArray)); - } - - /** - * Draws the polyline which is defined by the specified array of integer - * coordinates, using the receiver's foreground color. The array contains - * alternating x and y values which are considered to represent points which - * are the corners of the polyline. Lines are drawn between each consecutive - * pair, but not between the first pair and last pair in the array. - * - * @param pointArray - * an array of alternating x and y values which are the corners - * of the polyline - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the point array is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawPolyline(int[] pointArray) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (pointArray == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - validatePointArray(pointArray); - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - painter.drawPolyline(createPolygonFromArray(pointArray)); - } - - /** - * Draws the outline of the rectangle specified by the arguments, using the - * receiver's foreground color. The left and right edges of the rectangle - * are at x and x + width. The top and bottom - * edges are at y and y + height. - * - * @param x - * the x coordinate of the rectangle to be drawn - * @param y - * the y coordinate of the rectangle to be drawn - * @param width - * the width of the rectangle to be drawn - * @param height - * the height of the rectangle to be drawn - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawRectangle(int x, int y, int width, int height) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - painter.drawRect(x, y, width, height); - } - - /** - * Draws the outline of the specified rectangle, using the receiver's - * foreground color. The left and right edges of the rectangle are at - * rect.x and rect.x + rect.width. The top and - * bottom edges are at rect.y and - * rect.y + rect.height. - * - * @param rect - * the rectangle to draw - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the rectangle is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawRectangle(Rectangle rect) { - if (rect == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - drawRectangle(rect.x, rect.y, rect.width, rect.height); - } - - /** - * Draws the outline of the round-cornered rectangle specified by the - * arguments, using the receiver's foreground color. The left and right - * edges of the rectangle are at x and x + width. - * The top and bottom edges are at y and - * y + height. The roundness of the corners is - * specified by the arcWidth and arcHeight - * arguments, which are respectively the width and height of the ellipse - * used to draw the corners. - * - * @param x - * the x coordinate of the rectangle to be drawn - * @param y - * the y coordinate of the rectangle to be drawn - * @param width - * the width of the rectangle to be drawn - * @param height - * the height of the rectangle to be drawn - * @param arcWidth - * the width of the arc - * @param arcHeight - * the height of the arc - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setPen(getForeground().getColor()); - painter.drawRoundedRect(x, y, width, height, arcWidth, arcHeight, SizeMode.AbsoluteSize); - } - - /** - * Draws the given string, using the receiver's current font and foreground - * color. No tab expansion or carriage return processing will be performed. - * The background of the rectangular area where the string is being drawn - * will be filled with the receiver's background color. - * - * @param string - * the string to be drawn - * @param x - * the x coordinate of the top left corner of the rectangular - * area where the string is to be drawn - * @param y - * the y coordinate of the top left corner of the rectangular - * area where the string is to be drawn - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawString(String string, int x, int y) { - drawString(string, x, y, false); - } - - /** - * Draws the given string, using the receiver's current font and foreground - * color. No tab expansion or carriage return processing will be performed. - * If isTransparent is true, then the background - * of the rectangular area where the string is being drawn will not be - * modified, otherwise it will be filled with the receiver's background - * color. - * - * @param string - * the string to be drawn - * @param x - * the x coordinate of the top left corner of the rectangular - * area where the string is to be drawn - * @param y - * the y coordinate of the top left corner of the rectangular - * area where the string is to be drawn - * @param isTransparent - * if true the background will be transparent, - * otherwise it will be opaque - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawString(String string, int x, int y, boolean isTransparent) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - if (isTransparent) { - painter.setBackgroundMode(BGMode.TransparentMode); - } else { - painter.setBackgroundMode(BGMode.OpaqueMode); - painter.setBackground(new QBrush(getBackground().getColor())); - } - painter.setFont(data.font.getQFont()); - painter.setPen(getForeground().getColor()); - //System.out.println("drawText(" + x + ", " + y + ", " + string + ")"); - - painter.drawText(x, y + getHightCorrection(painter), string); - } - - private int getHightCorrection(QPainter painter) { - QFontMetrics fm = painter.fontMetrics(); - return fm.ascent(); - } - - /** - * Draws the given string, using the receiver's current font and foreground - * color. Tab expansion and carriage return processing are performed. The - * background of the rectangular area where the text is being drawn will be - * filled with the receiver's background color. - * - * @param string - * the string to be drawn - * @param x - * the x coordinate of the top left corner of the rectangular - * area where the text is to be drawn - * @param y - * the y coordinate of the top left corner of the rectangular - * area where the text is to be drawn - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawText(String string, int x, int y) { - drawText(string, x, y, SWT.DRAW_DELIMITER | SWT.DRAW_TAB); - } - - /** - * Draws the given string, using the receiver's current font and foreground - * color. Tab expansion and carriage return processing are performed. If - * isTransparent is true, then the background of - * the rectangular area where the text is being drawn will not be modified, - * otherwise it will be filled with the receiver's background color. - * - * @param string - * the string to be drawn - * @param x - * the x coordinate of the top left corner of the rectangular - * area where the text is to be drawn - * @param y - * the y coordinate of the top left corner of the rectangular - * area where the text is to be drawn - * @param isTransparent - * if true the background will be transparent, - * otherwise it will be opaque - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawText(String string, int x, int y, boolean isTransparent) { - int flags = SWT.DRAW_DELIMITER | SWT.DRAW_TAB; - if (isTransparent) { - flags |= SWT.DRAW_TRANSPARENT; - } - drawText(string, x, y, flags); - } - - /** - * Draws the given string, using the receiver's current font and foreground - * color. Tab expansion, line delimiter and mnemonic processing are - * performed according to the specified flags. If flags - * includes DRAW_TRANSPARENT, then the background of the - * rectangular area where the text is being drawn will not be modified, - * otherwise it will be filled with the receiver's background color. - *

    - * The parameter flags may be a combination of: - *

    - *
    DRAW_DELIMITER
    - *
    draw multiple lines
    - *
    DRAW_TAB
    - *
    expand tabs
    - *
    DRAW_MNEMONIC
    - *
    underline the mnemonic character
    - *
    DRAW_TRANSPARENT
    - *
    transparent background
    - *
    - *

    - * - * @param string - * the string to be drawn - * @param x - * the x coordinate of the top left corner of the rectangular - * area where the text is to be drawn - * @param y - * the y coordinate of the top left corner of the rectangular - * area where the text is to be drawn - * @param flags - * the flags specifying how to process the text - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void drawText(String string, int x, int y, int flags) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - if ((flags & SWT.DRAW_TRANSPARENT) != 0) { - painter.setBackgroundMode(BGMode.TransparentMode); - painter.setBackground(new QBrush(getBackground().getColor())); - } - - int translatedFlags = translateTextFlags(flags); - - painter.setPen(getForeground().getColor()); - - QRect r = painter.boundingRect(0, 0, 0, 0, translatedFlags, string); - - //System.out.println("drawText(" + x + ", " + y + ", " + r.width() + ", " + r.height() + ", " + string + ")"); - painter.drawText(x, y, r.width(), r.height(), translatedFlags, string); - } - - /** - * @param flags - * @return - */ - private int translateTextFlags(int flags) { - int translatedFlags = AlignmentFlag.AlignTop.value() | AlignmentFlag.AlignLeft.value(); - if ((flags & SWT.DRAW_DELIMITER) == 0) { - translatedFlags |= TextFlag.TextSingleLine.value(); - } - if ((flags & SWT.DRAW_TAB) != 0) { - translatedFlags |= TextFlag.TextExpandTabs.value(); - } - if ((flags & SWT.DRAW_MNEMONIC) != 0) { - translatedFlags |= TextFlag.TextShowMnemonic.value(); - } - return translatedFlags; - } - - /** - * Compares the argument to the receiver, and returns true if they represent - * the same object using a class specific comparison. - * - * @param object - * the object to compare with this object - * @return true if the object is the same as this object and - * false otherwise - * - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - return object == this || object instanceof GC && paintDevice == ((GC) object).paintDevice; - } - - /** - * Fills the interior of a circular or elliptical arc within the specified - * rectangular area, with the receiver's background color. - *

    - * The resulting arc begins at startAngle and extends for - * arcAngle degrees, using the current color. Angles are - * interpreted such that 0 degrees is at the 3 o'clock position. A positive - * value indicates a counter-clockwise rotation while a negative value - * indicates a clockwise rotation. - *

    - *

    - * The center of the arc is the center of the rectangle whose origin is ( - * x, y) and whose size is specified by the - * width and height arguments. - *

    - *

    - * The resulting arc covers an area width + 1 pixels wide by - * height + 1 pixels tall. - *

    - * - * @param x - * the x coordinate of the upper-left corner of the arc to be - * filled - * @param y - * the y coordinate of the upper-left corner of the arc to be - * filled - * @param width - * the width of the arc to be filled - * @param height - * the height of the arc to be filled - * @param startAngle - * the beginning angle - * @param arcAngle - * the angular extent of the arc, relative to the start angle - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #drawArc - */ - public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setBrush(getBackground().getColor()); - //painter.setPen(getBackground().getColor()); - painter.setPen(PenStyle.NoPen); - painter.drawArc(x, y, width, height, startAngle, arcAngle); - } - - /** - * Fills the interior of the specified rectangle with a gradient sweeping - * from left to right or top to bottom progressing from the receiver's - * foreground color to its background color. - * - * @param x - * the x coordinate of the rectangle to be filled - * @param y - * the y coordinate of the rectangle to be filled - * @param width - * the width of the rectangle to be filled, may be negative - * (inverts direction of gradient if horizontal) - * @param height - * the height of the rectangle to be filled, may be negative - * (inverts direction of gradient if vertical) - * @param vertical - * if true sweeps from top to bottom, else sweeps from left to - * right - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #drawRectangle(int, int, int, int) - */ - public void fillGradientRectangle(int x, int y, int width, int height, boolean vertical) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (width == 0 || height == 0) { - return; - } - // if (true) { - // return; - // } - - QColor fromColor = getForeground().getColor(); - QColor toColor = getBackground().getColor(); - - boolean swapColors = false; - if (width < 0) { - x += width; - width = -width; - if (!vertical) { - swapColors = true; - } - } - if (height < 0) { - y += height; - height = -height; - if (vertical) { - swapColors = true; - } - } - if (swapColors) { - QColor tmp = fromColor; - fromColor = toColor; - toColor = tmp; - } - if (fromColor.equals(toColor)) { - fillRectangle(x, y, width, height); - return; - } - - QPointF p1 = new QPointF(), p2 = new QPointF(); - p1.setX(x); - p1.setY(y); - if (vertical) { - p2.setX(p1.x()); - p2.setY(p1.y() + height); - } else { - p2.setX(p1.x() + width); - p2.setY(p1.y()); - } - QPainter painter = getActivePainter(); - QLinearGradient fade = new QLinearGradient(p1, p2); - fade.setColorAt(0.0, fromColor); - fade.setColorAt(1.0, toColor); - QBrush brush = new QBrush(fade); - painter.fillRect(x, y, width, height, brush); - } - - /** - * Fills the interior of an oval, within the specified rectangular area, - * with the receiver's background color. - * - * @param x - * the x coordinate of the upper left corner of the oval to be - * filled - * @param y - * the y coordinate of the upper left corner of the oval to be - * filled - * @param width - * the width of the oval to be filled - * @param height - * the height of the oval to be filled - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #drawOval - */ - public void fillOval(int x, int y, int width, int height) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setBrush(getBackground().getColor()); - painter.setPen(getBackground().getColor()); - painter.drawEllipse(x, y, width, height); - } - - /** - * Fills the path described by the parameter. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param path - * the path to fill - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parameter is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the parameter has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see Path - * - * @since 3.1 - */ - public void fillPath(Path path) { - //TODO - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - if (path == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (path.handle == 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - - /** - * Fills the interior of the closed polygon which is defined by the - * specified array of integer coordinates, using the receiver's background - * color. The array contains alternating x and y values which are considered - * to represent points which are the vertices of the polygon. Lines are - * drawn between each consecutive pair, and between the first pair and last - * pair in the array. - * - * @param pointArray - * an array of alternating x and y values which are the vertices - * of the polygon - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT if pointArray is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #drawPolygon - */ - public void fillPolygon(int[] pointArray) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - validatePointArray(pointArray); - QPainter painter = getActivePainter(); - painter.setBrush(getBackground().getColor()); - painter.setPen(getBackground().getColor()); - painter.drawPolygon(createPolygonFromArray(pointArray), FillRule.WindingFill); - } - - private void validatePointArray(int[] pointArray) { - if (pointArray == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (pointArray.length % 2 != 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - - } - - public static QPolygon createPolygonFromArray(int[] pointArray) { - QPolygon polygon = new QPolygon(); - for (int i = 0; i < pointArray.length; i += 2) { - polygon.add(pointArray[i], pointArray[i + 1]); - } - return polygon; - } - - /** - * Fills the interior of the rectangle specified by the arguments, using the - * receiver's background color. - * - * @param x - * the x coordinate of the rectangle to be filled - * @param y - * the y coordinate of the rectangle to be filled - * @param width - * the width of the rectangle to be filled - * @param height - * the height of the rectangle to be filled - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #drawRectangle(int, int, int, int) - */ - public void fillRectangle(int x, int y, int width, int height) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (width < 0) { - x = x + width; - width = -width; - } - if (height < 0) { - y = y + height; - height = -height; - } - QPainter painter = getActivePainter(); - painter.fillRect(x, y, width, height, getBackground().getColor()); - } - - /** - * Fills the interior of the specified rectangle, using the receiver's - * background color. - * - * @param rect - * the rectangle to be filled - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the rectangle is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #drawRectangle(int, int, int, int) - */ - public void fillRectangle(Rectangle rect) { - if (rect == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - fillRectangle(rect.x, rect.y, rect.width, rect.height); - } - - /** - * Fills the interior of the round-cornered rectangle specified by the - * arguments, using the receiver's background color. - * - * @param x - * the x coordinate of the rectangle to be filled - * @param y - * the y coordinate of the rectangle to be filled - * @param width - * the width of the rectangle to be filled - * @param height - * the height of the rectangle to be filled - * @param arcWidth - * the width of the arc - * @param arcHeight - * the height of the arc - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #drawRoundRectangle - */ - public void fillRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - painter.setBrush(getBackground().getColor()); - painter.setPen(getBackground().getColor()); - painter.drawRoundedRect(x, y, width, height, arcWidth, arcHeight); - } - - void flush() { - } - - /** - * Returns the advance width of the specified character in the font - * which is currently selected into the receiver. - *

    - * The advance width is defined as the horizontal distance the cursor should - * move after printing the character in the selected font. - *

    - * - * @param ch - * the character to measure - * @return the distance in the x direction to move past the character before - * painting the next - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public int getAdvanceWidth(char ch) { - - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter activePainter = getActivePainter(); - return activePainter.fontMetrics().width(ch); - // //checkGC(FONT); - // int tch = ch; - // if (ch > 0x7F) { - // TCHAR buffer = new TCHAR(getCodePage(), ch, false); - // tch = buffer.tcharAt(0); - // } - // int[] width = new int[1]; - // OS.GetCharWidth(handle, tch, tch, width); - // return width[0]; - } - - /** - * Returns the receiver's alpha value. The alpha value is between 0 - * (transparent) and 255 (opaque). - * - * @return the alpha value - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public int getAlpha() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.alpha; - } - - /** - * Returns the receiver's anti-aliasing setting value, which will be one of - * SWT.DEFAULT, SWT.OFF or SWT.ON. - * Note that this controls anti-aliasing for all non-text drawing - * operations. - * - * @return the anti-aliasing setting - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #getTextAntialias - * - * @since 3.1 - */ - public int getAntialias() { - return antialias; - // if (handle == 0) { - // SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - // } - // if (data.gdipGraphics == 0) - // return SWT.DEFAULT; - // int mode = Gdip.Graphics_GetSmoothingMode(data.gdipGraphics); - // switch (mode) { - // case Gdip.SmoothingModeDefault: - // return SWT.DEFAULT; - // case Gdip.SmoothingModeHighSpeed: - // case Gdip.SmoothingModeNone: - // return SWT.OFF; - // case Gdip.SmoothingModeAntiAlias: - // case Gdip.SmoothingModeAntiAlias8x8: - // case Gdip.SmoothingModeHighQuality: - // return SWT.ON; - // } - // return SWT.DEFAULT; - } - - /** - * Returns the background color. - * - * @return the receiver's background color - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Color getBackground() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.backgroundColor; - } - - /** - * Returns the background pattern. The default value is null. - * - * @return the receiver's background pattern - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Pattern - * - * @since 3.1 - */ - public Pattern getBackgroundPattern() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.backgroundPattern; - } - - /** - * Returns the width of the specified character in the font selected into - * the receiver. - *

    - * The width is defined as the space taken up by the actual character, not - * including the leading and tailing whitespace or overhang. - *

    - * - * @param ch - * the character to measure - * @return the width of the character - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public int getCharWidth(char ch) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - //checkGC(FONT); - // TODO - return 10; - } - - /** - * Returns the bounding rectangle of the receiver's clipping region. If no - * clipping region is set, the return value will be a rectangle which covers - * the entire bounds of the object the receiver is drawing on. - * - * @return the bounding rectangle of the clipping region - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Rectangle getClipping() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QPainter painter = getActivePainter(); - if (painter.hasClipping()) { - return QtSWTConverter.convert(painter.clipRegion()); - } else { - return new Rectangle(0, 0, paintDevice.width(), paintDevice.height()); - } - } - - /** - * Sets the region managed by the argument to the current clipping region of - * the receiver. - * - * @param region - * the region to fill with the clipping region - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the region is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the region is disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void getClipping(Region region) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (region == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (region.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - - QPainter painter = getActivePainter(); - Rectangle rect; - if (painter.hasClipping()) { - rect = QtSWTConverter.convert(painter.clipRegion()); - } else { - rect = new Rectangle(0, 0, paintDevice.width(), paintDevice.height()); - } - region.add(rect); - } - - /** - * Returns the receiver's fill rule, which will be one of - * SWT.FILL_EVEN_ODD or SWT.FILL_WINDING. - * - * @return the receiver's fill rule - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public int getFillRule() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (fillRule == null || fillRule.equals(FillRule.WindingFill)) { - return SWT.FILL_WINDING; - } - return SWT.FILL_EVEN_ODD; - } - - /** - * Sets the receiver's fill rule to the parameter, which must be one of - * SWT.FILL_EVEN_ODD or SWT.FILL_WINDING. - * - * @param rule - * the new fill rule - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the rule is not one of - * SWT.FILL_EVEN_ODD or - * SWT.FILL_WINDING
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void setFillRule(int rule) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - switch (rule) { - case SWT.FILL_WINDING: - fillRule = FillRule.WindingFill; - break; - case SWT.FILL_EVEN_ODD: - fillRule = FillRule.OddEvenFill; - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - - /** - * Returns the font currently being used by the receiver to draw and measure - * text. - * - * @return the receiver's font - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Font getFont() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.font; - } - - /** - * Returns a FontMetrics which contains information about the font currently - * being used by the receiver to draw and measure text. - * - * @return font metrics for the receiver's font - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public FontMetrics getFontMetrics() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - //checkGC(FONT); - //if (!paintDevice.paintingActive()) { - return FontMetrics.internal_new(data.font); - // } - // QPainter painter = getActivePainter(); - // painter.setFont(data.font.getQFont()); - // try { - // return FontMetrics.internal_new(painter.fontMetrics()); - // } finally { - // painter.end(); - // } - - } - - /** - * Returns the receiver's foreground color. - * - * @return the color used for drawing foreground things - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Color getForeground() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.foregroundColor; - } - - /** - * Returns the foreground pattern. The default value is null. - * - * @return the receiver's foreground pattern - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Pattern - * - * @since 3.1 - */ - public Pattern getForegroundPattern() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.foregroundPattern; - } - - /** - * Returns the GCData. - *

    - * IMPORTANT: This method is not part of the public API for - * GC. It is marked public only so that it can be shared within - * the packages provided by SWT. It is not available on all platforms, and - * should never be called from application code. - *

    - * - * @return the receiver's GCData - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see GCData - * - * @since 3.2 - * @noreference This method is not intended to be referenced by clients. - */ - public GCData getGCData() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data; - } - - /** - * Returns the receiver's interpolation setting, which will be one of - * SWT.DEFAULT, SWT.NONE, SWT.LOW or - * SWT.HIGH. - * - * @return the receiver's interpolation setting - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public int getInterpolation() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return SWT.DEFAULT; - //TODO - // int mode = Gdip.Graphics_GetInterpolationMode(data.gdipGraphics); - // switch (mode) { - // case Gdip.InterpolationModeDefault: - // return SWT.DEFAULT; - // case Gdip.InterpolationModeNearestNeighbor: - // return SWT.NONE; - // case Gdip.InterpolationModeBilinear: - // case Gdip.InterpolationModeLowQuality: - // return SWT.LOW; - // case Gdip.InterpolationModeBicubic: - // case Gdip.InterpolationModeHighQualityBilinear: - // case Gdip.InterpolationModeHighQualityBicubic: - // case Gdip.InterpolationModeHighQuality: - // return SWT.HIGH; - // } - // return SWT.DEFAULT; - } - - /** - * Returns the receiver's line attributes. - * - * @return the line attributes used for drawing lines - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.3 - */ - public LineAttributes getLineAttributes() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - float[] dashes = null; - if (data.lineDashes != null) { - dashes = new float[data.lineDashes.length]; - System.arraycopy(data.lineDashes, 0, dashes, 0, dashes.length); - } - return new LineAttributes(data.lineWidth, data.lineCap, data.lineJoin, data.lineStyle, dashes, - data.lineDashesOffset, data.lineMiterLimit); - } - - /** - * Returns the receiver's line cap style, which will be one of the constants - * SWT.CAP_FLAT, SWT.CAP_ROUND, or - * SWT.CAP_SQUARE. - * - * @return the cap style used for drawing lines - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public int getLineCap() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.lineCap; - } - - /** - * Returns the receiver's line dash style. The default value is - * null. - * - * @return the line dash style used for drawing lines - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public int[] getLineDash() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (data.lineDashes == null) { - return null; - } - int[] lineDashes = new int[data.lineDashes.length]; - for (int i = 0; i < lineDashes.length; i++) { - lineDashes[i] = (int) data.lineDashes[i]; - } - return lineDashes; - } - - /** - * Returns the receiver's line join style, which will be one of the - * constants SWT.JOIN_MITER, SWT.JOIN_ROUND, or - * SWT.JOIN_BEVEL. - * - * @return the join style used for drawing lines - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public int getLineJoin() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.lineJoin; - } - - /** - * Returns the receiver's line style, which will be one of the constants - * SWT.LINE_SOLID, SWT.LINE_DASH, - * SWT.LINE_DOT, SWT.LINE_DASHDOT or - * SWT.LINE_DASHDOTDOT. - * - * @return the style used for drawing lines - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public int getLineStyle() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.lineStyle; - } - - /** - * Returns the width that will be used when drawing lines for all of the - * figure drawing operations (that is, drawLine, - * drawRectangle, drawPolyline, and so forth. - * - * @return the receiver's line width - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public int getLineWidth() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return (int) data.lineWidth; - } - - /** - * Returns the receiver's style information. - *

    - * Note that the value which is returned by this method may - * not match the value which was provided to the constructor when the - * receiver was created. This can occur when the underlying operating system - * does not support a particular combination of requested styles. - *

    - * - * @return the style bits - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 2.1.2 - */ - public int getStyle() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return data.style; - } - - /** - * Returns the receiver's text drawing anti-aliasing setting value, which - * will be one of SWT.DEFAULT, SWT.OFF or - * SWT.ON. Note that this controls anti-aliasing only - * for text drawing operations. - * - * @return the anti-aliasing setting - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #getAntialias - * - * @since 3.1 - */ - public int getTextAntialias() { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - // if (data.gdipGraphics == 0) - return SWT.DEFAULT; - // TODO - // int mode = Gdip.Graphics_GetTextRenderingHint(data.gdipGraphics); - // switch (mode) { - // case Gdip.TextRenderingHintSystemDefault: - // return SWT.DEFAULT; - // case Gdip.TextRenderingHintSingleBitPerPixel: - // case Gdip.TextRenderingHintSingleBitPerPixelGridFit: - // return SWT.OFF; - // case Gdip.TextRenderingHintAntiAlias: - // case Gdip.TextRenderingHintAntiAliasGridFit: - // case Gdip.TextRenderingHintClearTypeGridFit: - // return SWT.ON; - // } - // return SWT.DEFAULT; - } - - /** - * Sets the parameter to the transform that is currently being used by the - * receiver. - * - * @param transform - * the destination to copy the transform into - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parameter is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the parameter has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Transform - * - * @since 3.1 - */ - public void getTransform(Transform transform) { - //TODO - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - if (transform == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (transform.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - // int /* long */gdipGraphics = data.gdipGraphics; - // if (gdipGraphics != 0) { - // Gdip.Graphics_GetTransform(gdipGraphics, transform.handle); - // int /* long */identity = identity(); - // Gdip.Matrix_Invert(identity); - // Gdip.Matrix_Multiply(transform.handle, identity, Gdip.MatrixOrderAppend); - // Gdip.Matrix_delete(identity); - // } else { - // transform.setElements(1, 0, 0, 1, 0, 0); - // } - } - } - - /** - * Returns true if this GC is drawing in the mode where the - * resulting color in the destination is the exclusive or of the - * color values in the source and the destination, and false if - * it is drawing in the mode where the destination color is being replaced - * with the source color value. - * - * @return true true if the receiver is in XOR mode, and false - * otherwise - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public boolean getXORMode() { - //TODO - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - // int rop2 = 0; - // rop2 = OS.GetROP2(handle); - return false; //rop2 == OS.R2_XORPEN; - } - - /** - * If the argument is true, puts the receiver in a drawing mode - * where the resulting color in the destination is the exclusive or - * of the color values in the source and the destination, and if the - * argument is false, puts the receiver in a drawing mode where - * the destination color is replaced with the source color value. - *

    - * Note that this mode in fundamentally unsupportable on certain platforms, - * notably Carbon (Mac OS X). Clients that want their code to run on all - * platforms need to avoid this method. - *

    - * - * @param xor - * if true, then xor mode is used, - * otherwise source copy mode is used - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @deprecated this functionality is not supported on some platforms - */ - @Deprecated - public void setXORMode(boolean xor) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - //TODO - //OS.SetROP2(handle, xor ? OS.R2_XORPEN : OS.R2_COPYPEN); - } - - /** - * Returns an integer hash code for the receiver. Any two objects that - * return true when passed to equals must return - * the same value for this method. - * - * @return the receiver's hash - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #equals - */ - @Override - public int hashCode() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return paintDevice.hashCode(); - } - - /** - * Returns true if the receiver has a clipping region set into - * it, and false otherwise. If this method returns false, the - * receiver will draw on all available space in the destination. If it - * returns true, it will draw only in the area that is covered by the region - * that can be accessed with getClipping(region). - * - * @return true if the GC has a clipping region, and - * false otherwise - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public boolean isClipped() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return activeClipping != null; - } - - /** - * Returns true if the GC has been disposed, and - * false otherwise. - *

    - * This method gets the dispose state for the GC. When a GC has been - * disposed, it is an error to invoke any other method using the GC. - * - * @return true when the GC is disposed and false - * otherwise - */ - @Override - public boolean isDisposed() { - return paintDevice == null; - } - - /** - * Sets the receiver to always use the operating system's advanced graphics - * subsystem for all graphics operations if the argument is - * true. If the argument is false, the advanced - * graphics subsystem is no longer used, advanced graphics state is cleared - * and the normal graphics subsystem is used from now on. - *

    - * Normally, the advanced graphics subsystem is invoked automatically when - * any one of the alpha, antialias, patterns, interpolation, paths, clipping - * or transformation operations in the receiver is requested. When the - * receiver is switched into advanced mode, the advanced graphics subsystem - * performs both advanced and normal graphics operations. Because the two - * subsystems are different, their output may differ. Switching to advanced - * graphics before any graphics operations are performed ensures that the - * output is consistent. - *

    - *

    - * Advanced graphics may not be installed for the operating system. In this - * case, this operation does nothing. Some operating system have only one - * graphics subsystem, so switching from normal to advanced graphics does - * nothing. However, switching from advanced to normal graphics will always - * clear the advanced graphics state, even for operating systems that have - * only one graphics subsystem. - *

    - * - * @param advanced - * the new advanced graphics state - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #setAlpha - * @see #setAntialias - * @see #setBackgroundPattern - * @see #setClipping(Path) - * @see #setForegroundPattern - * @see #setLineAttributes - * @see #setInterpolation - * @see #setTextAntialias - * @see #setTransform - * @see #getAdvanced - * - * @since 3.1 - */ - public void setAdvanced(boolean advanced) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - } - - /** - * Returns true if receiver is using the operating system's - * advanced graphics subsystem. Otherwise, false is returned to - * indicate that normal graphics are in use. - *

    - * Advanced graphics may not be installed for the operating system. In this - * case, false is always returned. Some operating system have - * only one graphics subsystem. If this subsystem supports advanced - * graphics, then true is always returned. If any graphics - * operation such as alpha, antialias, patterns, interpolation, paths, - * clipping or transformation has caused the receiver to switch from regular - * to advanced graphics mode, true is returned. If the receiver - * has been explicitly switched to advanced mode and this mode is supported, - * true is returned. - *

    - * - * @return the advanced value - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #setAdvanced - * - * @since 3.1 - */ - public boolean getAdvanced() { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - // Qt is Advanced :) - return true; - } - - /** - * Sets the receiver's anti-aliasing value to the parameter, which must be - * one of SWT.DEFAULT, SWT.OFF or - * SWT.ON. Note that this controls anti-aliasing for all - * non-text drawing operations. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param antialias - * the anti-aliasing setting - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the parameter is not one - * of SWT.DEFAULT, SWT.OFF or - * SWT.ON
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see #getAdvanced - * @see #setAdvanced - * @see #setTextAntialias - * - * @since 3.1 - */ - public void setAntialias(int antialias) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - this.antialias = antialias; - // if (handle == 0) { - // SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - // TODO - // if (data.gdipGraphics == 0 && antialias == SWT.DEFAULT) - // return; - // int mode = 0; - // switch (antialias) { - // case SWT.DEFAULT: - // mode = Gdip.SmoothingModeDefault; - // break; - // case SWT.OFF: - // mode = Gdip.SmoothingModeNone; - // break; - // case SWT.ON: - // mode = Gdip.SmoothingModeAntiAlias; - // break; - // default: - // SWT.error(SWT.ERROR_INVALID_ARGUMENT); - // } - // } - } - - /** - * Sets the receiver's alpha value which must be between 0 (transparent) and - * 255 (opaque). - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param alpha - * the alpha value - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see #getAdvanced - * @see #setAdvanced - * - * @since 3.1 - */ - public void setAlpha(int alpha) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - //TODO - data.alpha = alpha & 0xFF; - data.state &= ~(BACKGROUND | FOREGROUND); - } - - /** - * Sets the background color. The background color is used for fill - * operations and as the background color when text is drawn. - * - * @param color - * the new background color for the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the color is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the color has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setBackground(Color color) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (color == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (data.backgroundPattern == null && data.backgroundColor.equals(color)) { - return; - } - data.backgroundPattern = null; - data.backgroundColor = color; - data.state &= ~(BACKGROUND | BACKGROUND_TEXT); - } - - /** - * Sets the background pattern. The default value is null. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param pattern - * the new background pattern - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the parameter has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see Pattern - * @see #getAdvanced - * @see #setAdvanced - * - * @since 3.1 - */ - public void setBackgroundPattern(Pattern pattern) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (pattern != null && pattern.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (data.backgroundPattern == pattern) { - return; - } - data.backgroundPattern = pattern; - data.state &= ~BACKGROUND; - } - - /** - * Sets the area of the receiver which can be changed by drawing operations - * to the rectangular area specified by the arguments. - * - * @param x - * the x coordinate of the clipping rectangle - * @param y - * the y coordinate of the clipping rectangle - * @param width - * the width of the clipping rectangle - * @param height - * the height of the clipping rectangle - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setClipping(int x, int y, int width, int height) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - activeClipping = new QRegion(x, y, width, height); - } - - /** - * Sets the area of the receiver which can be changed by drawing operations - * to the path specified by the argument. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param path - * the clipping path. - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the path has been disposed - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see Path - * @see #getAdvanced - * @see #setAdvanced - * - * @since 3.1 - */ - public void setClipping(Path path) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (path != null && path.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (path == null) { - activeClipping = null; - } - //TODO - } - - /** - * Sets the area of the receiver which can be changed by drawing operations - * to the rectangular area specified by the argument. Specifying - * null for the rectangle reverts the receiver's clipping area - * to its original value. - * - * @param rect - * the clipping rectangle or null - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setClipping(Rectangle rect) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (rect != null) { - activeClipping = new QRegion(rect.x, rect.y, rect.width, rect.height); - } else { - activeClipping = null; - } - } - - /** - * Sets the area of the receiver which can be changed by drawing operations - * to the region specified by the argument. Specifying null for - * the region reverts the receiver's clipping area to its original value. - * - * @param region - * the clipping region or null - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the region has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setClipping(Region region) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (region != null && region.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (region != null) { - activeClipping = region.getQRegion(); - } else { - activeClipping = null; - } - } - - /** - * Sets the font which will be used by the receiver to draw and measure text - * to the argument. If the argument is null, then a default font appropriate - * for the platform will be used instead. - * - * @param font - * the new font for the receiver, or null to indicate a default - * font - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the font has been disposed - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setFont(Font font) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (font != null && font.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - data.font = font != null ? font : data.device.getSystemFont(); - data.state &= ~FONT; - } - - /** - * Sets the foreground color. The foreground color is used for drawing - * operations including when text is drawn. - * - * @param color - * the new foreground color for the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the color is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the color has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setForeground(Color color) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (color == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (data.foregroundPattern == null && color.equals(data.foregroundColor)) { - return; - } - data.foregroundPattern = null; - data.foregroundColor = color; - data.state &= ~(FOREGROUND | FOREGROUND_TEXT); - } - - /** - * Sets the foreground pattern. The default value is null. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param pattern - * the new foreground pattern - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the parameter has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see Pattern - * @see #getAdvanced - * @see #setAdvanced - * - * @since 3.1 - */ - public void setForegroundPattern(Pattern pattern) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (pattern != null && pattern.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - // if (data.gdipGraphics == 0 && pattern == null) - // return; - // initGdip(); - if (data.foregroundPattern == pattern) { - return; - } - data.foregroundPattern = pattern; - data.state &= ~FOREGROUND; - } - - /** - * Sets the receiver's interpolation setting to the parameter, which must be - * one of SWT.DEFAULT, SWT.NONE, - * SWT.LOW or SWT.HIGH. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param interpolation - * the new interpolation setting - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the rule is not one of - * SWT.DEFAULT, SWT.NONE, - * SWT.LOW or SWT.HIGH - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see #getAdvanced - * @see #setAdvanced - * - * @since 3.1 - */ - public void setInterpolation(int interpolation) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - //TODO - //if (data.gdipGraphics == 0 && interpolation == SWT.DEFAULT) - // int mode = 0; - // switch (interpolation) { - // case SWT.DEFAULT: - // mode = Gdip.InterpolationModeDefault; - // break; - // case SWT.NONE: - // mode = Gdip.InterpolationModeNearestNeighbor; - // break; - // case SWT.LOW: - // mode = Gdip.InterpolationModeLowQuality; - // break; - // case SWT.HIGH: - // mode = Gdip.InterpolationModeHighQuality; - // break; - // default: - // SWT.error(SWT.ERROR_INVALID_ARGUMENT); - // } - // initGdip(); - //Gdip.Graphics_SetInterpolationMode(data.gdipGraphics, mode); - } - - /** - * Sets the receiver's line attributes. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param attributes - * the line attributes - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the attributes is null
    • - *
    • ERROR_INVALID_ARGUMENT - if any of the line attributes - * is not valid
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see LineAttributes - * @see #getAdvanced - * @see #setAdvanced - * - * @since 3.3 - */ - public void setLineAttributes(LineAttributes attributes) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (attributes == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - int mask = 0; - float lineWidth = attributes.width; - if (lineWidth != data.lineWidth) { - mask |= LINE_WIDTH | DRAW_OFFSET; - } - int lineStyle = attributes.style; - if (lineStyle != data.lineStyle) { - mask |= LINE_STYLE; - switch (lineStyle) { - case SWT.LINE_SOLID: - case SWT.LINE_DASH: - case SWT.LINE_DOT: - case SWT.LINE_DASHDOT: - case SWT.LINE_DASHDOTDOT: - break; - case SWT.LINE_CUSTOM: - if (attributes.dash == null) { - lineStyle = SWT.LINE_SOLID; - } - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - int join = attributes.join; - if (join != data.lineJoin) { - mask |= LINE_JOIN; - switch (join) { - case SWT.CAP_ROUND: - case SWT.CAP_FLAT: - case SWT.CAP_SQUARE: - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - int cap = attributes.cap; - if (cap != data.lineCap) { - mask |= LINE_CAP; - switch (cap) { - case SWT.JOIN_MITER: - case SWT.JOIN_ROUND: - case SWT.JOIN_BEVEL: - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - float[] dashes = attributes.dash; - float[] lineDashes = data.lineDashes; - if (dashes != null && dashes.length > 0) { - boolean changed = lineDashes == null || lineDashes.length != dashes.length; - for (int i = 0; i < dashes.length; i++) { - float dash = dashes[i]; - if (dash <= 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (!changed && lineDashes[i] != dash) { - changed = true; - } - } - if (changed) { - float[] newDashes = new float[dashes.length]; - System.arraycopy(dashes, 0, newDashes, 0, dashes.length); - dashes = newDashes; - mask |= LINE_STYLE; - } else { - dashes = lineDashes; - } - } else { - if (lineDashes != null && lineDashes.length > 0) { - mask |= LINE_STYLE; - } else { - dashes = lineDashes; - } - } - float dashOffset = attributes.dashOffset; - if (dashOffset != data.lineDashesOffset) { - mask |= LINE_STYLE; - } - float miterLimit = attributes.miterLimit; - if (miterLimit != data.lineMiterLimit) { - mask |= LINE_MITERLIMIT; - } - // initGdip(); - if (mask == 0) { - return; - } - data.lineWidth = lineWidth; - data.lineStyle = lineStyle; - data.lineCap = cap; - data.lineJoin = join; - data.lineDashes = dashes; - data.lineDashesOffset = dashOffset; - data.lineMiterLimit = miterLimit; - data.state &= ~mask; - } - - /** - * Sets the receiver's line cap style to the argument, which must be one of - * the constants SWT.CAP_FLAT, SWT.CAP_ROUND, or - * SWT.CAP_SQUARE. - * - * @param cap - * the cap style to be used for drawing lines - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the style is not valid
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void setLineCap(int cap) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - if (data.lineCap == cap) { - return; - } - switch (cap) { - case SWT.CAP_ROUND: - case SWT.CAP_FLAT: - case SWT.CAP_SQUARE: - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - data.lineCap = cap; - data.state &= ~LINE_CAP; - } - - /** - * Sets the receiver's line dash style to the argument. The default value is - * null. If the argument is not null, the - * receiver's line style is set to SWT.LINE_CUSTOM, otherwise - * it is set to SWT.LINE_SOLID. - * - * @param dashes - * the dash style to be used for drawing lines - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if any of the values in the - * array is less than or equal 0
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void setLineDash(int[] dashes) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - float[] lineDashes = data.lineDashes; - if (dashes != null && dashes.length > 0) { - boolean changed = data.lineStyle != SWT.LINE_CUSTOM || lineDashes == null - || lineDashes.length != dashes.length; - for (int i = 0; i < dashes.length; i++) { - int dash = dashes[i]; - if (dash <= 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (!changed && lineDashes[i] != dash) { - changed = true; - } - } - if (!changed) { - return; - } - data.lineDashes = new float[dashes.length]; - for (int i = 0; i < dashes.length; i++) { - data.lineDashes[i] = dashes[i]; - } - data.lineStyle = SWT.LINE_CUSTOM; - } else { - if (data.lineStyle == SWT.LINE_SOLID && (lineDashes == null || lineDashes.length == 0)) { - return; - } - data.lineDashes = null; - data.lineStyle = SWT.LINE_SOLID; - } - data.state &= ~LINE_STYLE; - } - - /** - * Sets the receiver's line join style to the argument, which must be one of - * the constants SWT.JOIN_MITER, SWT.JOIN_ROUND, - * or SWT.JOIN_BEVEL. - * - * @param join - * the join style to be used for drawing lines - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the style is not valid
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void setLineJoin(int join) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (data.lineJoin == join) { - return; - } - switch (join) { - case SWT.JOIN_MITER: - case SWT.JOIN_ROUND: - case SWT.JOIN_BEVEL: - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - data.lineJoin = join; - data.state &= ~LINE_JOIN; - } - - /** - * Sets the receiver's line style to the argument, which must be one of the - * constants SWT.LINE_SOLID, SWT.LINE_DASH, - * SWT.LINE_DOT, SWT.LINE_DASHDOT or - * SWT.LINE_DASHDOTDOT. - * - * @param lineStyle - * the style to be used for drawing lines - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the style is not valid
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setLineStyle(int lineStyle) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (data.lineStyle == lineStyle) { - return; - } - switch (lineStyle) { - case SWT.LINE_SOLID: - case SWT.LINE_DASH: - case SWT.LINE_DOT: - case SWT.LINE_DASHDOT: - case SWT.LINE_DASHDOTDOT: - break; - case SWT.LINE_CUSTOM: - if (data.lineDashes == null) { - lineStyle = SWT.LINE_SOLID; - } - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - data.lineStyle = lineStyle; - data.state &= ~LINE_STYLE; - } - - /** - * Sets the width that will be used when drawing lines for all of the figure - * drawing operations (that is, drawLine, - * drawRectangle, drawPolyline, and so forth. - *

    - * Note that line width of zero is used as a hint to indicate that the - * fastest possible line drawing algorithms should be used. This means that - * the output may be different from line width one. - *

    - * - * @param lineWidth - * the width of a line - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setLineWidth(int lineWidth) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - if (data.lineWidth == lineWidth) { - return; - } - data.lineWidth = lineWidth; - data.state &= ~(LINE_WIDTH | DRAW_OFFSET); - } - - /** - * Sets the receiver's text anti-aliasing value to the parameter, which must - * be one of SWT.DEFAULT, SWT.OFF or - * SWT.ON. Note that this controls anti-aliasing only for all - * text drawing operations. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param antialias - * the anti-aliasing setting - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the parameter is not one - * of SWT.DEFAULT, SWT.OFF or - * SWT.ON
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see #getAdvanced - * @see #setAdvanced - * @see #setAntialias - * - * @since 3.1 - */ - public void setTextAntialias(int antialias) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - //TODO - // if (data.gdipGraphics == 0 && antialias == SWT.DEFAULT) - // return; - // int textMode = 0; - // switch (antialias) { - // case SWT.DEFAULT: - // textMode = Gdip.TextRenderingHintSystemDefault; - // break; - // case SWT.OFF: - // textMode = Gdip.TextRenderingHintSingleBitPerPixelGridFit; - // break; - // case SWT.ON: - // int[] type = new int[1]; - // OS.SystemParametersInfo(OS.SPI_GETFONTSMOOTHINGTYPE, 0, type, 0); - // if (type[0] == OS.FE_FONTSMOOTHINGCLEARTYPE) { - // textMode = Gdip.TextRenderingHintClearTypeGridFit; - // } else { - // textMode = Gdip.TextRenderingHintAntiAliasGridFit; - // } - // break; - // default: - // SWT.error(SWT.ERROR_INVALID_ARGUMENT); - // } - // // initGdip(); - // Gdip.Graphics_SetTextRenderingHint(data.gdipGraphics, textMode); - } - - /** - * Sets the transform that is currently being used by the receiver. If the - * argument is null, the current transform is set to the - * identity transform. - *

    - * This operation requires the operating system's advanced graphics - * subsystem which may not be available on some platforms. - *

    - * - * @param transform - * the transform to set - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the parameter has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are - * not available
    • - *
    - * - * @see Transform - * @see #getAdvanced - * @see #setAdvanced - * - * @since 3.1 - */ - public void setTransform(Transform transform) { - //TODO - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - if (transform != null && transform.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - // if (data.gdipGraphics == 0 && transform == null) - // return; - // // initGdip(); - // int /* long */identity = identity(); - // if (transform != null) { - // Gdip.Matrix_Multiply(identity, transform.handle, Gdip.MatrixOrderPrepend); - // } - // Gdip.Graphics_SetTransform(data.gdipGraphics, identity); - // Gdip.Matrix_delete(identity); - // data.state &= ~DRAW_OFFSET; - } - } - - /** - * Returns the extent of the given string. No tab expansion or carriage - * return processing will be performed. - *

    - * The extent of a string is the width and height of the - * rectangular area it would cover if drawn in a particular font (in this - * case, the current font in the receiver). - *

    - * - * @param string - * the string to measure - * @return a point containing the extent of the string - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Point stringExtent(String string) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - return _textExtent(getActivePainter(), string, 0); - } - - /** - * Returns the extent of the given string. Tab expansion and carriage return - * processing are performed. - *

    - * The extent of a string is the width and height of the - * rectangular area it would cover if drawn in a particular font (in this - * case, the current font in the receiver). - *

    - * - * @param string - * the string to measure - * @return a point containing the extent of the string - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Point textExtent(String string) { - return textExtent(string, SWT.DRAW_DELIMITER | SWT.DRAW_TAB); - } - - /** - * Returns the extent of the given string. Tab expansion, line delimiter and - * mnemonic processing are performed according to the specified flags, which - * can be a combination of: - *
    - *
    DRAW_DELIMITER
    - *
    draw multiple lines
    - *
    DRAW_TAB
    - *
    expand tabs
    - *
    DRAW_MNEMONIC
    - *
    underline the mnemonic character
    - *
    DRAW_TRANSPARENT
    - *
    transparent background
    - *
    - *

    - * The extent of a string is the width and height of the - * rectangular area it would cover if drawn in a particular font (in this - * case, the current font in the receiver). - *

    - * - * @param string - * the string to measure - * @param flags - * the flags specifying how to process the text - * @return a point containing the extent of the string - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Point textExtent(String string, int flags) { - if (paintDevice == null) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (string == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - QPainter painter = getActivePainter(); - return _textExtent(painter, string, flags); - } - - private Point _textExtent(QPainter painter, String string, int flags) { - int qFlags = translateTextFlags(flags); - painter.setFont(data.font.getQFont()); - QRect rect = painter.boundingRect((QRect) null, qFlags, string); - //System.out.println("textExtent: " + string + " -> " + rect.width() + "x" + rect.height()); - return new Point(rect.width(), rect.height()); - } - - /** - * Invokes platform specific functionality to allocate a new graphics - * context. - *

    - * IMPORTANT: This method is not part of the public API for - * GC. It is marked public only so that it can be shared within - * the packages provided by SWT. It is not available on all platforms, and - * should never be called from application code. - *

    - * - * @param drawable - * the Drawable for the receiver. - * @param data - * the data for the receiver. - * - * @return a new GC - */ - public static GC qt_new(Drawable drawable, GCData data) { - GC gc = new GC(); - QPaintDeviceInterface paintDevice = drawable.internal_new_GC(data); - gc.device = data.device; - gc.init(drawable, data, paintDevice); - return gc; - } - - /** - * Invokes platform specific functionality to wrap a graphics context. - *

    - * IMPORTANT: This method is not part of the public API for - * GC. It is marked public only so that it can be shared within - * the packages provided by SWT. It is not available on all platforms, and - * should never be called from application code. - *

    - * - * @param hDC - * the Windows HDC. - * @param data - * the data for the receiver. - * - * @return a new GC - */ - public static GC qt_new(Drawable drawable, QPaintDeviceInterface paintDevice, GCData data) { - GC gc = new GC(); - gc.device = data.device; - gc.init(drawable, data, paintDevice); - return gc; - } - - /** - * Returns a string containing a concise, human-readable description of the - * receiver. - * - * @return a string representation of the receiver - */ - @Override - public String toString() { - if (isDisposed()) { - return "GC {*DISPOSED*}"; //$NON-NLS-1$ - } - return "GC {" + paintDevice + "}"; //$NON-NLS-1$ //$NON-NLS-2$ - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GCData.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GCData.java deleted file mode 100644 index a5050c0fdd..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GCData.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.graphics; - -import org.eclipse.swt.SWT; - -/** - * Instances of this class are descriptions of GCs in terms of unallocated - * platform-specific data fields. - *

    - * IMPORTANT: This class is not part of the public API for SWT. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms, and should never be - * called from application code. - *

    - * - * @see Sample code and further - * information - * @noinstantiate This class is not intended to be instantiated by clients. - */ - -public final class GCData { - public Device device; - public int style, state = -1; - public Color foregroundColor = null; - public Color backgroundColor = null; - public Font font; - public Pattern foregroundPattern; - public Pattern backgroundPattern; - public int lineStyle = SWT.LINE_SOLID; - public float lineWidth; - public int lineCap = SWT.CAP_FLAT; - public int lineJoin = SWT.JOIN_MITER; - public float lineDashesOffset; - public float[] lineDashes; - public float lineMiterLimit = 10; - public int alpha = 0xFF; - public Image image; - public int layout = -1; - public int uiState = 0; - public boolean focusDrawn; - public int handle; -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java deleted file mode 100644 index fe3374b526..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java +++ /dev/null @@ -1,978 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.graphics; - -import java.io.InputStream; -import java.util.Arrays; -import java.util.List; - -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.gui.QIcon; -import com.trolltech.qt.gui.QImage; -import com.trolltech.qt.gui.QPaintDeviceInterface; -import com.trolltech.qt.gui.QPixmap; -import com.trolltech.qt.gui.QImage.Format; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.widgets.Display; - -/** - * Instances of this class are graphics which have been prepared for display on - * a specific device. That is, they are ready to paint using methods such as - * GC.drawImage() and display on widgets with, for example, - * Button.setImage(). - *

    - * If loaded from a file format that supports it, an Image may have - * transparency, meaning that certain pixels are specified as being transparent - * when drawn. Examples of file formats that support transparency are GIF and - * PNG. - *

    - *

    - * There are two primary ways to use Images. The first is to load a - * graphic file from disk and create an Image from it. This is done - * using an Image constructor, for example: - * - *

    - * Image i = new Image(device, "C:\\graphic.bmp");
    - * 
    - * - * A graphic file may contain a color table specifying which colors the image - * was intended to possess. In the above example, these colors will be mapped to - * the closest available color in SWT. It is possible to get more control over - * the mapping of colors as the image is being created, using code of the form: - * - *
    - * ImageData data = new ImageData("C:\\graphic.bmp");
    - * RGB[] rgbs = data.getRGBs();
    - * // At this point, rgbs contains specifications of all
    - * // the colors contained within this image. You may
    - * // allocate as many of these colors as you wish by
    - * // using the Color constructor Color(RGB), then
    - * // create the image:
    - * Image i = new Image(device, data);
    - * 
    - *

    - * Applications which require even greater control over the image loading - * process should use the support provided in class ImageLoader. - *

    - *

    - * Application code must explicitly invoke the Image.dispose() - * method to release the operating system resources managed by each instance - * when those instances are no longer required. - *

    - * - * @see Color - * @see ImageData - * @see ImageLoader - * @see Image snippets - * @see SWT Examples: - * GraphicsExample, ImageAnalyzer - * @see Sample code and further - * information - */ -public final class Image extends Resource implements Drawable { - - /** - * specifies whether the receiver is a bitmap or an icon (one of - * SWT.BITMAP, SWT.ICON) - */ - private int type = SWT.BITMAP; - - private int transparentPixel = -1; - - /** - * The GC the image is currently selected in. - */ - private GC memGC; - - /** - * The global alpha value to be used for every pixel. - */ - private int alpha = -1; - - private boolean hasMask = false; - - //private QImage image; - private QIcon icon; - private QPixmap pixmap; - - Image(Device device) { - super(device); - } - - /** - * Constructs an empty instance of this class with the specified width and - * height. The result may be drawn upon by creating a GC and using any of - * its drawing operations, as shown in the following example: - * - *
    -	 * Image i = new Image(device, width, height);
    -	 * GC gc = new GC(i);
    -	 * gc.drawRectangle(0, 0, 50, 50);
    -	 * gc.dispose();
    -	 * 
    - *

    - * Note: Some platforms may have a limitation on the size of image that can - * be created (size depends on width, height, and depth). For example, - * Windows 95, 98, and ME do not allow images larger than 16M. - *

    - * - * @param device - * the device on which to create the image - * @param width - * the width of the new image - * @param height - * the height of the new image - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
    • - *
    • ERROR_INVALID_ARGUMENT - if either the width or height - * is negative or zero
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * image creation
    • - *
    - */ - public Image(Device device, int width, int height) { - super(device); - init(width, height); - init(); - } - - /** - * Constructs a new instance of this class based on the provided image, with - * an appearance that varies depending on the value of the flag. The - * possible flag values are: - *
    - *
    {@link SWT#IMAGE_COPY}
    - *
    the result is an identical copy of srcImage
    - *
    {@link SWT#IMAGE_DISABLE}
    - *
    the result is a copy of srcImage which has a disabled look
    - *
    {@link SWT#IMAGE_GRAY}
    - *
    the result is a copy of srcImage which has a gray scale look - *
    - *
    - * - * @param device - * the device on which to create the image - * @param srcImage - * the image to use as the source - * @param flag - * the style, either IMAGE_COPY, - * IMAGE_DISABLE or IMAGE_GRAY - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
    • - *
    • ERROR_NULL_ARGUMENT - if srcImage is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the flag is not one of - * IMAGE_COPY, IMAGE_DISABLE or - * IMAGE_GRAY
    • - *
    • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_INVALID_IMAGE - if the image is not a bitmap or - * an icon, or is otherwise in an invalid state
    • - *
    • ERROR_UNSUPPORTED_DEPTH - if the depth of the image is - * not supported
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * image creation
    • - *
    - */ - public Image(Device device, Image srcImage, int flag) { - super(device); - if (srcImage == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (srcImage.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - device = this.device; - this.type = srcImage.type; - switch (flag) { - case SWT.IMAGE_COPY: - this.pixmap = new QPixmap(srcImage.pixmap); - break; - case SWT.IMAGE_DISABLE: - this.pixmap = createDisabledImage(srcImage); - break; - case SWT.IMAGE_GRAY: - this.pixmap = createGrayImage(srcImage); - break; - default: - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - init(); - } - - /** - * Constructs an empty instance of this class with the width and height of - * the specified rectangle. The result may be drawn upon by creating a GC - * and using any of its drawing operations, as shown in the following - * example: - * - *
    -	 * Image i = new Image(device, boundsRectangle);
    -	 * GC gc = new GC(i);
    -	 * gc.drawRectangle(0, 0, 50, 50);
    -	 * gc.dispose();
    -	 * 
    - *

    - * Note: Some platforms may have a limitation on the size of image that can - * be created (size depends on width, height, and depth). For example, - * Windows 95, 98, and ME do not allow images larger than 16M. - *

    - * - * @param device - * the device on which to create the image - * @param bounds - * a rectangle specifying the image's width and height (must not - * be null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
    • - *
    • ERROR_NULL_ARGUMENT - if the bounds rectangle is null
    • - *
    • ERROR_INVALID_ARGUMENT - if either the rectangle's - * width or height is negative
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * image creation
    • - *
    - */ - public Image(Device device, Rectangle bounds) { - super(device); - if (bounds == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - init(bounds.width, bounds.height); - init(); - } - - /** - * Constructs an instance of this class from the given - * ImageData. - * - * @param device - * the device on which to create the image - * @param data - * the image data to create the image from (must not be null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
    • - *
    • ERROR_NULL_ARGUMENT - if the image data is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_UNSUPPORTED_DEPTH - if the depth of the - * ImageData is not supported
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * image creation
    • - *
    - */ - public Image(Device device, ImageData data) { - super(device); - init(data); - init(); - } - - /** - * Constructs an instance of this class, whose type is SWT.ICON - * , from the two given ImageData objects. The two images must - * be the same size. Pixel transparency in either image will be ignored. - *

    - * The mask image should contain white wherever the icon is to be visible, - * and black wherever the icon is to be transparent. In addition, the source - * image should contain black wherever the icon is to be transparent. - *

    - * - * @param device - * the device on which to create the icon - * @param source - * the color data for the icon - * @param mask - * the mask data for the icon - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
    • - *
    • ERROR_NULL_ARGUMENT - if either the source or mask is - * null
    • - *
    • ERROR_INVALID_ARGUMENT - if source and mask are - * different sizes
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * image creation
    • - *
    - */ - public Image(Device device, ImageData source, ImageData mask) { - super(device); - if (source == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (mask == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (source.width != mask.width || source.height != mask.height) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - mask = ImageData.convertMask(mask); - ImageData image = new ImageData(source.width, source.height, source.depth, source.palette, source.scanlinePad, - source.data); - image.maskPad = mask.scanlinePad; - image.maskData = mask.data; - init(image); - } - - /** - * Constructs an instance of this class by loading its representation from - * the specified input stream. Throws an error if an error occurs while - * loading the image, or if the result is an image of an unsupported type. - * Application code is still responsible for closing the input stream. - *

    - * This constructor is provided for convenience when loading a single image - * only. If the stream contains multiple images, only the first one will be - * loaded. To load multiple images, use ImageLoader.load(). - *

    - *

    - * This constructor may be used to load a resource as follows: - *

    - * - *
    -	 * static Image loadImage(Display display, Class clazz, String string) {
    -	 * 	InputStream stream = clazz.getResourceAsStream(string);
    -	 * 	if (stream == null)
    -	 * 		return null;
    -	 * 	Image image = null;
    -	 * 	try {
    -	 * 		image = new Image(display, stream);
    -	 * 	} catch (SWTException ex) {
    -	 * 	} finally {
    -	 * 		try {
    -	 * 			stream.close();
    -	 * 		} catch (IOException ex) {
    -	 * 		}
    -	 * 	}
    -	 * 	return image;
    -	 * }
    -	 * 
    - * - * @param device - * the device on which to create the image - * @param stream - * the input stream to load the image from - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
    • - *
    • ERROR_NULL_ARGUMENT - if the stream is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_IO - if an IO error occurs while reading from - * the stream
    • - *
    • ERROR_INVALID_IMAGE - if the image stream contains - * invalid data
    • - *
    • ERROR_UNSUPPORTED_DEPTH - if the image stream - * describes an image with an unsupported depth
    • - *
    • ERROR_UNSUPPORTED_FORMAT - if the image stream - * contains an unrecognized format
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * image creation
    • - *
    - */ - public Image(Device device, InputStream stream) { - super(device); - init(new ImageData(stream)); - init(); - } - - /** - * Constructs an instance of this class by loading its representation from - * the file with the specified name. Throws an error if an error occurs - * while loading the image, or if the result is an image of an unsupported - * type. - *

    - * This constructor is provided for convenience when loading a single image - * only. If the specified file contains multiple images, only the first one - * will be used. - * - * @param device - * the device on which to create the image - * @param filename - * the name of the file to load the image from - * - * @exception IllegalArgumentException - *

      - *
    • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
    • ERROR_NULL_ARGUMENT - if the - * file name is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_IO - if an IO error occurs while reading from - * the file
    • ERROR_INVALID_IMAGE - if the image file - * contains invalid data
    • ERROR_UNSUPPORTED_DEPTH - - * if the image file describes an image with an unsupported - * depth
    • ERROR_UNSUPPORTED_FORMAT - if the image - * file contains an unrecognized format
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * image creation
    • - *
    - */ - public Image(Device device, String filename) { - super(device); - if (filename == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - initNative(filename); - if (this.pixmap == null) { - init(new ImageData(filename)); - } - init(); - } - - void init(int width, int height) { - if (width <= 0 || height <= 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - this.type = SWT.BITMAP; - pixmap = new QPixmap(width, height); //, Format.Format_ARGB32 - } - - void init(ImageData imageData) { - if (imageData == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - - this.type = SWT.BITMAP; - - Format format = getImageFormat(imageData); - byte[] buffer = imageData2RawData(imageData, format); - QImage image = new QImage(buffer, imageData.width, imageData.height, format); - - if (imageData.colorTable != null) { - image.setColorTable(imageData.colorTable); - } - - if (imageData.maskData != null) { - hasMask = true; - } - updateAlphaChannel(image, imageData); - - pixmap = QPixmap.fromImage(image); - - try { - this.transparentPixel = getTransparentPixel(imageData); - } catch (Error e) { - pixmap = null; - throw e; - } - } - - private Format getImageFormat(ImageData imageData) { - switch (imageData.depth) { - case 32: - return Format.Format_ARGB32; - case 24: - return Format.Format_RGB888; - case 16: - return Format.Format_RGB16; - case 8: - case 4: - return Format.Format_Indexed8; - case 1: - return Format.Format_Mono; - default: - throw new RuntimeException("invalid color depth"); //$NON-NLS-1$ - } - } - - private void updateAlphaChannel(QImage image, ImageData imageData) { - Format format = null; - byte[] data = null; - if (imageData.maskData != null) { - // Mask data is 1 bit/pixel - data = imageData.maskData; - format = Format.Format_Mono; - } else if (imageData.alpha != -1) { - data = new byte[image.width() * image.height()]; - Arrays.fill(data, (byte) alpha); - format = Format.Format_Indexed8; - } else if (imageData.alphaData != null) { - data = imageData.alphaData; - format = Format.Format_Indexed8; - } - if (data != null) { - QImage alpha = new QImage(data, imageData.width, imageData.height, format); - image.setAlphaChannel(alpha); - } - } - - private byte[] imageData2RawData(ImageData image, Format format) { - PaletteData palette = image.palette; - if (!((image.depth == 1 || image.depth == 2 || image.depth == 4 || image.depth == 8) && !palette.isDirect - || image.depth == 8 || (image.depth == 16 || image.depth == 24 || image.depth == 32) - && palette.isDirect)) { - SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH); - } - - byte[] buffer = image.data; - if (format.equals(Format.Format_RGB888)) { - // swap red and blue bytes - for (int i = 0; i < buffer.length - 2; i += 3) { - byte tmp = buffer[i + 2]; - buffer[i + 2] = buffer[i]; - buffer[i] = tmp; - } - } - - return buffer; - } - - private int getTransparentPixel(ImageData image) { - if (image.transparentPixel != -1) { - PaletteData palette = image.palette; - RGB rgb = null; - if (palette.isDirect) { - rgb = palette.getRGB(image.transparentPixel); - } else { - if (image.transparentPixel < palette.colors.length) { - rgb = palette.getRGB(image.transparentPixel); - } - } - - if (rgb != null) { - return rgb.red << 24 | rgb.green << 16 | rgb.blue << 8 | 0xFF; - } - } - return -1; - } - - void initNative(String filename) { - if (filename.toLowerCase().endsWith(".ico")) { //$NON-NLS-1$ - this.type = SWT.ICON; - icon = new QIcon(filename); - } else { - this.type = SWT.BITMAP; - pixmap = new QPixmap(filename); - } - } - - private QPixmap createGrayImage(Image srcImage) { - return srcImage.getQPixmap(); //.convertToFormat(Format.Format_Indexed8, ImageConversionFlag.ThresholdDither); - } - - private QPixmap createDisabledImage(Image srcImage) { - // TODO the same as gray? - return createGrayImage(srcImage); - } - - private QImage getQImage() { - return pixmap.toImage(); - } - - public QIcon getQIcon() { - // fallback strategy if image is a bitmap - if (icon == null) { - icon = new QIcon(getQPixmap()); - } - return icon; - } - - public QPixmap getQPixmap() { - // if (pixmap == null) { - // if (image != null) { - // pixmap = QPixmap.fromImage(image); - // } else if (icon != null) { - // pixmap = icon.pixmap(getDefaultIconSize()); - // } - // } - return pixmap; - } - - public QSize getDefaultIconSize() { - List sizes = getQIcon().availableSizes(); - if (sizes.isEmpty()) { - return new QSize(); - } - return sizes.get(0); - } - - public boolean isIcon() { - return type == SWT.ICON; - } - - public boolean isBitmap() { - return type == SWT.BITMAP; - } - - @Override - void destroy() { - if (memGC != null) { - memGC.dispose(); - memGC = null; - } - // image = null; - // icon = null; - pixmap = null; - } - - /** - * Compares the argument to the receiver, and returns true if they represent - * the same object using a class specific comparison. - * - * @param object - * the object to compare with this object - * @return true if the object is the same as this object and - * false otherwise - * - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - if (object == this) { - return true; - } - if (!(object instanceof Image)) { - return false; - } - Image other = (Image) object; - return device == other.device && pixmap == other.pixmap && transparentPixel == other.transparentPixel; - } - - /** - * Returns the color to which to map the transparent pixel, or null if the - * receiver has no transparent pixel. - *

    - * There are certain uses of Images that do not support transparency (for - * example, setting an image into a button or label). In these cases, it may - * be desired to simulate transparency by using the background color of the - * widget to paint the transparent pixels of the image. Use this method to - * check which color will be used in these cases in place of transparency. - * This value may be set with setBackground(). - *

    - * - * @return the background color of the image, or null if there is no - * transparency in the image - * - * @exception SWTException - *

      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Color getBackground() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (transparentPixel == -1) { - return null; - } - int red = transparentPixel >> 16 & 0xFF; - int green = transparentPixel >> 8 & 0xFF; - int blue = transparentPixel >> 0 & 0xFF; - return new Color(device, red, green, blue); - } - - /** - * Returns the bounds of the receiver. The rectangle will always have x and - * y values of 0, and the width and height of the image. - * - * @return a rectangle specifying the image's bounds - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_INVALID_IMAGE - if the image is not a bitmap or - * an icon
    • - *
    - */ - public Rectangle getBounds() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - return new Rectangle(0, 0, pixmap.width(), pixmap.height()); - } - - /** - * Returns an ImageData based on the receiver Modifications - * made to this ImageData will not affect the Image. - * - * @return an ImageData containing the image's data and - * attributes - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_INVALID_IMAGE - if the image is not a bitmap or - * an icon
    • - *
    - * - * @see ImageData - */ - public ImageData getImageData() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - - QImage image = getQImage(); - - PaletteData palette = new PaletteData(0x00FF0000, 0x00FF00, 0x00FF); - ImageData imageData = new ImageData(image.width(), image.height(), image.depth(), palette, 4, image - .copyOfBytes()); - imageData.bytesPerLine = image.bytesPerLine(); - imageData.transparentPixel = -1; - imageData.alpha = alpha; - imageData.alphaData = getAlphaData(image); - - if (image.numColors() > 0) { - List colorTable = image.colorTable(); - imageData.colorTable = colorTable; - } - - return imageData; - } - - private byte[] getAlphaData(QImage image) { - if (hasMask) { - // Mask data is 1 bit/pixel - if (image.hasAlphaChannel()) { - QImage alpha = image.alphaChannel(); - alpha.convertToFormat(Format.Format_Mono); - return alpha.copyOfBytes(); - } else { - int maskSize = image.width() * image.height() / 8; - byte[] alphaData = new byte[maskSize]; - Arrays.fill(alphaData, (byte) 0xFF); - return alphaData; - //imageData.maskPad = 8; - } - } else if (alpha != -1) { - byte[] alphaData = new byte[image.width() * image.height()]; - Arrays.fill(alphaData, (byte) alpha); - return alphaData; - } else if (image.hasAlphaChannel()) { - QImage alpha = image.alphaChannel(); - return alpha.copyOfBytes(); - } - return null; - } - - public static Image qt_new(Display device, int type, QIcon qIcon) { - Image image = new Image(device); - image.type = type; - image.icon = qIcon; - return image; - } - - /** - * Returns an integer hash code for the receiver. Any two objects that - * return true when passed to equals must return - * the same value for this method. - * - * @return the receiver's hash - * - * @see #equals - */ - @Override - public int hashCode() { - return pixmap != null ? (int) pixmap.hashCode() : 0; - } - - /** - * Invokes platform specific functionality to allocate a new GC handle. - *

    - * IMPORTANT: This method is not part of the public API for - * Image. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

    - * - * @param data - * the platform specific GC data - * @return the platform specific GC handle - */ - public QPaintDeviceInterface internal_new_GC(GCData data) { - data.backgroundColor = getBackground(); - data.device = device; - return pixmap; - } - - /** - * Invokes platform specific functionality to dispose a GC handle. - *

    - * IMPORTANT: This method is not part of the public API for - * Image. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

    - * - * @param hDC - * the platform specific GC handle - * @param data - * the platform specific GC data - */ - public void internal_dispose_GC(QPaintDeviceInterface paintDevice, GCData data) { - } - - /** - * Returns true if the image has been disposed, and - * false otherwise. - *

    - * This method gets the dispose state for the image. When an image has been - * disposed, it is an error to invoke any other method using the image. - * - * @return true when the image is disposed and - * false otherwise - */ - @Override - public boolean isDisposed() { - return pixmap == null && icon == null; - } - - /** - * Sets the color to which to map the transparent pixel. - *

    - * There are certain uses of Images that do not support - * transparency (for example, setting an image into a button or label). In - * these cases, it may be desired to simulate transparency by using the - * background color of the widget to paint the transparent pixels of the - * image. This method specifies the color that will be used in these cases. - * For example: - * - *

    -	 * Button b = new Button();
    -	 * image.setBackground(b.getBackground());
    -	 * b.setImage(image);
    -	 * 
    - * - *

    - *

    - * The image may be modified by this operation (in effect, the transparent - * regions may be filled with the supplied color). Hence this operation is - * not reversible and it is not legal to call this function twice or with a - * null argument. - *

    - *

    - * This method has no effect if the receiver does not have a transparent - * pixel value. - *

    - * - * @param color - * the color to use when a transparent pixel is specified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the color is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the color has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void setBackground(Color color) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (color == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (transparentPixel == -1) { - return; - } - return; // TODO function disabled - // byte red = (byte) ((transparentPixel >> 16) & 0xFF); - // byte green = (byte) ((transparentPixel >> 8) & 0xFF); - // byte blue = (byte) ((transparentPixel >> 0) & 0xFF); - // byte newRed = (byte) ((int) (color.handle[0] * 255) & 0xFF); - // byte newGreen = (byte) ((int) (color.handle[1] * 255) & 0xFF); - // byte newBlue = (byte) ((int) (color.handle[2] * 255) & 0xFF); - // NSBitmapImageRep imageRep = getRepresentation(); - // long /* int */bpr = imageRep.bytesPerRow(); - // long /* int */data = imageRep.bitmapData(); - // byte[] line = new byte[(int) bpr]; - // for (int i = 0, offset = 0; i < height; i++, offset += bpr) { - // OS.memmove(line, data + offset, bpr); - // for (int j = 0; j < line.length; j += 4) { - // if (line[j + 1] == red && line[j + 2] == green - // && line[j + 3] == blue) { - // line[j + 1] = newRed; - // line[j + 2] = newGreen; - // line[j + 3] = newBlue; - // } - // } - // OS.memmove(data + offset, line, bpr); - // } - // transparentPixel = (newRed & 0xFF) << 16 | (newGreen & 0xFF) << 8 - // | (newBlue & 0xFF); - } - - /** - * Returns a string containing a concise, human-readable description of the - * receiver. - * - * @return a string representation of the receiver - */ - @Override - public String toString() { - if (isDisposed()) { - return "Image {*DISPOSED*}"; //$NON-NLS-1$ - } - return "Image {pixmap: " + pixmap + ", icon: " + icon + " }"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - public void setMemGC(GC gc) { - this.memGC = gc; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Region.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Region.java deleted file mode 100644 index 23c2ec90e0..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Region.java +++ /dev/null @@ -1,776 +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.graphics; - -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.QRect; -import com.trolltech.qt.gui.QRegion; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class represent areas of an x-y coordinate system that are - * aggregates of the areas covered by a number of polygons. - *

    - * Application code must explicitly invoke the Region.dispose() - * method to release the operating system resources managed by each instance - * when those instances are no longer required. - *

    - * - * @see SWT Example: - * GraphicsExample - * @see Sample code and further - * information - */ - -public final class Region extends Resource { - - /** - * the OS resource for the region (Warning: This field is platform - * dependent) - *

    - * IMPORTANT: This field is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms and should never be - * accessed from application code. - *

    - */ - private QRegion region; - - /** - * Constructs a new empty region. - * - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * region creation
    • - *
    - */ - public Region() { - this(null); - } - - /** - * Constructs a new empty region. - *

    - * You must dispose the region when it is no longer required. - *

    - * - * @param device - * the device on which to allocate the region - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if device is null and there is - * no current device
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * region creation
    • - *
    - * - * @see #dispose - * - * @since 3.0 - */ - public Region(Device device) { - super(device); - region = new QRegion(); - init(); - } - - /** - * Constructs a new region given a handle to the operating system resources - * that it should represent. - * - * @param handle - * the handle for the result - */ - Region(Device device, QRegion region) { - super(device); - this.region = region; - } - - QRegion getQRegion() { - return region; - } - - /** - * Adds the given polygon to the collection of polygons the receiver - * maintains to describe its area. - * - * @param pointArray - * points that describe the polygon to merge with the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - * - */ - public void add(int[] pointArray) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (pointArray == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - QRegion rg = new QRegion(GC.createPolygonFromArray(pointArray)); - region = region.united(rg); - } - - /** - * Adds the given rectangle to the collection of polygons the receiver - * maintains to describe its area. - * - * @param rect - * the rectangle to merge with the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the rectangle's width or - * height is negative
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void add(Rectangle rect) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (rect == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - region = region.unite(QtSWTConverter.convert(rect)); - } - - /** - * Adds the given rectangle to the collection of polygons the receiver - * maintains to describe its area. - * - * @param x - * the x coordinate of the rectangle - * @param y - * the y coordinate of the rectangle - * @param width - * the width coordinate of the rectangle - * @param height - * the height coordinate of the rectangle - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the rectangle's width or - * height is negative
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void add(int x, int y, int width, int height) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (width < 0 || height < 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - region = region.united(new QRect(x, y, width, height)); - } - - /** - * Adds all of the polygons which make up the area covered by the argument - * to the collection of polygons the receiver maintains to describe its - * area. - * - * @param region - * the region to merge - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void add(Region region) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (region == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (region.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - this.region = this.region.united(region.getQRegion()); - } - - /** - * Returns true if the point specified by the arguments is - * inside the area specified by the receiver, and false - * otherwise. - * - * @param x - * the x coordinate of the point to test for containment - * @param y - * the y coordinate of the point to test for containment - * @return true if the region contains the point and - * false otherwise - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public boolean contains(int x, int y) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return region.contains(new QPoint(x, y)); - } - - /** - * Returns true if the given point is inside the area specified - * by the receiver, and false otherwise. - * - * @param pt - * the point to test for containment - * @return true if the region contains the point and - * false otherwise - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public boolean contains(Point pt) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (pt == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - return region.contains(QtSWTConverter.convert(pt)); - } - - @Override - void destroy() { - region = null; - } - - /** - * Compares the argument to the receiver, and returns true if they represent - * the same object using a class specific comparison. - * - * @param object - * the object to compare with this object - * @return true if the object is the same as this object and - * false otherwise - * - * @see #hashCode - */ - @Override - public boolean equals(Object object) { - if (this == object) { - return true; - } - if (!(object instanceof Region)) { - return false; - } - return region.equals(((Region) object).getQRegion()); - } - - /** - * Returns a rectangle which represents the rectangular union of the - * collection of polygons the receiver maintains to describe its area. - * - * @return a bounding rectangle for the region - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Rectangle#union - */ - public Rectangle getBounds() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return QtSWTConverter.convert(region.boundingRect()); - } - - /** - * Returns an integer hash code for the receiver. Any two objects that - * return true when passed to equals must return - * the same value for this method. - * - * @return the receiver's hash - * - * @see #equals - */ - @Override - public int hashCode() { - return region.hashCode(); - } - - /** - * Intersects the given rectangle to the collection of polygons the receiver - * maintains to describe its area. - * - * @param rect - * the rectangle to intersect with the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the rectangle's width or - * height is negative
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public void intersect(Rectangle rect) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (rect == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - intersect(rect.x, rect.y, rect.width, rect.height); - } - - /** - * Intersects the given rectangle to the collection of polygons the receiver - * maintains to describe its area. - * - * @param x - * the x coordinate of the rectangle - * @param y - * the y coordinate of the rectangle - * @param width - * the width coordinate of the rectangle - * @param height - * the height coordinate of the rectangle - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the rectangle's width or - * height is negative
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void intersect(int x, int y, int width, int height) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (width < 0 || height < 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - region = region.intersect(new QRect(x, y, width, height)); - } - - /** - * Intersects all of the polygons which make up the area covered by the - * argument to the collection of polygons the receiver maintains to describe - * its area. - * - * @param region - * the region to intersect - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public void intersect(Region region) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (region == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (region.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - this.region = this.region.intersected(region.getQRegion()); - } - - /** - * Returns true if the rectangle described by the arguments - * intersects with any of the polygons the receiver maintains to describe - * its area, and false otherwise. - * - * @param x - * the x coordinate of the origin of the rectangle - * @param y - * the y coordinate of the origin of the rectangle - * @param width - * the width of the rectangle - * @param height - * the height of the rectangle - * @return true if the rectangle intersects with the receiver, - * and false otherwise - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Rectangle#intersects(Rectangle) - */ - public boolean intersects(int x, int y, int width, int height) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return region.intersects(new QRect(x, y, width, height)); - } - - /** - * Returns true if the given rectangle intersects with any of - * the polygons the receiver maintains to describe its area and - * false otherwise. - * - * @param rect - * the rectangle to test for intersection - * @return true if the rectangle intersects with the receiver, - * and false otherwise - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Rectangle#intersects(Rectangle) - */ - public boolean intersects(Rectangle rect) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (rect == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - return intersects(rect.x, rect.y, rect.width, rect.height); - } - - /** - * Returns true if the region has been disposed, and - * false otherwise. - *

    - * This method gets the dispose state for the region. When a region has been - * disposed, it is an error to invoke any other method using the region. - * - * @return true when the region is disposed, and - * false otherwise - */ - @Override - public boolean isDisposed() { - return region == null; - } - - /** - * Returns true if the receiver does not cover any area in the - * (x, y) coordinate plane, and false if the receiver does - * cover some area in the plane. - * - * @return true if the receiver is empty, and - * false otherwise - * - * @exception SWTException - *

      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public boolean isEmpty() { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - return region.isEmpty(); - } - - /** - * Subtracts the given polygon from the collection of polygons the receiver - * maintains to describe its area. - * - * @param pointArray - * points that describe the polygon to merge with the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public void subtract(int[] pointArray) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (pointArray == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - QRegion rg = new QRegion(GC.createPolygonFromArray(pointArray)); - region = region.subtracted(rg); - } - - /** - * Subtracts the given rectangle from the collection of polygons the - * receiver maintains to describe its area. - * - * @param rect - * the rectangle to subtract from the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the rectangle's width or - * height is negative
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public void subtract(Rectangle rect) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (rect == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - subtract(rect.x, rect.y, rect.width, rect.height); - } - - /** - * Subtracts the given rectangle from the collection of polygons the - * receiver maintains to describe its area. - * - * @param x - * the x coordinate of the rectangle - * @param y - * the y coordinate of the rectangle - * @param width - * the width coordinate of the rectangle - * @param height - * the height coordinate of the rectangle - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the rectangle's width or - * height is negative
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void subtract(int x, int y, int width, int height) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (width < 0 || height < 0) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - region = region.subtracted(new QRegion(x, y, width, height)); - } - - /** - * Subtracts all of the polygons which make up the area covered by the - * argument from the collection of polygons the receiver maintains to - * describe its area. - * - * @param region - * the region to subtract - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public void subtract(Region region) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (region == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (region.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - this.region = this.region.subtracted(region.getQRegion()); - } - - /** - * Translate all of the polygons the receiver maintains to describe its area - * by the specified point. - * - * @param x - * the x coordinate of the point to translate - * @param y - * the y coordinate of the point to translate - * - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void translate(int x, int y) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - region = region.translated(x, y); - } - - /** - * Translate all of the polygons the receiver maintains to describe its area - * by the specified point. - * - * @param pt - * the point to translate - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the argument is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_GRAPHIC_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.1 - */ - public void translate(Point pt) { - if (isDisposed()) { - SWT.error(SWT.ERROR_GRAPHIC_DISPOSED); - } - if (pt == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - translate(pt.x, pt.y); - } - - /** - * Returns a string containing a concise, human-readable description of the - * receiver. - * - * @return a string representation of the receiver - */ - @Override - public String toString() { - if (isDisposed()) { - return "Region {*DISPOSED*}"; //$NON-NLS-1$ - } - return "Region {" + region + "}"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - /** - * Invokes platform specific functionality to allocate a new region. - *

    - * IMPORTANT: This method is not part of the public API for - * Region. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

    - * - * @param device - * the device on which to allocate the region - * @param handle - * the handle for the region - * @return a new region object containing the specified device and handle - */ - public static Region win32_new(Device device, QRegion region) { - return new Region(device, region); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/DragNDropListener.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/DragNDropListener.java deleted file mode 100644 index 2850edc6d3..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/DragNDropListener.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.qt; - -import com.trolltech.qt.gui.QDragEnterEvent; -import com.trolltech.qt.gui.QDragLeaveEvent; -import com.trolltech.qt.gui.QDragMoveEvent; -import com.trolltech.qt.gui.QDropEvent; - -public interface DragNDropListener { - - public void dragEnter(QDragEnterEvent event); - - public void dragLeave(QDragLeaveEvent event); - - public void dragMove(QDragMoveEvent event); - - public void drop(QDropEvent event); - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/FontConverter.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/FontConverter.java deleted file mode 100644 index cd042cf785..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/FontConverter.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.qt; - -import java.util.LinkedList; -import java.util.List; - -import com.trolltech.qt.gui.QFont; -import com.trolltech.qt.gui.QFont.Weight; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Font; - -/** - * @author kriese - * - */ -public class FontConverter { - - private List fontNames; - private List fontStyles; - - public FontConverter() { - fontNames = new LinkedList(); - fontNames.add(new FontNameTuple("Arial", "Times")); //$NON-NLS-1$ //$NON-NLS-2$ - - fontStyles = new LinkedList(); - fontStyles.add(new FontStyleTuple(SWT.BOLD, QFont.Weight.Bold)); - fontStyles.add(new FontStyleTuple(SWT.NORMAL, QFont.Weight.Normal)); - } - - public QFont getQtFont(Font swtFont) { - - FontNameTuple tuple = null; - for (FontNameTuple f : fontNames) { - if (f.getSwtFontName().equals(swtFont.getFontData()[0].getName())) { - tuple = f; - } - } - - // swtFont.getFontData()[0].get - - FontStyleTuple style = null; - for (FontStyleTuple s : fontStyles) { - if (s.getSwtStyle() == swtFont.getFontData()[0].getStyle()) { - style = s; - } - } - - if (null != tuple) { - - if (null != style) { - return new QFont(tuple.getQtFontName(), swtFont.getFontData()[0].getHeight(), style.getQtStyle() - .value()); - } - - return new QFont(tuple.getQtFontName(), swtFont.getFontData()[0].getHeight()); - } - - return null; - } - - private static class FontStyleTuple { - private QFont.Weight qtStyle; - private int swtStyle; - - public FontStyleTuple(int swtStyle, Weight qtStyle) { - super(); - this.qtStyle = qtStyle; - this.swtStyle = swtStyle; - } - - public QFont.Weight getQtStyle() { - return qtStyle; - } - - public int getSwtStyle() { - return swtStyle; - } - } - - private static class FontNameTuple { - private String swtFontName; - private String qtFontName; - - public FontNameTuple(String swtFontName, String qtFontName) { - this.swtFontName = swtFontName; - this.qtFontName = qtFontName; - } - - public String getSwtFontName() { - return swtFontName; - } - - public String getQtFontName() { - return qtFontName; - } - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/KeyUtil.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/KeyUtil.java deleted file mode 100644 index 9d25fa7a1f..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/KeyUtil.java +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.qt; - -import com.trolltech.qt.core.Qt.Key; -import com.trolltech.qt.core.Qt.KeyboardModifier; -import com.trolltech.qt.core.Qt.KeyboardModifiers; -import com.trolltech.qt.gui.QKeyEvent; - -import org.eclipse.swt.SWT; - -/** - * Helper class for Key translation SWT <-> Qt - */ -public class KeyUtil { - /* Key Mappings */ - private static final int[][] KeyTable = { - /* Keyboard and Mouse Masks */ - { Key.Key_Alt.value(), SWT.ALT }, { Key.Key_AltGr.value(), SWT.ALT }, { Key.Key_Meta.value(), SWT.ALT }, - { Key.Key_Shift.value(), SWT.SHIFT }, { Key.Key_Control.value(), SWT.CONTROL }, - /* Non-Numeric Keypad Keys */ - { Key.Key_Up.value(), SWT.ARROW_UP }, { Key.Key_Down.value(), SWT.ARROW_DOWN }, - { Key.Key_Left.value(), SWT.ARROW_LEFT }, { Key.Key_Right.value(), SWT.ARROW_RIGHT }, - { Key.Key_PageUp.value(), SWT.PAGE_UP }, { Key.Key_PageDown.value(), SWT.PAGE_DOWN }, - { Key.Key_Home.value(), SWT.HOME }, { Key.Key_End.value(), SWT.END }, - { Key.Key_Insert.value(), SWT.INSERT }, - /* Virtual and Ascii Keys */ - { Key.Key_Space.value(), ' ' }, { Key.Key_Backspace.value(), SWT.BS }, { Key.Key_Return.value(), SWT.CR }, - { Key.Key_Delete.value(), SWT.DEL }, { Key.Key_Escape.value(), SWT.ESC }, - { Key.Key_Enter.value(), SWT.CR }, { Key.Key_Tab.value(), SWT.TAB }, { Key.Key_Backtab.value(), SWT.TAB }, - /* Functions Keys */ - { Key.Key_F1.value(), SWT.F1 }, { Key.Key_F2.value(), SWT.F2 }, { Key.Key_F3.value(), SWT.F3 }, - { Key.Key_F4.value(), SWT.F4 }, { Key.Key_F5.value(), SWT.F5 }, { Key.Key_F6.value(), SWT.F6 }, - { Key.Key_F7.value(), SWT.F7 }, { Key.Key_F8.value(), SWT.F8 }, { Key.Key_F9.value(), SWT.F9 }, - { Key.Key_F10.value(), SWT.F10 }, { Key.Key_F11.value(), SWT.F11 }, { Key.Key_F12.value(), SWT.F12 }, - { Key.Key_F13.value(), SWT.F13 }, { Key.Key_F14.value(), SWT.F14 }, { Key.Key_F15.value(), SWT.F15 }, - /* Other keys */ - { Key.Key_CapsLock.value(), SWT.CAPS_LOCK }, { Key.Key_NumLock.value(), SWT.NUM_LOCK }, - { Key.Key_ScrollLock.value(), SWT.SCROLL_LOCK }, { Key.Key_Pause.value(), SWT.PAUSE }, - { Key.Key_Print.value(), SWT.PRINT_SCREEN }, { Key.Key_Help.value(), SWT.HELP }, - - }; - - private static final int[][] KeyPadKeyTable = { - /* Numeric Keypad Keys */ - { Key.Key_Asterisk.value(), SWT.KEYPAD_MULTIPLY }, { Key.Key_Plus.value(), SWT.KEYPAD_ADD }, - { Key.Key_Enter.value(), SWT.KEYPAD_CR }, { Key.Key_Minus.value(), SWT.KEYPAD_SUBTRACT }, - { Key.Key_Period.value(), SWT.KEYPAD_DECIMAL }, { Key.Key_Slash.value(), SWT.KEYPAD_DIVIDE }, - { Key.Key_0.value(), SWT.KEYPAD_0 }, { Key.Key_1.value(), SWT.KEYPAD_1 }, - { Key.Key_2.value(), SWT.KEYPAD_2 }, { Key.Key_3.value(), SWT.KEYPAD_3 }, - { Key.Key_4.value(), SWT.KEYPAD_4 }, { Key.Key_5.value(), SWT.KEYPAD_5 }, - { Key.Key_6.value(), SWT.KEYPAD_6 }, { Key.Key_7.value(), SWT.KEYPAD_7 }, - { Key.Key_8.value(), SWT.KEYPAD_8 }, { Key.Key_9.value(), SWT.KEYPAD_9 }, - { Key.Key_Equal.value(), SWT.KEYPAD_EQUAL }, }; - - private KeyUtil() { - // utility class - } - - public static int translateKey(int key) { - for (int i = 0; i < KeyTable.length; i++) { - if (KeyTable[i][0] == key) { - return KeyTable[i][1]; - } - } - return 0; - } - - public static int untranslateKey(int key) { - for (int i = 0; i < KeyTable.length; i++) { - if (KeyTable[i][1] == key) { - return KeyTable[i][0]; - } - } - return 0; - } - - // Converts keys from Qt to SWT - public static final int translateKey(QKeyEvent qEvent) { - int key = qEvent.key(); - boolean keypad = qEvent.modifiers().isSet(KeyboardModifier.KeypadModifier); - if (keypad) { - for (int i = 0; i < KeyPadKeyTable.length; i++) { - if (KeyPadKeyTable[i][0] == key) { - return KeyPadKeyTable[i][1]; - } - } - } - for (int i = 0; i < KeyTable.length; i++) { - if (KeyTable[i][0] == key) { - return KeyTable[i][1]; - } - } - return 0; - } - - // Converts modifiers from Qt to SWT - public static final int translateModifiers(KeyboardModifiers nativeModifiers) { - int modifiers = 0; - if (nativeModifiers.isSet(KeyboardModifier.AltModifier)) { - modifiers |= SWT.ALT; - } - if (nativeModifiers.isSet(KeyboardModifier.ShiftModifier)) { - modifiers |= SWT.SHIFT; - } - if (nativeModifiers.isSet(KeyboardModifier.ControlModifier)) { - modifiers |= SWT.CONTROL; - } - return modifiers; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSWTConverter.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSWTConverter.java deleted file mode 100644 index e67a631c38..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSWTConverter.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.qt; - -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.QRect; -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.gui.QColor; -import com.trolltech.qt.gui.QRegion; - -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.graphics.Region; - -/** - * @author J�rgen Becker - * - */ -public class QtSWTConverter { - - private QtSWTConverter() { - // utility class - } - - public static Rectangle convert(QRect rect) { - if (rect == null) { - return null; - } - return new Rectangle(rect.x(), rect.y(), rect.width(), rect.height()); - } - - public static QRect convert(Rectangle rect) { - if (rect == null) { - return null; - } - return new QRect(rect.x, rect.y, rect.width, rect.height); - } - - public static Point convert(QSize size) { - if (size == null) { - return null; - } - return new Point(size.width(), size.height()); - } - - public static Point convert(QPoint point) { - if (point == null) { - return null; - } - return new Point(point.x(), point.y()); - } - - public static Point convertPosition(QRect rect) { - if (rect == null) { - return null; - } - return new Point(rect.x(), rect.y()); - } - - public static Point convertSize(QRect rect) { - if (rect == null) { - return null; - } - return new Point(rect.width(), rect.height()); - } - - public static QPoint convert(Point point) { - if (point == null) { - return null; - } - return new QPoint(point.x, point.y); - } - - public static QColor convert(Color color) { - if (color == null) { - return null; - } - return new QColor(color.getRed(), color.getGreen(), color.getBlue()); - } - - public static Color convert(QColor color) { - if (color == null) { - return null; - } - return new Color(null, color.red(), color.green(), color.blue()); - } - - public static QRegion convert(Region region) { - if (region == null) { - return null; - } - return new QRegion(convert(region.getBounds())); - } - - public static Rectangle convert(QRegion region) { - if (region == null) { - return null; - } - return convert(region.boundingRect()); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSupplementaryFontData.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSupplementaryFontData.java deleted file mode 100644 index b7343e54d0..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSupplementaryFontData.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). - * 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: - * Nokia Corporation - initial implementation - * Compeople AG - QtJambi/Qt based implementation for Windows/Mac OS X/Linux - *******************************************************************************/ - -package org.eclipse.swt.internal.qt; - -import com.trolltech.qt.gui.QFont.Style; -import com.trolltech.qt.gui.QFont.StyleStrategy; - -public final class QtSupplementaryFontData { - public int underline = -1; - public int overline = -1; - public int strikeOut = -1; - public int stretch = -1; - public int fixedPitch = -1; - public Style style = null; - public int weight = -1; - public StyleStrategy styleStrategy = null; -} \ No newline at end of file diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SWQT.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SWQT.java deleted file mode 100644 index e1761859b4..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SWQT.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010s compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.qt; - -public class SWQT { - - /* Widget Event Constants */ - - /** - * The null event type (value is 0). - * - * @since 3.0 - */ - public static final int StyleSheetChange = 1024; - - /** - * - */ - public static final String STYLESHEET_KEY = "stylesheet"; //$NON-NLS-1$ - - // Qt QFont::Weight - public static final int QT_FONTNORMAL = 50; - public static final int QT_FONTBOLD = 75; - - // QFont::Style - public static final int QFONT_STYLE_NORMAL = 0; - public static final int QFONT_STYLE_ITALIC = 1; - public static final int QFONT_STYLE_OBLIQUE = 2; - - // QFont::StyleStrategy - public static final int QFONT_STYLESTRATEGY_PREFERDEFALUT = 0x0001; - public static final int QFONT_STYLESTRATEGY_PREFERBITMAP = 0x0002; - public static final int QFONT_STYLESTRATEGY_PREFERDEVICE = 0x0004; - public static final int QFONT_STYLESTRATEGY_PREFEROUTLINE = 0x0008; - public static final int QFONT_STYLESTRATEGY_FORCEOUTLINE = 0x0010; - public static final int QFONT_STYLESTRATEGY_NOANTIALIAS = 0x0100; - public static final int QFONT_STYLESTRATEGY_PREFERANTIALIAS = 0x0080; - public static final int QFONT_STYLESTRATEGY_OPENGLCOMPATIABLE = 0x0200; - public static final int QFONT_STYLESTRATEGY_NOFONTMERGING = 0x8000; - public static final int QFONT_STYLESTRATEGY_PREFERMATCH = 0x0020; - public static final int QFONT_STYLESTRATEGY_PREFERQUALITY = 0x0040; - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SignalConnector.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SignalConnector.java deleted file mode 100644 index 08414ac5ec..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SignalConnector.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.qt; - -import com.trolltech.qt.QSignalEmitter.AbstractSignal; - -/** - * A {@code SignalConnector} is the representation of a certain signal, - * receiver, method tuple. This tuple allows connecting and disconnecting from - * the signal - without the need of constantly repeating (error-prone) the - * necessary parameters. - */ -public class SignalConnector { - - private final AbstractSignal signal; - private final Object receiver; - private final String method; - - /** - * Create a {@code SignalConnector} from the given parameters. - * - * @param signal - * the signal - * @param receiver - * the receiver of the signal - * @param method - * the reveiver's method - */ - public SignalConnector(final AbstractSignal signal, final Object receiver, final String method) { - this.signal = signal; - this.receiver = receiver; - this.method = method; - } - - /** - * Connect the signal. - * - * @return this object. - */ - public SignalConnector connect() { - signal.connect(receiver, method); - return this; - } - - /** - * Disconnect the signal. - */ - public void disconnect() { - signal.disconnect(receiver, method); - } - - /** - * Run the given {@code Runnable} with disconnecting before and - * re-connection afterwards. - * - * @param runnable - */ - public void runDisconnected(final Runnable runnable) { - try { - disconnect(); - runnable.run(); - } finally { - connect(); - } - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/StylableScrollArea.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/StylableScrollArea.java deleted file mode 100644 index ef6bef9263..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/StylableScrollArea.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2009 compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.qt; - -import com.trolltech.qt.QtPropertyResetter; -import com.trolltech.qt.gui.QColor; -import com.trolltech.qt.gui.QScrollArea; - -public class StylableScrollArea extends QScrollArea { - private QColor gradientStart = new QColor(0, 0, 255); - private QColor gradientEnd = new QColor(0, 255, 0); - private QColor text = new QColor(0, 0, 0); - private QColor border = new QColor(255, 255, 255); - - public QColor getGradientStart() { - return gradientStart; - } - - public void setGradientStart(QColor gradientStart) { - this.gradientStart = gradientStart; - } - - @QtPropertyResetter(name = "gradientStart") - public void resetGradientStart() { - gradientStart = new QColor(0, 0, 255); - } - - public QColor getGradientEnd() { - return gradientEnd; - } - - public void setGradientEnd(QColor gradientEnd) { - this.gradientEnd = gradientEnd; - } - - public QColor getText() { - return text; - } - - public void setText(QColor text) { - this.text = text; - } - - public QColor getBorder() { - return border; - } - - public void setBorder(QColor border) { - this.border = border; - } - -} \ No newline at end of file diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/ToString.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/ToString.java deleted file mode 100644 index 288a2dfe22..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/ToString.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 compeople AG 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: - * compeople AG - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.internal.qt; - -import java.beans.BeanInfo; -import java.beans.IntrospectionException; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Method; - -/** - * Generic .toString() that collects all Java bean properties. - */ -public final class ToString { - - private static final String SEPARATOR = ", "; //$NON-NLS-1$ - - private ToString() { - - } - - /** - * Collect all Java bean properties of the given object and return them as a - * printable string. - * - * @param object - * @return toString() - */ - public static String of(Object object) { - if (object == null) { - return "NULL"; //$NON-NLS-1$ - } - try { - return of(object, Introspector.getBeanInfo(object.getClass())); - } catch (IntrospectionException e) { - return e.toString(); - } - } - - /** - * Collect all Java bean properties of the given object but stop - * introspection at the given stop class and return them as a printable - * string. - * - * @param object - * @param stopClass - * if {@code null} stop class will be the super class of the - * given object - * @return toString() - */ - public static String of(Object object, Class stopClass) { - if (object == null) { - return "NULL"; //$NON-NLS-1$ - } - if (stopClass == null) { - stopClass = object.getClass().getSuperclass(); - } - String result = object.toString() + " - "; //$NON-NLS-1$ - try { - result = result + of(object, Introspector.getBeanInfo(object.getClass(), stopClass)); - } catch (IntrospectionException e) { - result = result + e.toString(); - } - return result; - } - - @SuppressWarnings("nls") - private static String of(Object object, BeanInfo beanInfo) { - StringBuilder bob = new StringBuilder(object.getClass().getSimpleName()).append(" ("); - PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); - for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { - Method readMethod = propertyDescriptor.getReadMethod(); - try { - if (readMethod != null && !propertyDescriptor.getName().equals("class")) { - Object value = readMethod.invoke(object, (Object[]) null); - if (value != null && value.toString().startsWith(value.getClass().getName() + "@")) { - value = ".."; - } - bob.append(propertyDescriptor.getName()).append('=').append(value).append(SEPARATOR); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - if (bob.toString().endsWith(SEPARATOR)) { - bob.setLength(bob.length() - SEPARATOR.length()); - } - bob.append(" )"); - return bob.toString(); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Button.java deleted file mode 100644 index b3319910ac..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Button.java +++ /dev/null @@ -1,801 +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 com.trolltech.qt.core.Qt.CheckState; -import com.trolltech.qt.gui.QAbstractButton; -import com.trolltech.qt.gui.QApplication; -import com.trolltech.qt.gui.QCheckBox; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QPushButton; -import com.trolltech.qt.gui.QRadioButton; -import com.trolltech.qt.gui.QSizePolicy; -import com.trolltech.qt.gui.QWidget; - -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.Image; - -/** - * Instances of this class represent a selectable user interface object that - * issues notification when pressed and released. - *
    - *
    Styles:
    - *
    ARROW, CHECK, PUSH, RADIO, TOGGLE, FLAT
    - *
    UP, DOWN, LEFT, RIGHT, CENTER
    - *
    Events:
    - *
    Selection
    - *
    - *

    - * Note: Only one of the styles ARROW, CHECK, PUSH, RADIO, and TOGGLE may be - * specified. - *

    - *

    - * Note: Only one of the styles LEFT, RIGHT, and CENTER may be specified. - *

    - *

    - * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified when - * the ARROW style is specified. - *

    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see Button - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Button extends Control { - private Image image; - private Image image2; - private Image disabledImage; - private static/* final */boolean COMMAND_LINK = false; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#ARROW - * @see SWT#CHECK - * @see SWT#PUSH - * @see SWT#RADIO - * @see SWT#TOGGLE - * @see SWT#FLAT - * @see SWT#LEFT - * @see SWT#RIGHT - * @see SWT#CENTER - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Button(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected void connectSignals() { - getQButton().released.connect(this, "clickEvent()"); //$NON-NLS-1$ - } - - @Override - protected QWidget createQWidget(int style) { - int marginLeft = 0; - int marginTop = 0; - int marginRight = 0; - int marginBottom = 0; - QAbstractButton tb; - if ((style & SWT.CHECK) != 0) { - tb = new MyQCheckBox(); - marginTop = 0; - marginBottom = 2; - } else if ((style & SWT.RADIO) != 0) { - tb = new MyQRadioButton(); - if ((getParent().style & SWT.NO_RADIO_GROUP) != 0) { - tb.setAutoExclusive(false); - } - marginTop = 3; - marginBottom = 0; - } else { - tb = new MyQPushButton(); - if ((style & SWT.TOGGLE) != 0) { - tb.setCheckable(true); - } - if ((style & SWT.FLAT) != 0) { - ((QPushButton) tb).setFlat(true); - } - // In SWT, push buttons do not inherit color from - // their parent, not even with INHERIT_FORCE. - tb.setPalette(QApplication.palette()); - marginTop = 3; - } - tb.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum); - tb.setContentsMargins(marginLeft, marginTop, marginRight, marginBottom); - return tb; - } - - QAbstractButton getQButton() { - return (QAbstractButton) getQWidget(); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

    - * widgetSelected is called when the control is selected by the - * user. widgetDefaultSelected is not called. - *

    - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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); - } - - protected void clickEvent() { - sendEvent(SWT.Selection); - } - - static int checkStyle(int style) { - style = checkBits(style, SWT.PUSH, SWT.ARROW, SWT.CHECK, SWT.RADIO, SWT.TOGGLE, COMMAND_LINK ? SWT.COMMAND : 0); - if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0) { - return checkBits(style, SWT.CENTER, SWT.LEFT, SWT.RIGHT, 0, 0, 0); - } - if ((style & (SWT.CHECK | SWT.RADIO)) != 0) { - return checkBits(style, SWT.LEFT, SWT.RIGHT, SWT.CENTER, 0, 0, 0); - } - if ((style & SWT.ARROW) != 0) { - style |= SWT.NO_FOCUS; - return checkBits(style, SWT.UP, SWT.DOWN, SWT.LEFT, SWT.RIGHT, 0, 0); - } - return style; - } - - void click() { - getQButton().click(); - } - - // public Point computeSize( int wHint, int hHint, boolean changed ) { - // checkWidget(); - // Point size = super.computeSize( wHint, hHint, changed ); - // size.x += 2; - // return size; - // } - - /** - * Returns a value which describes the position of the text or image in the - * receiver. The value will be one of LEFT, RIGHT - * or CENTER unless the receiver is an ARROW - * button, in which case, the alignment will indicate the direction of the - * arrow (one of LEFT, RIGHT, UP or - * DOWN). - * - * @return the alignment - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getAlignment() { - checkWidget(); - if ((style & SWT.ARROW) != 0) { - if ((style & SWT.UP) != 0) { - return SWT.UP; - } - if ((style & SWT.DOWN) != 0) { - return SWT.DOWN; - } - if ((style & SWT.LEFT) != 0) { - return SWT.LEFT; - } - if ((style & SWT.RIGHT) != 0) { - return SWT.RIGHT; - } - return SWT.UP; - } - if ((style & SWT.LEFT) != 0) { - return SWT.LEFT; - } - if ((style & SWT.CENTER) != 0) { - return SWT.CENTER; - } - if ((style & SWT.RIGHT) != 0) { - return SWT.RIGHT; - } - return SWT.LEFT; - } - - /** - * Returns true if the receiver is grayed, and false otherwise. - * When the widget does not have the CHECK style, return false. - * - * @return the grayed state of the checkbox - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public boolean getGrayed() { - checkWidget(); - if ((style & SWT.CHECK) == 0) { - return false; - } - QCheckBox box = (QCheckBox) getQButton(); - if (box.isTristate()) { - return CheckState.PartiallyChecked.equals(box.checkState()); - } - return false; - } - - /** - * Returns the receiver's image if it has one, or null if it does not. - * - * @return the receiver's image - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Image getImage() { - checkWidget(); - return image; - } - - /** - * Returns the widget message. When the widget is created with the style - * SWT.COMMAND, the message text is displayed to provide - * further information for the user. - * - * @return the widget message - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.3 - */ - /* public */String getMessage() { - checkWidget(); - return getQButton().whatsThis(); - } - - @Override - String getNameText() { - return getText(); - } - - /** - * Returns true if the receiver is selected, and false - * otherwise. - *

    - * When the receiver is of type CHECK or RADIO, it - * is selected when it is checked. When it is of type TOGGLE, - * it is selected when it is pushed in. If the receiver is of any other - * type, this method returns false. - * - * @return the selection state - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - */ - public boolean getSelection() { - checkWidget(); - if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) { - return false; - } - return getQButton().isChecked(); - } - - /** - * Returns the receiver's text, which will be an empty string if it has - * never been set or if the receiver is an ARROW button. - * - * @return the receiver's text - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getText() { - checkWidget(); - if ((style & SWT.ARROW) != 0) { - return ""; //$NON-NLS-1$ - } - return getQButton().text(); - } - - @Override - boolean isTabItem() { - if ((style & SWT.PUSH) != 0) { - return isTabGroup(); - } - return super.isTabItem(); - } - - @Override - boolean mnemonicHit(char ch) { - if (!setFocus()) { - return false; - } - /* - * Feature in Windows. When a radio button gets focus, it selects the - * button in WM_SETFOCUS. Therefore, it is not necessary to click the - * button or send events because this has already happened in - * WM_SETFOCUS. - */ - if ((style & SWT.RADIO) == 0) { - click(); - } - return true; - } - - @Override - boolean mnemonicMatch(char key) { - char mnemonic = findMnemonic(getText()); - if (mnemonic == '\0') { - return false; - } - return Character.toUpperCase(key) == Character.toUpperCase(mnemonic); - } - - @Override - void releaseWidget() { - super.releaseWidget(); - if (disabledImage != null) { - disabledImage.dispose(); - disabledImage = null; - } - if (image2 != null) { - image2.dispose(); - image2 = null; - } - image = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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); - } - - void selectRadio() { - /* - * This code is intentionally commented. When two groups of radio - * buttons with the same parent are separated by another control, the - * correct behavior should be that the two groups act independently. - * This is consistent with radio tool and menu items. The commented code - * implements this behavior. - */ - // int index = 0; - // Control [] children = parent._getChildren (); - // while (index < children.length && children [index] != this) index++; - // int i = index - 1; - // while (i >= 0 && children [i].setRadioSelection (false)) --i; - // int j = index + 1; - // while (j < children.length && children [j].setRadioSelection (false)) - // j++; - // setSelection (true); - Control[] children = parent._getChildren(); - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - if (this != child) { - child.setRadioSelection(false); - } - } - setSelection(true); - } - - /** - * Controls how text, images and arrows will be displayed in the receiver. - * The argument should be one of LEFT, RIGHT or - * CENTER unless the receiver is an ARROW button, - * in which case, the argument indicates the direction of the arrow (one of - * LEFT, RIGHT, UP or - * DOWN). - * - * @param alignment - * the new alignment - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setAlignment(int alignment) { - checkWidget(); - // TODO how to change it for the qt control - if ((style & SWT.ARROW) != 0) { - if ((style & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT)) == 0) { - return; - } - style &= ~(SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT); - style |= alignment & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT); - return; - } - if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) { - return; - } - style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER); - style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER); - } - - void setDefault(boolean value) { - if ((style & SWT.PUSH) == 0) { - return; - } - ((QPushButton) getQButton()).setDefault(value); - } - - @Override - boolean setFixedFocus() { - /* - * Feature in Windows. When a radio button gets focus, it selects the - * button in WM_SETFOCUS. The fix is to not assign focus to an - * unselected radio button. - */ - if ((style & SWT.RADIO) != 0 && !getSelection()) { - return false; - } - return super.setFixedFocus(); - } - - /** - * Sets the receiver's image to the argument, which may be null - * indicating that no image should be displayed. - *

    - * Note that a Button can display an image and text simultaneously on - * Windows (starting with XP), GTK+ and OSX. On other platforms, a Button - * that has an image and text set into it will display the image or text - * that was set most recently. - *

    - * - * @param image - * the image to display on the receiver (may be null - * ) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setImage(Image image) { - checkWidget(); - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if ((style & SWT.ARROW) != 0) { - return; - } - this.image = image; - - getQButton().setIcon(image.getQIcon()); - getQButton().setIconSize(image.getDefaultIconSize()); - } - - /** - * Sets the grayed state of the receiver. This state change only applies if - * the control was created with the SWT.CHECK style. - * - * @param grayed - * the new grayed state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public void setGrayed(boolean grayed) { - checkWidget(); - if ((style & SWT.CHECK) == 0) { - return; - } - QCheckBox box = (QCheckBox) getQButton(); - box.setTristate(true); - box.setCheckState(CheckState.PartiallyChecked); - } - - /** - * Sets the widget message. When the widget is created with the style - * SWT.COMMAND, the message text is displayed to provide - * further information for the user. - * - * @param message - * the new message - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.3 - */ - /* public */void setMessage(String message) { - checkWidget(); - if (message == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - getQButton().setWhatsThis(message); - } - - @Override - boolean setRadioFocus(boolean tabbing) { - if ((style & SWT.RADIO) == 0 || !getSelection()) { - return false; - } - return tabbing ? setTabItemFocus() : setFocus(); - } - - @Override - boolean setRadioSelection(boolean value) { - if ((style & SWT.RADIO) == 0) { - return false; - } - if (getSelection() != value) { - setSelection(value); - postEvent(SWT.Selection); - } - return true; - } - - @Override - boolean setSavedFocus() { - /* - * Feature in Windows. When a radio button gets focus, it selects the - * button in WM_SETFOCUS. If the previous saved focus widget was a radio - * button, allowing the shell to automatically restore the focus to the - * previous radio button will unexpectedly check that button. The fix is - * to not assign focus to an unselected radio button. - */ - if ((style & SWT.RADIO) != 0 && !getSelection()) { - return false; - } - return super.setSavedFocus(); - } - - /** - * Sets the selection state of the receiver, if it is of type - * CHECK, RADIO, or TOGGLE. - * - *

    - * When the receiver is of type CHECK or RADIO, it - * is selected when it is checked. When it is of type TOGGLE, - * it is selected when it is pushed in. - * - * @param selected - * the new selection state - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - */ - public void setSelection(boolean selected) { - checkWidget(); - if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) { - return; - } - getQButton().setChecked(selected); - } - - /** - * Sets the receiver's text. - *

    - * This method sets the button label. The label may include the mnemonic - * character but must not contain line delimiters. - *

    - *

    - * Mnemonics are indicated by an '&' that causes the next character to - * be the mnemonic. When the user presses a key sequence that matches the - * mnemonic, a selection event occurs. On most platforms, the mnemonic - * appears underlined but may be emphasized in a platform specific manner. - * The mnemonic indicator character '&' can be escaped by doubling it in - * the string, causing a single '&' to be displayed. - *

    - *

    - * Note that a Button can display an image and text simultaneously on - * Windows (starting with XP), GTK+ and OSX. On other platforms, a Button - * that has an image and text set into it will display the image or text - * that was set most recently. - *

    - * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the text is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if ((style & SWT.ARROW) != 0) { - return; - } - getQButton().setText(string); - } - - private final class MyQCheckBox extends QCheckBox { - - @Override - protected void mousePressEvent(QMouseEvent e) { - super.mousePressEvent(e); - e.setAccepted(false); - } - - } - - private final class MyQRadioButton extends QRadioButton { - - @Override - protected void mousePressEvent(QMouseEvent e) { - super.mousePressEvent(e); - e.setAccepted(false); - } - - } - - private final class MyQPushButton extends QPushButton { - - @Override - protected void mousePressEvent(QMouseEvent e) { - super.mousePressEvent(e); - e.setAccepted(false); - } - - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Canvas.java deleted file mode 100644 index 4ae2a9a9ed..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Canvas.java +++ /dev/null @@ -1,355 +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 com.trolltech.qt.core.QObject; -import com.trolltech.qt.gui.QPaintEvent; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class provide a surface for drawing arbitrary graphics. - *
    - *
    Styles:
    - *
    (none)
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * This class may be subclassed by custom control implementors who are building - * controls that are not constructed from aggregates of other controls. - * That is, they are either painted using SWT graphics calls or are handled by - * native methods. - *

    - * - * @see Composite - * @see Canvas - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - */ - -public class Canvas extends Composite { - Caret caret; - IME ime; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Canvas() { - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    - * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Canvas(Composite parent, int style) { - super(parent, style); - } - - /** - * Fills the interior of the rectangle specified by the arguments, with the - * receiver's background. - * - * @param gc - * the gc where the rectangle is to be filled - * @param x - * the x coordinate of the rectangle to be filled - * @param y - * the y coordinate of the rectangle to be filled - * @param width - * the width of the rectangle to be filled - * @param height - * the height of the rectangle to be filled - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the gc is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the gc has been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.2 - */ - public void drawBackground(GC gc, int x, int y, int width, int height) { - checkWidget(); - if (gc == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (gc.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - Color gcBG = gc.getBackground(); - gc.setBackground(getBackground()); - gc.fillRectangle(x, y, width, height); - gc.setBackground(gcBG); - } - - /** - * Returns the caret. - *

    - * The caret for the control is automatically hidden and shown when the - * control is painted or resized, when focus is gained or lost and when an - * the control is scrolled. To avoid drawing on top of the caret, the - * programmer must hide and show the caret when drawing in the window any - * other time. - *

    - * - * @return the caret for the receiver, may be null - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Caret getCaret() { - checkWidget(); - return caret; - } - - /** - * Returns the IME. - * - * @return the IME - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public IME getIME() { - checkWidget(); - return ime; - } - - @Override - void releaseChildren(boolean destroy) { - if (caret != null) { - caret.release(false); - caret = null; - } - if (ime != null) { - ime.release(false); - ime = null; - } - super.releaseChildren(destroy); - } - - /** - * Scrolls a rectangular area of the receiver by first copying the source - * area to the destination and then causing the area of the source which is - * not covered by the destination to be repainted. Children that intersect - * the rectangle are optionally moved during the operation. In addition, - * outstanding paint events are flushed before the source area is copied to - * ensure that the contents of the canvas are drawn correctly. - * - * @param destX - * the x coordinate of the destination - * @param destY - * the y coordinate of the destination - * @param x - * the x coordinate of the source - * @param y - * the y coordinate of the source - * @param width - * the width of the area - * @param height - * the height of the area - * @param all - * trueif children should be scrolled, and - * false otherwise - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void scroll(int destX, int destY, int x, int y, int width, int height, boolean all) { - checkWidget(); - if (width <= 0 || height <= 0) { - return; - } - int deltaX = destX - x, deltaY = destY - y; - if (deltaX == 0 && deltaY == 0) { - return; - } - if (!isVisible()) { - return; - } - - //getQWidget().scroll(deltaX, deltaY, new QRect(x, y, width, height)); - - if (all) { - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - Rectangle rect = child.getBounds(); - if (Math.min(x + width, rect.x + rect.width) >= Math.max(x, rect.x) - && Math.min(y + height, rect.y + rect.height) >= Math.max(y, rect.y)) { - child.setLocation(rect.x + deltaX, rect.y + deltaY); - } - } - } - getQMasterWidget().update(); - } - - /** - * Sets the receiver's caret. - *

    - * The caret for the control is automatically hidden and shown when the - * control is painted or resized, when focus is gained or lost and when an - * the control is scrolled. To avoid drawing on top of the caret, the - * programmer must hide and show the caret when drawing in the window any - * other time. - *

    - * - * @param caret - * the new caret for the receiver, may be null - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the caret has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setCaret(Caret caret) { - checkWidget(); - Caret newCaret = caret; - Caret oldCaret = this.caret; - this.caret = newCaret; - if (hasFocus()) { - if (oldCaret != null) { - oldCaret.killFocus(); - } - if (newCaret != null) { - if (newCaret.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - newCaret.setFocus(); - } - } - } - - @Override - public void setFont(Font font) { - checkWidget(); - if (caret != null) { - caret.setFont(font); - } - super.setFont(font); - } - - /** - * Sets the receiver's IME. - * - * @param ime - * the new IME for the receiver, may be null - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the IME has been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public void setIME(IME ime) { - checkWidget(); - if (ime != null && ime.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.ime = ime; - } - - @Override - public boolean qtPaintEvent(QObject source, QPaintEvent paintEvent) { - boolean ret = super.qtPaintEvent(source, paintEvent); - if (source == getQWidget()) { - if (caret != null) { - isOngoingPaintEvent = true; - try { - caret.draw(); - } finally { - isOngoingPaintEvent = false; - } - } - } - return ret; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Caret.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Caret.java deleted file mode 100644 index 6e7d0c24f6..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Caret.java +++ /dev/null @@ -1,590 +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 org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.GCData; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class provide an i-beam that is typically used as the - * insertion point for text. - *
    - *
    Styles:
    - *
    (none)
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see Caret snippets - * @see SWT Example: - * ControlExample, Canvas tab - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Caret extends Widget { - private static final int DEFAULT_WIDTH = 1; - private Canvas parent; - private int x, y; - private int width = DEFAULT_WIDTH; - private int height; - private boolean isVisible; - private Image image; - private Font font; - private Color carentBG; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Caret(Canvas parent, int style) { - super(parent, style); - this.parent = parent; - createWidget(); - } - - void createWidget() { - isVisible = true; - carentBG = new Color(display, 0, 0, 0); - if (parent.getCaret() == null) { - parent.setCaret(this); - } - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent (or its display if its parent is null). - * - * @return the receiver's bounding rectangle - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Rectangle getBounds() { - checkWidget(); - if (image != null) { - Rectangle rect = image.getBounds(); - return new Rectangle(x, y, rect.width, rect.height); - } - return new Rectangle(x, y, width, height); - } - - /** - * Returns the font that the receiver will use to paint textual information. - * - * @return the receiver's font - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Font getFont() { - checkWidget(); - if (font != null) { - return font; - } - return parent.getFont(); - } - - /** - * Returns the image that the receiver will use to paint the caret. - * - * @return the receiver's image - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Image getImage() { - checkWidget(); - return image; - } - - /** - * Returns a point describing the receiver's location relative to its parent - * (or its display if its parent is null). - * - * @return the receiver's location - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Point getLocation() { - checkWidget(); - return new Point(x, y); - } - - /** - * Returns the receiver's parent, which must be a Canvas. - * - * @return the receiver's parent - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Canvas getParent() { - checkWidget(); - return parent; - } - - /** - * Returns a point describing the receiver's size. - * - * @return the receiver's size - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Point getSize() { - checkWidget(); - if (image != null) { - Rectangle rect = image.getBounds(); - return new Point(rect.width, rect.height); - } - return new Point(width, height); - } - - /** - * Returns true if the receiver is visible, and - * false otherwise. - *

    - * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

    - * - * @return the receiver's visibility state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public boolean getVisible() { - checkWidget(); - return isVisible; - } - - /** - * Returns true if the receiver is visible and all of the - * receiver's ancestors are visible and false otherwise. - * - * @return the receiver's visibility state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #getVisible - */ - public boolean isVisible() { - checkWidget(); - return isVisible && parent.isVisible() && parent.hasFocus(); - } - - /** - * Marks the receiver as visible if the argument is true, and - * marks it invisible otherwise. - *

    - * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

    - * - * @param visible - * the new visibility state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setVisible(boolean visible) { - checkWidget(); - if (visible == isVisible) { - return; - } - isVisible = visible; - } - - @Override - void releaseParent() { - super.releaseParent(); - if (this == parent.getCaret()) { - parent.setCaret(null); - } - } - - @Override - void releaseWidget() { - parent = null; - image = null; - font = null; - carentBG.dispose(); - carentBG = null; - } - - /** - * Sets the receiver's size and location to the rectangular area specified - * by the arguments. The x and y arguments are - * relative to the receiver's parent (or its display if its parent is null). - * - * @param x - * the new x coordinate for the receiver - * @param y - * the new y coordinate for the receiver - * @param width - * the new width for the receiver - * @param height - * the new height for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setBounds(int x, int y, int width, int height) { - checkWidget(); - //System.out.println("Caret.setBounds(" + x + ", " + y + ", " + width + ", " + height + ")"); - boolean moved = this.x != x || this.y != y; - boolean resized = this.width != width || this.height != height; - if (!(moved || resized)) { - return; - } - - // invalidate old location - parent.getQWidget().update(this.x, this.y, this.width, this.height); - - this.x = x; - this.y = y; - this.width = Math.max(width, DEFAULT_WIDTH); - this.height = height; - - // invalidate new location - parent.getQWidget().update(this.x, this.y, this.width, this.height); - } - - /** - * Sets the receiver's size and location to the rectangular area specified - * by the argument. The x and y fields of the - * rectangle are relative to the receiver's parent (or its display if its - * parent is null). - * - * @param rect - * the new bounds for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setBounds(Rectangle rect) { - if (rect == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setBounds(rect.x, rect.y, rect.width, rect.height); - } - - void killFocus() { - //focus = false; - } - - void setFocus() { - //focus = true; - } - - /** - * Sets the font that the receiver will use to paint textual information to - * the font specified by the argument, or to the default font for that kind - * of control if the argument is null. - * - * @param font - * the new font (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the font has been disposed - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setFont(Font font) { - checkWidget(); - if (font != null && font.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.font = font; - } - - /** - * Sets the image that the receiver will use to paint the caret to the image - * specified by the argument, or to the default which is a filled rectangle - * if the argument is null - * - * @param image - * the new image (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setImage(Image image) { - checkWidget(); - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.image = image; - // resize(); - } - - /** - * Sets the receiver's location to the point specified by the arguments - * which are relative to the receiver's parent (or its display if its parent - * is null). - * - * @param x - * the new x coordinate for the receiver - * @param y - * the new y coordinate for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setLocation(int x, int y) { - checkWidget(); - if (this.x == x && this.y == y) { - return; - } - setBounds(x, y, width, height); - } - - /** - * Sets the receiver's location to the point specified by the argument which - * is relative to the receiver's parent (or its display if its parent is - * null). - * - * @param location - * the new location for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setLocation(Point location) { - checkWidget(); - if (location == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setLocation(location.x, location.y); - } - - /** - * Sets the receiver's size to the point specified by the arguments. - * - * @param width - * the new width for the receiver - * @param height - * the new height for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setSize(int width, int height) { - checkWidget(); - if (this.width == width && this.height == height) { - return; - } - setBounds(x, y, width, height); - } - - /** - * Sets the receiver's size to the point specified by the argument. - * - * @param size - * the new extent for the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the point is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setSize(Point size) { - checkWidget(); - if (size == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setSize(size.x, size.y); - } - - void draw() { - if (!isVisible || parent == null || parent.isDisposed()) { - return; - } - //System.out.println("caret paint: " + this + " @ " + getLocation()); - GCData data = new GCData(); - data.device = display; - GC gc = GC.qt_new(parent, parent.getQWidget(), data); - // GdkColor color = new GdkColor (); - // color.red = (short) 0xffff; - // color.green = (short) 0xffff; - // color.blue = (short) 0xffff; - // int /*long*/ colormap = OS.gdk_colormap_get_system (); - // OS.gdk_colormap_alloc_color (colormap, color, true, true); - // OS.gdk_gc_set_foreground (gc, color); - // OS.gdk_gc_set_function (gc, OS.GDK_XOR); - // if (image != null && !image.isDisposed() && image.mask == 0) { - // int[] width = new int[1]; - // int[] height = new int[1]; - // OS.gdk_drawable_get_size(image.pixmap, width, height); - // int nX = x; - // if ((parent.style & SWT.MIRRORED) != 0) { - // nX = parent.getClientWidth() - width[0] - nX; - // } - // OS.gdk_draw_drawable(window, gc, image.pixmap, 0, 0, nX, y, width[0], height[0]); - // } else { - int nWidth = width, nHeight = height; - if (nWidth <= 0) { - nWidth = DEFAULT_WIDTH; - } - int nX = x; - if ((parent.style & SWT.MIRRORED) != 0) { - nX = parent.getClientWidth() - nWidth - nX; - } - data.backgroundColor = carentBG; - gc.fillRectangle(nX, y, nWidth, nHeight); - gc.dispose(); - //} - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ColorDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ColorDialog.java deleted file mode 100644 index bb98ecabfe..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ColorDialog.java +++ /dev/null @@ -1,164 +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 com.trolltech.qt.gui.QColor; -import com.trolltech.qt.gui.QColorDialog; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.PaletteData; -import org.eclipse.swt.graphics.RGB; - -/** - * Instances of this class allow the user to select a color from a predefined - * set of available colors. - *
    - *
    Styles:
    - *
    (none)
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see SWT Example: - * ControlExample, Dialog tab - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class ColorDialog extends Dialog { - Display display; - int width, height; - RGB initialRGB; - QColorDialog cd; - - /** - * Constructs a new instance of this class given only its parent. - * - * @param parent - * a composite control which will be the parent of the new - * instance - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public ColorDialog(Shell parent) { - this(parent, SWT.APPLICATION_MODAL); - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public ColorDialog(Shell parent, int style) { - super(parent, checkStyle(parent, style)); - checkSubclass(); - cd = new QColorDialog(); - - } - - /** - * Returns the currently selected color in the receiver. - * - * @return the RGB value for the selected color, may be null - * - * @see PaletteData#getRGBs - */ - public RGB getRGB() { - QColor color = cd.currentColor(); - RGB rgb = new RGB(color.red(), color.green(), color.blue()); - return rgb; - } - - /** - * Makes the receiver visible and brings it to the front of the display. - * - * @return the selected color, or null if the dialog was cancelled, no color - * was selected, or an error occurred - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public RGB open() { - cd.exec(); - QColor color = cd.selectedColor(); - cd.disposeLater(); - return new RGB(color.red(), color.green(), color.blue()); - } - - /** - * Sets the receiver's selected color to be the argument. - * - * @param rgb - * the new RGB value for the selected color, may be null to let - * the platform select a default when open() is called - * @see PaletteData#getRGBs - */ - public void setRGB(RGB rgb) { - cd.setCurrentColor(new QColor(rgb.red, rgb.green, rgb.blue)); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Combo.java deleted file mode 100644 index bb0ab32767..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Combo.java +++ /dev/null @@ -1,1398 +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.Arrays; - -import com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.Qt.LayoutDirection; -import com.trolltech.qt.gui.QComboBox; -import com.trolltech.qt.gui.QFrame; -import com.trolltech.qt.gui.QLineEdit; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QComboBox.InsertPolicy; -import com.trolltech.qt.gui.QComboBox.SizeAdjustPolicy; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.events.VerifyListener; -import org.eclipse.swt.graphics.Point; - -/** - * Instances of this class are controls that allow the user to choose an item - * from a list of items, or optionally enter a new value by typing it into an - * editable text field. Often, Combos are used in the same place - * where a single selection List widget could be used but space is - * limited. A Combo takes less space than a List - * widget and shows similar information. - *

    - * Note: Since Combos can contain both a list and an editable text - * field, it is possible to confuse methods which access one versus the other - * (compare for example, clearSelection() and - * deselectAll()). The API documentation is careful to indicate - * either "the receiver's list" or the "the receiver's text field" to - * distinguish between the two cases. - *

    - *

    - * Note that although this class is a subclass of Composite, it - * does not make sense to add children to it, or set a layout on it. - *

    - *
    - *
    Styles:
    - *
    DROP_DOWN, READ_ONLY, SIMPLE
    - *
    Events:
    - *
    DefaultSelection, Modify, Selection, Verify
    - *
    - *

    - * Note: Only one of the styles DROP_DOWN and SIMPLE may be specified. - *

    - *

    - * IMPORTANT: This class is not intended to be subclassed. - *

    - * - * @see List - * @see Combo snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Combo extends Composite { - /** - * the operating system limit for the number of characters that the text - * field in an instance of this class can hold - */ - public static final int LIMIT; - - /* - * These values can be different on different platforms. Therefore they are - * not initialized in the declaration to stop the compiler from inlining. - */ - static { - LIMIT = new QLineEdit().maxLength(); - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#DROP_DOWN - * @see SWT#READ_ONLY - * @see SWT#SIMPLE - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Combo(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QComboBox createQWidget(int style) { - QComboBox combo = new QComboBox(); - combo.setEditable(true); - combo.setSizeAdjustPolicy(SizeAdjustPolicy.AdjustToMinimumContentsLength); - // Disable the ability to add edited text at the end - combo.setInsertPolicy(InsertPolicy.NoInsert); - if ((style & SWT.READ_ONLY) != 0) { - combo.lineEdit().setReadOnly(true); - } - return combo; - } - - private QComboBox getQComboBox() { - return (QComboBox) getQWidget(); - } - - @Override - protected void connectSignals() { - getQComboBox().activatedIndex.connect(this, "qtActivatedIndexEvent(int)"); //$NON-NLS-1$ - getQComboBox().lineEdit().returnPressed.connect(this, "qtReturnPressedEvent()"); //$NON-NLS-1$ - getQComboBox().editTextChanged.connect(this, "qtEditTextChangedEvent(String)"); //$NON-NLS-1$ - } - - protected void qtActivatedIndexEvent(int index) { - setSelection(new Point(0, getQComboBox().lineEdit().text().length())); - sendEvent(SWT.Selection); - } - - protected void qtReturnPressedEvent() { - sendEvent(SWT.DefaultSelection); - } - - protected void qtEditTextChangedEvent(String text) { - sendEvent(SWT.Modify); - } - - /** - * Adds the argument to the end of the receiver's list. - * - * @param string - * the new item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #add(String,int) - */ - public void add(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - getQComboBox().addItem(string); - } - - /** - * Adds the argument to the receiver's list at the given zero-relative - * index. - *

    - * Note: To add an item at the end of the list, use the result of calling - * getItemCount() as the index or use add(String). - *

    - * - * @param string - * the new item - * @param index - * the index for the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list (inclusive)
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #add(String) - */ - public void add(String string, int index) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - getQComboBox().insertItem(index, string); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver's text is modified, by sending it one of the messages - * defined in the ModifyListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see ModifyListener - * @see #removeModifyListener - */ - public void addModifyListener(ModifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Modify, typedListener); - } - - /** - * 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 SelectionListener interface. - *

    - * widgetSelected is called when the user changes the combo's - * list selection. widgetDefaultSelected is typically called - * when ENTER is pressed the combo's text area. - *

    - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver's text is verified, by sending it one of the messages - * defined in the VerifyListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see VerifyListener - * @see #removeVerifyListener - * - * @since 3.1 - */ - public void addVerifyListener(VerifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Verify, typedListener); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - static int checkStyle(int style) { - /* - * Feature in Windows. It is not possible to create a combo box that has - * a border using Windows style bits. All combo boxes draw their own - * border and do not use the standard Windows border styles. Therefore, - * no matter what style bits are specified, clear the BORDER bits so - * that the SWT style will match the Windows widget. - * - * The Windows behavior is currently implemented on all platforms. - */ - style &= ~SWT.BORDER; - - /* - * 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. - */ - style &= ~(SWT.H_SCROLL | SWT.V_SCROLL); - style = checkBits(style, SWT.DROP_DOWN, SWT.SIMPLE, 0, 0, 0, 0); - if ((style & SWT.SIMPLE) != 0) { - return style & ~SWT.READ_ONLY; - } - return style; - } - - /** - * Sets the selection in the receiver's text field to an empty selection - * starting just before the first character. If the text field is editable, - * this has the effect of placing the i-beam at the start of the text. - *

    - * Note: To clear the selected items in the receiver's list, use - * deselectAll(). - *

    - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #deselectAll - */ - public void clearSelection() { - checkWidget(); - getQComboBox().lineEdit().setCursorPosition(0); - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - if (changed) { - getQWidget().updateGeometry(); - } - - // to get the maximum row length depending on the content, - // set size policy to QComboBox::AdjustToContents. but it has drawback - // that - // it doesn't allow resizing so we have to set back size policy after - // compute size - getQComboBox().setSizeAdjustPolicy(SizeAdjustPolicy.AdjustToContents); - QSize size = getQWidget().sizeHint(); - Point sizeHint = new Point(size.width(), size.height()); - - int width = DEFAULT_WIDTH; - int height = DEFAULT_HEIGHT; - if (sizeHint.x >= 0) { - width = sizeHint.x; - } - if (sizeHint.y >= 0) { - height = sizeHint.y; - } - if (wHint != SWT.DEFAULT) { - width = wHint; - } - if (hHint != SWT.DEFAULT && hHint < sizeHint.y) { - height = hHint; - } - - // sets the size policy back to default so that resizing will be allowed - getQComboBox().setSizeAdjustPolicy(SizeAdjustPolicy.AdjustToMinimumContentsLength); - return new Point(width, height); - } - - /** - * Copies the selected text. - *

    - * The current selection is copied to the clipboard. - *

    - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 2.1 - */ - public void copy() { - checkWidget(); - getQComboBox().lineEdit().copy(); - } - - /** - * Cuts the selected text. - *

    - * The current selection is first copied to the clipboard and then deleted - * from the widget. - *

    - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 2.1 - */ - public void cut() { - checkWidget(); - getQComboBox().lineEdit().cut(); - } - - /** - * Deselects the item at the given zero-relative index in the receiver's - * list. If the item at the index was already deselected, it remains - * deselected. Indices that are out of range are ignored. - * - * @param index - * the index of the item to deselect - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void deselect(int index) { - checkWidget(); - if (getSelectionIndex() == index) { - deselectAll(); - } - } - - /** - * Deselects all selected items in the receiver's list. - *

    - * Note: To clear the selection in the receiver's text field, use - * clearSelection(). - *

    - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #clearSelection - */ - public void deselectAll() { - checkWidget(); - getQComboBox().setCurrentIndex(-1); - sendEvent(SWT.Modify); - } - - /** - * Returns the item at the given, zero-relative index in the receiver's - * list. 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 - *
      - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getItem(int index) { - checkWidget(); - return getQComboBox().itemText(index); - } - - /** - * Returns the number of items contained in the receiver's list. - * - * @return the number of items - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getItemCount() { - checkWidget(); - return getQComboBox().count(); - } - - /** - * Returns the height of the area which would be used to display - * one of the items in the receiver's list. - * - * @return the height of one item - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getItemHeight() { - checkWidget(); - return getQComboBox().view().sizeHintForRow(0); - } - - /** - * Returns a (possibly empty) array of Strings which are the - * items in the receiver's list. - *

    - * 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. - *

    - * - * @return the items in the receiver's list - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String[] getItems() { - checkWidget(); - int count = getItemCount(); - String[] result = new String[count]; - for (int i = 0; i < count; i++) { - result[i] = getItem(i); - } - return result; - } - - /** - * Returns true if the receiver's list is visible, and - * false otherwise. - *

    - * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

    - * - * @return the receiver's list's visibility state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public boolean getListVisible() { - checkWidget(); - java.util.List children = getQComboBox().children(); - for (QObject child : children) { - if (child.isWidgetType() && child instanceof QFrame) { - return ((QWidget) child).isVisible(); - } - } - return false; - } - - @Override - String getNameText() { - return getText(); - } - - /** - * Marks the receiver's list as visible if the argument is true - * , and marks it invisible otherwise. - *

    - * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

    - * - * @param visible - * the new visibility state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public void setListVisible(boolean visible) { - checkWidget(); - if (visible) { - getQComboBox().showPopup(); - } else { - getQComboBox().hidePopup(); - } - } - - /** - * Returns the orientation of the receiver. - * - * @return the orientation style - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 2.1.2 - */ - public int getOrientation() { - checkWidget(); - return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT); - } - - /** - * Returns a Point whose x coordinate is the character position - * representing the start of the selection in the receiver's text field, and - * whose y coordinate is the character position representing the end of the - * selection. An "empty" selection is indicated by the x and y coordinates - * having the same value. - *

    - * Indexing is zero based. The range of a selection is from 0..N where N is - * the number of characters in the widget. - *

    - * - * @return a point representing the selection start and end - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Point getSelection() { - checkWidget(); - int start = getQComboBox().lineEdit().selectionStart(); - int end = getQComboBox().lineEdit().cursorPosition(); - return new Point(start == -1 ? end : start, end); - } - - /** - * Returns the zero-relative index of the item which is currently selected - * in the receiver's list, or -1 if no item is selected. - * - * @return the index of the selected item - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getSelectionIndex() { - checkWidget(); - return getQComboBox().currentIndex(); - } - - /** - * Returns a string containing a copy of the contents of the receiver's text - * field, or an empty string if there are no contents. - * - * @return the receiver's text - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getText() { - checkWidget(); - return getQComboBox().currentText(); - } - - /** - * Returns the height of the receivers's text field. - * - * @return the text height - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getTextHeight() { - checkWidget(); - return getQComboBox().lineEdit().sizeHint().height(); - } - - /** - * Returns the maximum number of characters that the receiver's text field - * is capable of holding. If this has not been changed by - * setTextLimit(), it will be the constant - * Combo.LIMIT. - * - * @return the text limit - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #LIMIT - */ - public int getTextLimit() { - checkWidget(); - return getQComboBox().lineEdit().maxLength(); - } - - /** - * Gets the number of items that are visible in the drop down portion of the - * receiver's list. - *

    - * Note: This operation is a hint and is not supported on platforms that do - * not have this concept. - *

    - * - * @return the number of items that are visible - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.0 - */ - public int getVisibleItemCount() { - checkWidget(); - return getQComboBox().maxVisibleItems(); - } - - /** - * 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 string - * the search item - * @return the index of the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int indexOf(String string) { - return indexOf(string, 0); - } - - /** - * Searches the receiver's list starting at the given, zero-relative index - * until an item is found that is equal to the argument, and returns the - * index of that item. If no item is found or the starting index is out of - * range, returns -1. - * - * @param string - * the search item - * @param start - * the zero-relative index at which to begin the search - * @return the index of the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int indexOf(String string, int start) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int index = getQComboBox().findText(string); - if (!(0 <= start && start <= index)) { - return -1; - } - return index; - } - - /** - * Pastes text from clipboard. - *

    - * The selected text is deleted from the widget and new text inserted from - * the clipboard. - *

    - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 2.1 - */ - public void paste() { - checkWidget(); - getQComboBox().lineEdit().paste(); - } - - /** - * Removes the item from the receiver's list at the given zero-relative - * index. - * - * @param index - * the index for the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void remove(int index) { - checkWidget(); - int count = getItemCount(); - if (!(index < count && index >= 0)) { - error(SWT.ERROR_INVALID_RANGE); - } - getQComboBox().removeItem(index); - } - - /** - * Removes the items from the receiver's list which are between the given - * zero-relative start and end indices (inclusive). - * - * @param start - * the start of the range - * @param end - * the end of the range - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_RANGE - if either the start or end are - * not between 0 and the number of elements in the list minus - * 1 (inclusive)
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void remove(int start, int end) { - checkWidget(); - int count = getItemCount(); - if (!(start < count && start >= 0 && end < count)) { - error(SWT.ERROR_INVALID_RANGE); - } - if (start > end) { - return; - } - for (int i = end; i >= start; --i) { - getQComboBox().removeItem(i); - } - } - - /** - * Searches the receiver's list starting at the first item until an item is - * found that is equal to the argument, and removes that item from the list. - * - * @param string - * the item to remove - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the string is not found in - * the list
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void remove(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int index = indexOf(string, 0); - if (index == -1) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - remove(index); - } - - /** - * Removes all of the items from the receiver's list and clear the contents - * of receiver's text field. - *

    - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - */ - public void removeAll() { - checkWidget(); - getQComboBox().clear(); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the receiver's text is modified. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see ModifyListener - * @see #addModifyListener - */ - public void removeModifyListener(ModifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Modify, listener); - } - - /** - * 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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is verified. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see VerifyListener - * @see #addVerifyListener - * - * @since 3.1 - */ - public void removeVerifyListener(VerifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Verify, listener); - } - - /** - * Selects the item at the given zero-relative index in the receiver's list. - * If the item at the index was already selected, it remains selected. - * Indices that are out of range are ignored. - * - * @param index - * the index of the item to select - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void select(int index) { - checkWidget(); - int count = getItemCount(); - if (index < 0 || index >= count) { - return; - } - getQComboBox().setCurrentIndex(index); - } - - /** - * Sets the text of the item in the receiver's list at the given - * zero-relative index to the string argument. - * - * @param index - * the index for the item - * @param string - * the new text for the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
    • - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setItem(int index, String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int selection = getSelectionIndex(); - remove(index); - if (isDisposed()) { - return; - } - add(string, index); - if (selection != -1) { - select(selection); - } - } - - /** - * Sets the receiver's list to be the given array of items. - * - * @param items - * the array of items - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the items array is null
    • - *
    • ERROR_INVALID_ARGUMENT - if an item in the items array - * is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setItems(String[] items) { - checkWidget(); - if (items == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - for (int i = 0; i < items.length; i++) { - if (items[i] == null) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - } - getQComboBox().addItems(Arrays.asList(items)); - } - - /** - * Sets the orientation of the receiver, which must be one of the constants - * SWT.LEFT_TO_RIGHT or SWT.RIGHT_TO_LEFT. - *

    - * - * @param orientation - * new orientation style - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @since 2.1.2 - */ - public void setOrientation(int orientation) { - checkWidget(); - int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT; - if ((orientation & flags) == 0 || (orientation & flags) == flags) { - return; - } - - style &= ~flags; - style |= orientation & flags; - - getQWidget().setLayoutDirection( - orientation == SWT.LEFT_TO_RIGHT ? LayoutDirection.LeftToRight : LayoutDirection.RightToLeft); - } - - /** - * Sets the selection in the receiver's text field to the range specified by - * the argument whose x coordinate is the start of the selection and whose y - * coordinate is the end of the selection. - * - * @param selection - * a point representing the new selection start and end - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the point is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setSelection(Point selection) { - checkWidget(); - if (selection == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int start = selection.x, end = selection.y; - getQComboBox().lineEdit().setSelection(start, (end - start)); - } - - /** - * Sets the contents of the receiver's text field to the given string. - *

    - * Note: The text field in a Combo is typically only capable of - * displaying a single line of text. Thus, setting the text to a string - * containing line breaks or other special characters will probably cause it - * to display incorrectly. - *

    - * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if ((style & SWT.READ_ONLY) != 0) { - int index = indexOf(string); - if (index != -1) { - select(index); - } - return; - } - getQComboBox().setEditText(string); - sendEvent(SWT.Modify); - } - - /** - * Sets the maximum number of characters that the receiver's text field is - * capable of holding to be the argument. - *

    - * To reset this value to the default, use - * setTextLimit(Combo.LIMIT). Specifying a limit value larger - * than Combo.LIMIT sets the receiver's limit to - * Combo.LIMIT. - *

    - * - * @param limit - * new text limit - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_CANNOT_BE_ZERO - if the limit is zero
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #LIMIT - */ - public void setTextLimit(int limit) { - checkWidget(); - if (limit <= 0) { - error(SWT.ERROR_CANNOT_BE_ZERO); - } - if (limit > LIMIT) { - limit = LIMIT; - } - getQComboBox().lineEdit().setMaxLength(limit); - } - - /** - * Sets the number of items that are visible in the drop down portion of the - * receiver's list. - *

    - * Note: This operation is a hint and is not supported on platforms that do - * not have this concept. - *

    - * - * @param count - * the new number of items to be visible - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.0 - */ - public void setVisibleItemCount(int count) { - checkWidget(); - if (count < 0) { - return; - } - getQComboBox().setMaxVisibleItems(count); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java deleted file mode 100644 index 736db3e62f..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java +++ /dev/null @@ -1,1303 +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.Collection; -import java.util.LinkedList; - -import com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.Qt.FocusReason; -import com.trolltech.qt.gui.QLabel; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QResizeEvent; -import com.trolltech.qt.gui.QScrollArea; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QPalette.ColorRole; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class are controls which are capable of containing other - * controls. - *
    - *
    Styles:
    - *
    NO_BACKGROUND, NO_FOCUS, NO_MERGE_PAINTS, NO_REDRAW_RESIZE, - * NO_RADIO_GROUP, EMBEDDED, DOUBLE_BUFFERED
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * Note: The NO_BACKGROUND, NO_FOCUS, - * NO_MERGE_PAINTS, and NO_REDRAW_RESIZE styles are - * intended for use with Canvas. They can be used with - * Composite if you are drawing your own, but their behavior is - * undefined if they are used with subclasses of Composite other - * than Canvas. - *

    - *

    - * Note: The CENTER style, although undefined for composites, has - * the same value as EMBEDDED which is used to embed widgets from - * other widget toolkits into SWT. On some operating systems (GTK, Motif), this - * may cause the children of this composite to be obscured. - *

    - *

    - * This class may be subclassed by custom control implementors who are building - * controls that are constructed from aggregates of other controls. - *

    - * - * @see Canvas - * @see Composite - * snippets - * @see Sample code and further - * information - */ -public class Composite extends Scrollable { - private Layout layout; - private Control[] tabList; - protected int layoutCount; - private int backgroundMode = SWT.INHERIT_NONE; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Composite() { - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @param parent - * a widget which will be the parent of the new instance (cannot - * be null) - * @param style - * the style of widget to construct - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    - * - * @see SWT#NO_BACKGROUND - * @see SWT#NO_FOCUS - * @see SWT#NO_MERGE_PAINTS - * @see SWT#NO_REDRAW_RESIZE - * @see SWT#NO_RADIO_GROUP - * @see Widget#getStyle - */ - public Composite(Composite parent, int style) { - super(parent, style); - } - - @Override - QWidget createQWidget(int style) { - QWidget widget = super.createQWidget(style); - state |= CANVAS; - if ((style & (SWT.H_SCROLL | SWT.V_SCROLL)) == 0) { - state |= THEME_BACKGROUND; - } - if ((style & SWT.TRANSPARENT) != 0) { - System.out.println("TODO: handle SWT.TRANSPARENT"); //$NON-NLS-1$ - } - return widget; - } - - protected void updateAutoFillBackground() { - // if ((style & SWT.NO_BACKGROUND) == 0) { - // getQMasterWidget().setAutoFillBackground(true); - // } else { - // getQMasterWidget().setAutoFillBackground(false); - // System.out.println(this + " no bg"); - // } - } - - protected boolean noBackground() { - return (style & SWT.NO_BACKGROUND) == 1; - } - - @Override - protected void updateBackground() { - if ((state & PARENT_BACKGROUND) == 0) { - updateAutoFillBackground(); - applyBackgroundColor(getDefaultBackgroundColor()); - } else { - super.updateBackground(); - } - } - - @Override - protected ColorRole[] getBackgroundColorRoles() { - if (backgroundMode == SWT.INHERIT_FORCE) { - return super.getBackgroundColorRoles(); - } else { - return new ColorRole[] { ColorRole.Window }; - } - } - - void addQChild(Control control) { - control.getQMasterWidget().setParent(getQWidget()); - } - - Control[] _getTabList() { - if (tabList == null) { - return tabList; - } - int count = 0; - for (int i = 0; i < tabList.length; i++) { - if (!tabList[i].isDisposed()) { - count++; - } - } - if (count == tabList.length) { - return tabList; - } - Control[] newList = new Control[count]; - int index = 0; - for (int i = 0; i < tabList.length; i++) { - if (!tabList[i].isDisposed()) { - newList[index++] = tabList[i]; - } - } - tabList = newList; - return tabList; - } - - /** - * Clears any data that has been cached by a Layout for all widgets that are - * in the parent hierarchy of the changed control up to and including the - * receiver. If an ancestor does not have a layout, it is skipped. - * - * @param changed - * an array of controls that changed state and require a - * recalculation of size - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the changed array is null - * any of its controls are null or have been disposed
    • - *
    • ERROR_INVALID_PARENT - if any control in changed is - * not in the widget tree of the receiver
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.1 - */ - public void changed(Control[] changed) { - checkWidget(); - if (changed == null) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - for (int i = 0; i < changed.length; i++) { - Control control = changed[i]; - if (control == null) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (control.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - boolean ancestor = false; - Composite composite = control.parent; - while (composite != null) { - ancestor = composite == this; - if (ancestor) { - break; - } - composite = composite.parent; - } - if (!ancestor) { - error(SWT.ERROR_INVALID_PARENT); - } - } - for (int i = 0; i < changed.length; i++) { - Control child = changed[i]; - Composite composite = child.parent; - while (child != this) { - if (composite.layout == null || !composite.layout.flushCache(child)) { - composite.state |= LAYOUT_CHANGED; - } - child = composite; - composite = child.parent; - } - } - } - - @Override - protected void checkSubclass() { - /* Do nothing - Subclassing is allowed */ - } - - @Override - Control[] computeTabList() { - Control result[] = super.computeTabList(); - if (result.length == 0) { - return result; - } - Control[] list = tabList != null ? _getTabList() : _getChildren(); - for (int i = 0; i < list.length; i++) { - Control child = list[i]; - Control[] childList = child.computeTabList(); - if (childList.length != 0) { - Control[] newResult = new Control[result.length + childList.length]; - System.arraycopy(result, 0, newResult, 0, result.length); - System.arraycopy(childList, 0, newResult, result.length, childList.length); - result = newResult; - } - } - return result; - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - Point size; - if ((state & CANVAS) != 0) { - if (layout != null) { - if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) { - changed |= (state & LAYOUT_CHANGED) != 0; - state &= ~LAYOUT_CHANGED; - size = layout.computeSize(this, wHint, hHint, changed); - } else { - size = new Point(wHint, hHint); - } - } else { - size = minimumSize(wHint, hHint, changed); - } - if (size.x < 0) { - size.x = DEFAULT_WIDTH; - } - if (size.y < 0) { - size.y = DEFAULT_HEIGHT; - } - if (wHint != SWT.DEFAULT && wHint > 0) { - size.x = wHint; - } - if (hHint != SWT.DEFAULT && hHint > 0) { - size.y = hHint; - } - Rectangle trim = computeTrim(0, 0, size.x, size.y); - return new Point(trim.width, trim.height); - } - return super.computeSize(wHint, hHint, changed); - - } - - @Override - boolean isMirrored() { - return (style & SWT.MIRRORED) != 0; - } - - /** - * Copies a rectangular area of the receiver at the specified position using - * the gc. - * - * @param gc - * the gc where the rectangle is to be filled - * @param x - * the x coordinate of the rectangle to be filled - * @param y - * the y coordinate of the rectangle to be filled - * @param width - * the width of the rectangle to be filled - * @param height - * the height of the rectangle to be filled - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the gc is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the gc has been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - /* public */void copyArea(GC gc, int x, int y, int width, int height) { - checkWidget(); - if (gc == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (gc.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - throw new UnsupportedOperationException("not yet implemented"); //$NON-NLS-1$ - } - - protected Composite findDeferredControl() { - return layoutCount > 0 ? this : parent.findDeferredControl(); - } - - @Override - Menu[] findMenus(Control control) { - if (control == this) { - return new Menu[0]; - } - Menu result[] = super.findMenus(control); - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - Menu[] menuList = child.findMenus(control); - if (menuList.length != 0) { - Menu[] newResult = new Menu[result.length + menuList.length]; - System.arraycopy(result, 0, newResult, 0, result.length); - System.arraycopy(menuList, 0, newResult, result.length, menuList.length); - result = newResult; - } - } - return result; - } - - @Override - void fixChildren(Shell newShell, Shell oldShell, Decorations newDecorations, Decorations oldDecorations, - Menu[] menus) { - super.fixChildren(newShell, oldShell, newDecorations, oldDecorations, menus); - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - children[i].fixChildren(newShell, oldShell, newDecorations, oldDecorations, menus); - } - } - - void fixTabList(Control control) { - if (tabList == null) { - return; - } - int count = 0; - for (int i = 0; i < tabList.length; i++) { - if (tabList[i] == control) { - count++; - } - } - if (count == 0) { - return; - } - Control[] newList = null; - int length = tabList.length - count; - if (length != 0) { - newList = new Control[length]; - int index = 0; - for (int i = 0; i < tabList.length; i++) { - if (tabList[i] != control) { - newList[index++] = tabList[i]; - } - } - } - tabList = newList; - } - - /** - * Returns the receiver's background drawing mode. This will be one of the - * following constants defined in class SWT: - * INHERIT_NONE, INHERIT_DEFAULT, - * INHERTIT_FORCE. - * - * @return the background mode - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see SWT - * - * @since 3.2 - */ - public int getBackgroundMode() { - checkWidget(); - return backgroundMode; - } - - /** - * Returns a (possibly empty) array containing the receiver's children. - * Children are returned in the order that they are drawn. The topmost - * control appears at the beginning of the array. Subsequent controls draw - * beneath this control and appear later in the array. - *

    - * Note: This is not the actual structure used by the receiver to maintain - * its list of children, so modifying the array will not affect the - * receiver. - *

    - * - * @return an array of children - * - * @see Control#moveAbove - * @see Control#moveBelow - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Control[] getChildren() { - checkWidget(); - return _getChildren(); - } - - Control[] _getChildren() { - Collection qtChildren = getQWidget().children(); - int count = qtChildren.size(); - if (count == 0) { - return new Control[0]; - } - LinkedList children = new LinkedList(); - for (QObject qObj : qtChildren) { - Widget widget = display.findControl(qObj); - if (widget != null && widget != this) { - if (widget instanceof Control && !(widget instanceof Shell)) { - children.addFirst((Control) widget); - } - } - } - return children.toArray(new Control[children.size()]); - } - - int getChildrenCount() { - return getQWidget().children().size(); - } - - /** - * Returns layout which is associated with the receiver, or null if one has - * not been set. - * - * @return the receiver's layout or null - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Layout getLayout() { - checkWidget(); - return layout; - } - - /** - * Gets the (possibly empty) tabbing order for the control. - * - * @return tabList the ordered list of controls representing the tab order - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setTabList - */ - public Control[] getTabList() { - checkWidget(); - Control[] tabList = _getTabList(); - if (tabList == null) { - int count = 0; - Control[] list = _getChildren(); - for (int i = 0; i < list.length; i++) { - if (list[i].isTabGroup()) { - count++; - } - } - tabList = new Control[count]; - int index = 0; - for (int i = 0; i < list.length; i++) { - if (list[i].isTabGroup()) { - tabList[index++] = list[i]; - } - } - } - return tabList; - } - - boolean hooksKeys() { - return hooks(SWT.KeyDown) || hooks(SWT.KeyUp); - } - - /** - * Returns true if the receiver has deferred the performing of - * layout, and false otherwise. - * - * @return the receiver's deferred layout state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setLayoutDeferred(boolean) - * @see #isLayoutDeferred() - * - * @since 3.1 - */ - public boolean getLayoutDeferred() { - checkWidget(); - return layoutCount > 0; - } - - /** - * Returns true if the receiver or any ancestor up to and - * including the receiver's nearest ancestor shell has deferred the - * performing of layouts. Otherwise, false is returned. - * - * @return the receiver's deferred layout state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setLayoutDeferred(boolean) - * @see #getLayoutDeferred() - * - * @since 3.1 - */ - public boolean isLayoutDeferred() { - checkWidget(); - return findDeferredControl() != null; - } - - /** - * If the receiver has a layout, asks the layout to lay out (that - * is, set the size and location of) the receiver's children. If the - * receiver does not have a layout, do nothing. - *

    - * This is equivalent to calling layout(true). - *

    - *

    - * Note: Layout is different from painting. If a child is moved or resized - * such that an area in the parent is exposed, then the parent will paint. - * If no child is affected, the parent will not paint. - *

    - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void layout() { - checkWidget(); - layout(true); - } - - @Override - protected void updateLayout() { - layout(true, true); - } - - /** - * If the receiver has a layout, asks the layout to lay out (that - * is, set the size and location of) the receiver's children. If the - * argument is true the layout must not rely on any information - * it has cached about the immediate children. If it is false - * the layout may (potentially) optimize the work it is doing by assuming - * that none of the receiver's children has changed state since the last - * layout. If the receiver does not have a layout, do nothing. - *

    - * If a child is resized as a result of a call to layout, the resize event - * will invoke the layout of the child. The layout will cascade down through - * all child widgets in the receiver's widget tree until a child is - * encountered that does not resize. Note that a layout due to a resize will - * not flush any cached information (same as layout(false)). - *

    - *

    - * Note: Layout is different from painting. If a child is moved or resized - * such that an area in the parent is exposed, then the parent will paint. - * If no child is affected, the parent will not paint. - *

    - * - * @param changed - * true if the layout must flush its caches, and - * false otherwise - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void layout(boolean changed) { - checkWidget(); - if (layout == null) { - return; - } - layout(changed, false); - } - - /** - * If the receiver has a layout, asks the layout to lay out (that - * is, set the size and location of) the receiver's children. If the changed - * argument is true the layout must not rely on any information - * it has cached about its children. If it is false the layout - * may (potentially) optimize the work it is doing by assuming that none of - * the receiver's children has changed state since the last layout. If the - * all argument is true the layout will cascade down through - * all child widgets in the receiver's widget tree, regardless of whether - * the child has changed size. The changed argument is applied to all - * layouts. If the all argument is false, the layout will - * not cascade down through all child widgets in the receiver's - * widget tree. However, if a child is resized as a result of a call to - * layout, the resize event will invoke the layout of the child. Note that a - * layout due to a resize will not flush any cached information (same as - * layout(false)).

    - *

    - * Note: Layout is different from painting. If a child is moved or resized - * such that an area in the parent is exposed, then the parent will paint. - * If no child is affected, the parent will not paint. - *

    - * - * @param changed - * true if the layout must flush its caches, and - * false otherwise - * @param all - * true if all children in the receiver's widget - * tree should be laid out, and false otherwise - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.1 - */ - public void layout(boolean changed, boolean all) { - checkWidget(); - if (layout == null && !all) { - return; - } - markLayout(changed, all); - updateLayout(all); - } - - /** - * Forces a lay out (that is, sets the size and location) of all widgets - * that are in the parent hierarchy of the changed control up to and - * including the receiver. The layouts in the hierarchy must not rely on any - * information cached about the changed control or any of its ancestors. The - * layout may (potentially) optimize the work it is doing by assuming that - * none of the peers of the changed control have changed state since the - * last layout. If an ancestor does not have a layout, skip it. - *

    - * Note: Layout is different from painting. If a child is moved or resized - * such that an area in the parent is exposed, then the parent will paint. - * If no child is affected, the parent will not paint. - *

    - * - * @param changed - * a control that has had a state change which requires a - * recalculation of its size - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the changed array is null - * any of its controls are null or have been disposed
    • - *
    • ERROR_INVALID_PARENT - if any control in changed is - * not in the widget tree of the receiver
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.1 - */ - public void layout(Control[] changed) { - checkWidget(); - if (changed == null) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - for (int i = 0; i < changed.length; i++) { - Control control = changed[i]; - if (control == null) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (control.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - boolean ancestor = false; - Composite composite = control.parent; - while (composite != null) { - ancestor = composite == this; - if (ancestor) { - break; - } - composite = composite.parent; - } - if (!ancestor) { - error(SWT.ERROR_INVALID_PARENT); - } - } - int updateCount = 0; - Composite[] update = new Composite[16]; - for (int i = 0; i < changed.length; i++) { - Control child = changed[i]; - Composite composite = child.parent; - while (child != this) { - if (composite.layout != null) { - composite.state |= LAYOUT_NEEDED; - if (!composite.layout.flushCache(child)) { - composite.state |= LAYOUT_CHANGED; - } - } - if (updateCount == update.length) { - Composite[] newUpdate = new Composite[update.length + 16]; - System.arraycopy(update, 0, newUpdate, 0, update.length); - update = newUpdate; - } - child = update[updateCount++] = composite; - composite = child.parent; - } - } - for (int i = updateCount - 1; i >= 0; i--) { - update[i].updateLayout(false); - } - } - - @Override - void markLayout(boolean changed, boolean all) { - if (layout != null) { - state |= LAYOUT_NEEDED; - if (changed) { - state |= LAYOUT_CHANGED; - } - } - if (all) { - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - children[i].markLayout(changed, all); - } - } - } - - Point minimumSize(int wHint, int hHint, boolean changed) { - Control[] children = _getChildren(); - Rectangle clientArea = getClientArea(); - int width = 0, height = 0; - for (int i = 0; i < children.length; i++) { - Rectangle rect = children[i].getBounds(); - width = Math.max(width, rect.x - clientArea.x + rect.width); - height = Math.max(height, rect.y - clientArea.y + rect.height); - } - return new Point(width, height); - } - - @Override - void redrawChildren() { - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - children[i]._redraw(); - } - } - - @Override - void releaseChildren(boolean destroy) { - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - if (child != null && !child.isDisposed()) { - child.release(false); - } - } - super.releaseChildren(destroy); - } - - @Override - void releaseWidget() { - super.releaseWidget(); - layout = null; - tabList = null; - } - - void removeControl(Control control) { - control.getQMasterWidget().setParent(null); - fixTabList(control); - resizeChildren(); - } - - private void resizeChildren() { - if (getQWidget() == null) { - return; - } - for (QObject child : getQWidget().children()) { - if (child.isWidgetType()) { - ((QWidget) child).updateGeometry(); - } - } - } - - /** - * Sets the background drawing mode to the argument which should be one of - * the following constants defined in class SWT: - * INHERIT_NONE, INHERIT_DEFAULT, - * INHERIT_FORCE. - * - * @param mode - * the new background mode - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see SWT - * - * @since 3.2 - */ - public void setBackgroundMode(int mode) { - checkWidget(); - if (backgroundMode == mode) { - return; - } - backgroundMode = mode; - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - children[i].updateBackgroundMode(); - } - } - - @Override - protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) { - if ((state & CANVAS) != 0) { - state &= ~(RESIZE_OCCURRED | MOVE_OCCURRED); - state |= RESIZE_DEFERRED | MOVE_DEFERRED; - } - super.setBounds(x, y, width, height, move, resize); - if ((state & CANVAS) != 0) { - boolean wasResized = (state & RESIZE_OCCURRED) != 0; - state &= ~(RESIZE_DEFERRED | MOVE_DEFERRED); - if (wasResized && layout != null) { - markLayout(false, false); - updateLayout(false); - } - } - } - - @Override - public boolean setFocus() { - checkWidget(); - return setFocus(FocusReason.OtherFocusReason); - // Control[] children = _getChildren(); - // for (int i = 0; i < children.length; i++) { - // Control child = children[i]; - // if (child.setRadioFocus(false)) - // return true; - // } - // for (int i = 0; i < children.length; i++) { - // Control child = children[i]; - // if (child.setFocus()) - // return true; - // } - // return super.setFocus(); - } - - @Override - protected boolean setFocus(FocusReason focusReason) { - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - if (child.getVisible() && child.setFocus(focusReason)) { - return true; - } - } - return super.setFocus(focusReason); - } - - /** - * Sets the layout which is associated with the receiver to be the argument - * which may be null. - * - * @param layout - * the receiver's new layout or null - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setLayout(Layout layout) { - checkWidget(); - this.layout = layout; - } - - /** - * If the argument is true, causes subsequent layout operations - * in the receiver or any of its children to be ignored. No layout of any - * kind can occur in the receiver or any of its children until the flag is - * set to false. Layout operations that occurred while the flag was - * true are remembered and when the flag is set to - * false, the layout operations are performed in an optimized - * manner. Nested calls to this method are stacked. - * - * @param defer - * the new defer state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #layout(boolean) - * @see #layout(Control[]) - * - * @since 3.1 - */ - public void setLayoutDeferred(boolean defer) { - checkWidget(); - if (!defer) { - if (--layoutCount == 0) { - if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) { - updateLayout(true); - } - } - } else { - layoutCount++; - } - } - - /** - * Sets the tabbing order for the specified controls to match the order that - * they occur in the argument list. - * - * @param tabList - * the ordered list of controls representing the tab order or - * null - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if a widget in the tabList is - * null or has been disposed
    • - *
    • ERROR_INVALID_PARENT - if widget in the tabList is not - * in the same widget tree
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setTabList(Control[] tabList) { - checkWidget(); - if (tabList != null) { - for (int i = 0; i < tabList.length; i++) { - Control control = tabList[i]; - if (control == null) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (control.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (control.parent != this) { - error(SWT.ERROR_INVALID_PARENT); - } - } - Control[] newList = new Control[tabList.length]; - System.arraycopy(tabList, 0, newList, 0, tabList.length); - tabList = newList; - } - this.tabList = tabList; - } - - @Override - boolean setTabGroupFocus() { - if (isTabItem()) { - return setTabItemFocus(); - } - boolean takeFocus = (style & SWT.NO_FOCUS) == 0; - if ((state & CANVAS) != 0) { - takeFocus = hooksKeys(); - if ((style & SWT.EMBEDDED) != 0) { - takeFocus = true; - } - } - if (takeFocus && setTabItemFocus()) { - return true; - } - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - if (child.isTabItem() && child.setRadioFocus(true)) { - return true; - } - } - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - if (child.isTabItem() && !child.isTabGroup() && child.setTabItemFocus()) { - return true; - } - } - return false; - } - - @Override - boolean translateMnemonic(Event event, Control control) { - if (super.translateMnemonic(event, control)) { - return true; - } - if (control != null) { - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - if (child.translateMnemonic(event, control)) { - return true; - } - } - } - return false; - } - - @Override - void updateBackgroundColor() { - // if (noBackground()) { - // return; - // } - super.updateBackgroundColor(); - for (Control child : _getChildren()) { - if ((child.state & PARENT_BACKGROUND) != 0) { - child.updateBackgroundColor(); - } - } - } - - @Override - void updateBackgroundImage() { - // if (noBackground()) { - // return; - // } - super.updateBackgroundImage(); - for (Control child : _getChildren()) { - if ((child.state & PARENT_BACKGROUND) != 0) { - child.updateBackgroundImage(); - } - } - } - - @Override - void updateBackgroundMode() { - super.updateBackgroundMode(); - for (Control child : _getChildren()) { - child.updateBackgroundMode(); - } - } - - @Override - void updateFont(Font oldFont, Font newFont) { - super.updateFont(oldFont, newFont); - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - Control control = children[i]; - if (!control.isDisposed()) { - control.updateFont(oldFont, newFont); - } - } - } - - @Override - void updateLayout(boolean all) { - Composite parent = findDeferredControl(); - if (parent != null) { - parent.state |= LAYOUT_CHILD; - return; - } - if ((state & LAYOUT_NEEDED) != 0) { - boolean changed = (state & LAYOUT_CHANGED) != 0; - state &= ~(LAYOUT_NEEDED | LAYOUT_CHANGED); - if (layout != null) { - layout.layout(this, changed); - } - resizeChildren(); - } - if (all) { - state &= ~LAYOUT_CHILD; - Control[] children = _getChildren(); - for (int i = 0; i < children.length; i++) { - children[i].updateLayout(all); - } - } - } - - @Override - protected void _setVisible(QWidget widget, boolean visible) { - findChildren(); - boolean oldVisibility = getQMasterWidget().isVisible(); - super._setVisible(widget, visible); - if (getQMasterWidget().isVisible() != oldVisibility && layout != null) { - markLayout(true, true); - updateLayout(true); - } - } - - // TODO sma@2010-02-08 Links contain HTML escape sequences and therefore "&". - // Removing it breaks the HTML. Can Links have mnemonics? - private void findChildren() { - for (Control child : getChildren()) { - if (!(child instanceof Link) && child.getQWidget() instanceof QLabel - && ((QLabel) child.getQWidget()).text().contains("&")) { //$NON-NLS-1$ - handleMnemonic(child.getQWidget()); - } else if (child instanceof Composite) { - ((Composite) child).findChildren(); - } - } - } - - private void handleMnemonic(QWidget qwidget) { - QLabel myLabel = (QLabel) qwidget; - boolean foundBuddy = false; - java.util.List children = myLabel.parent().children(); - for (int i = 0; i < children.size() - 1; i++) { - if (children.get(i).equals(myLabel)) { - // search for a suitable buddy - for (int k = i + 1; k < children.size(); k++) { - QObject neighbour = children.get(k); - if (neighbour != null && !(neighbour instanceof QLabel) && !(neighbour instanceof QScrollArea)) { - myLabel.setBuddy((QWidget) neighbour); - foundBuddy = true; - break; - } - } - } - - } - /* - * If there is no buddy to get the mnemonic, the "&" is removed from the - * string. In SWT/Win32 the character will remain underlined without any - * function, but in SWT/Qt this is not possible. - */ - if (!foundBuddy) { - myLabel.setText(myLabel.text().replace("&", "")); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - - @Override - public boolean qtResizeEvent(QObject source, QResizeEvent resizeEvent) { - if (isDisposed()) { - return true; - } - if (isMirrored()) { - int newWidth = resizeEvent.size().width(); - int oldWidth = resizeEvent.oldSize().width(); - final int dx = newWidth - oldWidth; - if (dx != 0) { - Control[] children = _getChildren(); - for (int i = 0; i < children.length; ++i) { - Control child = children[i]; - if (!child.isDisposed()) { - QWidget qtControl = child.getQMasterWidget(); - QPoint pos = qtControl.pos(); - qtControl.move(pos.x() + dx, pos.y()); - } - } - } - } - super.qtResizeEvent(source, resizeEvent); - if (layout != null) { - markLayout(false, false); - updateLayout(false); - } - return false; - } - - @Override - public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) { - if (source == getQWidget()) { - boolean ret = super.qtMouseButtonPressEvent(source, mouseEvent); - if ((this.state & CANVAS) != 0) { - if ((style & SWT.NO_FOCUS) == 0 && hooksKeys()) { - Control[] children = getChildren(); - if (children == null || children.length == 0) { - setFocus(FocusReason.OtherFocusReason); - } - } - } - return ret; - } - return false; - } - - @Override - public boolean qtMouseEnterEvent(Object source) { - if (source == getQMasterWidget()) { - sendEvent(SWT.MouseEnter); - } - return false; - } - - @Override - public boolean qtMouseLeaveEvent(Object source) { - if (source == getQMasterWidget()) { - sendEvent(SWT.MouseExit); - } - return false; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java deleted file mode 100644 index a253cfe83a..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java +++ /dev/null @@ -1,4361 +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.List; - -import com.trolltech.qt.core.QCoreApplication; -import com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.QRect; -import com.trolltech.qt.core.QEventLoop.ProcessEventsFlag; -import com.trolltech.qt.core.Qt.FocusPolicy; -import com.trolltech.qt.core.Qt.FocusReason; -import com.trolltech.qt.core.Qt.Key; -import com.trolltech.qt.core.Qt.LayoutDirection; -import com.trolltech.qt.core.Qt.MouseButton; -import com.trolltech.qt.core.Qt.MouseButtons; -import com.trolltech.qt.gui.QAbstractScrollArea; -import com.trolltech.qt.gui.QAction; -import com.trolltech.qt.gui.QApplication; -import com.trolltech.qt.gui.QBrush; -import com.trolltech.qt.gui.QColor; -import com.trolltech.qt.gui.QContextMenuEvent; -import com.trolltech.qt.gui.QDesktopWidget; -import com.trolltech.qt.gui.QDragEnterEvent; -import com.trolltech.qt.gui.QDragLeaveEvent; -import com.trolltech.qt.gui.QDragMoveEvent; -import com.trolltech.qt.gui.QDropEvent; -import com.trolltech.qt.gui.QFrame; -import com.trolltech.qt.gui.QKeyEvent; -import com.trolltech.qt.gui.QMenu; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QMoveEvent; -import com.trolltech.qt.gui.QPaintDeviceInterface; -import com.trolltech.qt.gui.QPaintEvent; -import com.trolltech.qt.gui.QPainter; -import com.trolltech.qt.gui.QPalette; -import com.trolltech.qt.gui.QPicture; -import com.trolltech.qt.gui.QResizeEvent; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QFrame.Shadow; -import com.trolltech.qt.gui.QFrame.Shape; -import com.trolltech.qt.gui.QPalette.ColorRole; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.accessibility.Accessible; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Cursor; -import org.eclipse.swt.graphics.Drawable; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.GCData; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.graphics.Region; -import org.eclipse.swt.internal.qt.DragNDropListener; -import org.eclipse.swt.internal.qt.KeyUtil; -import org.eclipse.swt.internal.qt.QtSWTConverter; -import org.eclipse.swt.widgets.*; - -/** - * Control is the abstract superclass of all windowed user interface classes. - *

    - *

    - *
    Styles: - *
    BORDER
    - *
    LEFT_TO_RIGHT, RIGHT_TO_LEFT
    - *
    Events: - *
    DragDetect, FocusIn, FocusOut, Help, KeyDown, KeyUp, MenuDetect, - * MouseDoubleClick, MouseDown, MouseEnter, MouseExit, MouseHover, MouseUp, - * MouseMove, Move, Paint, Resize, Traverse
    - *
    - *

    - *

    - * Only one of LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified. - *

    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see Control - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public abstract class Control extends Widget implements Drawable { - /** - * the handle to the OS resource (Warning: This field is platform dependent) - *

    - * IMPORTANT: This field is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It is not available on all platforms and should never be - * accessed from application code. - *

    - */ - public int /* long */handle; - Composite parent; - protected Cursor cursor; - private Menu menu; - private Object layoutData; - private Accessible accessible; - protected Region region; - private Font font; - protected Color foreground; - protected Color background; - protected Image backgroundImage; - private QPicture temporaryGC; - protected boolean isOngoingPaintEvent = false; - private boolean enabled = true; - private QPoint dragStartPos; - private DragNDropListener dndListener; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Control() { - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#BORDER - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Control(Composite parent, int style) { - super(parent, style); - this.parent = parent; - createWidget(parent, style); - } - - protected void createWidget(Composite parent, int style) { - state |= DRAG_DETECT; - checkAndUpdateOrientation(parent); - QWidget qWidget = createQWidget(style); - if (qWidget == null) { - error(SWT.ERROR_UNSPECIFIED); - } - setQWidget(qWidget); - setParent(); - fixZOrder(); - checkAndUpdateBackground(); - connectSignals(); - registerQWidget(); - setupQWidget(); - updateLayoutDirection(); - setupStyleSheet(); - checkAndUpdateMirrored(); - checkAndUpdateBorder(); - updateFocusPolicy(); - updateBackground(); - updateSizeAndVisibility(); - } - - abstract QWidget createQWidget(int style); - - protected void setParent() { - if (parent != null) { - parent.addQChild(this); - } - } - - protected void fixZOrder() { - if (parent != null && !(parent instanceof TabFolder)) { - getQMasterWidget().lower(); - } - } - - /** - * Hook that guarantees that getQWidget() != null. Called immediately after - * {@link createQtControl()}. - */ - protected void setupQWidget() { - //nothing - } - - protected void updateSizeAndVisibility() { - if (parent != null && parent.getQWidget().isVisible() && !(parent instanceof Shell) && !(this instanceof Shell)) { - getQMasterWidget().setVisible(true); - } - } - - protected void connectSignals() { - // nothing by default - } - - boolean isQScrollArea() { - return getQWidget() instanceof QAbstractScrollArea; - } - - protected void setupStyleSheet() { - String styleSheet = getShell() != null ? getShell().getQMasterWidget().styleSheet() : null; - if (styleSheet == null) { - styleSheet = getDisplay().getStyleSheet(); - if (styleSheet != null) { - setStyleSheet(styleSheet); - } - } - } - - protected void updateLayoutDirection() { - if ((style & SWT.RIGHT_TO_LEFT) != 0) { - getQWidget().setLayoutDirection(LayoutDirection.RightToLeft); - } else { - getQWidget().setLayoutDirection(LayoutDirection.LeftToRight); - } - } - - protected void updateFocusPolicy() { - if ((style & SWT.NO_FOCUS) != 0) { - getQMasterWidget().setFocusPolicy(FocusPolicy.NoFocus); - } - } - - void registerQWidget() { - display.addControl(getQWidget(), this); - if (getQMasterWidget() != null && getQMasterWidget() != getQWidget()) { - display.addControl(getQMasterWidget(), this); - } - } - - void deregisterQWidget() { - display.removeControl(getQWidget()); - if (getQMasterWidget() != null && getQMasterWidget() != getQWidget()) { - display.removeControl(getQMasterWidget()); - } - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - parent = null; - } - - @Override - void releaseParent() { - parent.removeControl(this); - } - - @Override - void releaseWidget() { - super.releaseWidget(); - - deregisterQWidget(); - - if (menu != null && !menu.isDisposed()) { - menu.dispose(); - } - temporaryGC = null; - backgroundImage = null; - menu = null; - cursor = null; - layoutData = null; - if (accessible != null) { - // TODO - //accessible.internal_dispose_Accessible(); - } - accessible = null; - region = null; - font = null; - } - - protected void checkAndUpdateBorder() { - checkAndUpdateBorder(getQMasterWidget()); - if (getBorderWidth() == 0) { - style &= ~SWT.BORDER; - } - } - - protected void checkAndUpdateBorder(QWidget control) { - if (control != null && control instanceof QFrame) { - QFrame frame = (QFrame) control; - if ((style & SWT.BORDER) != 0) { - frame.setFrameShape(Shape.StyledPanel); - frame.setFrameShadow(Shadow.Sunken); - frame.setLineWidth(1); - } else { - frame.setFrameShape(Shape.NoFrame); - frame.setLineWidth(0); - } - } - - } - - /* used by CoolBar */ - boolean drawGripper(int x, int y, int width, int height, boolean vertical) { - return false; - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is moved or resized, by sending it one of the messages - * defined in the ControlListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see ControlListener - * @see #removeControlListener - */ - public void addControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Resize, typedListener); - addListener(SWT.Move, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when a drag gesture occurs, by sending it one of the messages defined in - * the DragDetectListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see DragDetectListener - * @see #removeDragDetectListener - * - * @since 3.3 - */ - public void addDragDetectListener(DragDetectListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.DragDetect, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control gains or loses focus, by sending it one of the messages - * defined in the FocusListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see FocusListener - * @see #removeFocusListener - */ - public void addFocusListener(FocusListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.FocusIn, typedListener); - addListener(SWT.FocusOut, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will - * be notified when gesture events are generated for the control, - * by sending it one of the messages defined in the - * GestureListener interface. - * - * @param listener the listener which should be notified - * - * @exception IllegalArgumentException
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
    • - *
    - * - * @see GestureListener - * @see #removeGestureListener - * - * @since 3.7 - */ - public void addGestureListener (GestureListener listener) { - checkWidget(); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - TypedListener typedListener = new TypedListener (listener); - addListener (SWT.Gesture, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when help events are generated for the control, by sending it one of the - * messages defined in the HelpListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see HelpListener - * @see #removeHelpListener - */ - public void addHelpListener(HelpListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Help, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when keys are pressed and released on the system keyboard, by sending it - * one of the messages defined in the KeyListener interface. - *

    - * When a key listener is added to a control, the control will take part in - * widget traversal. By default, all traversal keys (such as the tab key and - * so on) are delivered to the control. In order for a control to take part - * in traversal, it should listen for traversal events. Otherwise, the user - * can traverse into a control but not out. Note that native controls such - * as table and tree implement key traversal in the operating system. It is - * not necessary to add traversal listeners for these controls, unless you - * want to override the default traversal. - *

    - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see KeyListener - * @see #removeKeyListener - */ - public void addKeyListener(KeyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.KeyUp, typedListener); - addListener(SWT.KeyDown, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the platform-specific context menu trigger has occurred, by sending - * it one of the messages defined in the MenuDetectListener - * interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MenuDetectListener - * @see #removeMenuDetectListener - * - * @since 3.3 - */ - public void addMenuDetectListener(MenuDetectListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.MenuDetect, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when mouse buttons are pressed and released, by sending it one of the - * messages defined in the MouseListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MouseListener - * @see #removeMouseListener - */ - public void addMouseListener(MouseListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.MouseDown, typedListener); - addListener(SWT.MouseUp, typedListener); - addListener(SWT.MouseDoubleClick, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the mouse passes or hovers over controls, by sending it one of the - * messages defined in the MouseTrackListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MouseTrackListener - * @see #removeMouseTrackListener - */ - public void addMouseTrackListener(MouseTrackListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.MouseEnter, typedListener); - addListener(SWT.MouseExit, typedListener); - addListener(SWT.MouseHover, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the mouse moves, by sending it one of the messages defined in the - * MouseMoveListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MouseMoveListener - * @see #removeMouseMoveListener - */ - public void addMouseMoveListener(MouseMoveListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.MouseMove, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the mouse wheel is scrolled, by sending it one of the messages - * defined in the MouseWheelListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MouseWheelListener - * @see #removeMouseWheelListener - * - * @since 3.3 - */ - public void addMouseWheelListener(MouseWheelListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.MouseWheel, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver needs to be painted, by sending it one of the messages - * defined in the PaintListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see PaintListener - * @see #removePaintListener - */ - public void addPaintListener(PaintListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Paint, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will - * be notified when touch events occur, by sending it - * one of the messages defined in the TouchListener - * interface. - *

    - * NOTE: You must also call setTouchEnabled to notify the - * windowing toolkit that you want touch events to be generated. - *

    - * - * @exception IllegalArgumentException
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
    • - *
    - * - * @see TouchListener - * @see #removeTouchListener - * @since 3.7 - */ - public void addTouchListener (TouchListener listener) { - checkWidget(); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - TypedListener typedListener = new TypedListener (listener); - addListener (SWT.Touch,typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when traversal events occur, by sending it one of the messages defined in - * the TraverseListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see TraverseListener - * @see #removeTraverseListener - */ - public void addTraverseListener(TraverseListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Traverse, typedListener); - } - - protected void checkBuffered() { - style &= ~SWT.DOUBLE_BUFFERED; - } - - protected void checkAndUpdateMirrored() { - if ((style & SWT.RIGHT_TO_LEFT) != 0) { - style |= SWT.MIRRORED; - } - } - - /** - * Returns the preferred size of the receiver. - *

    - * The preferred size of a control is the size that it would best - * be displayed at. The width hint and height hint arguments allow the - * caller to ask a control questions such as "Given a particular width, how - * high does the control need to be to show all of the contents?" To - * indicate that the caller does not wish to constrain a particular - * dimension, the constant SWT.DEFAULT is passed for the hint. - *

    - * - * @param wHint - * the width hint (can be SWT.DEFAULT) - * @param hHint - * the height hint (can be SWT.DEFAULT) - * @return the preferred size of the control - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see Layout - * @see #getBorderWidth - * @see #getBounds - * @see #getSize - * @see #pack(boolean) - * @see "computeTrim, getClientArea for controls that implement them" - */ - public Point computeSize(int wHint, int hHint) { - return computeSize(wHint, hHint, true); - } - - /** - * Returns the preferred size of the receiver. - *

    - * The preferred size of a control is the size that it would best - * be displayed at. The width hint and height hint arguments allow the - * caller to ask a control questions such as "Given a particular width, how - * high does the control need to be to show all of the contents?" To - * indicate that the caller does not wish to constrain a particular - * dimension, the constant SWT.DEFAULT is passed for the hint. - *

    - *

    - * If the changed flag is true, it indicates that the - * receiver's contents have changed, therefore any caches that a - * layout manager containing the control may have been keeping need to be - * flushed. When the control is resized, the changed flag will be - * false, so layout manager caches can be retained. - *

    - * - * @param wHint - * the width hint (can be SWT.DEFAULT) - * @param hHint - * the height hint (can be SWT.DEFAULT) - * @param changed - * true if the control's contents have changed, and - * false otherwise - * @return the preferred size of the control. - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see Layout - * @see #getBorderWidth - * @see #getBounds - * @see #getSize - * @see #pack(boolean) - * @see "computeTrim, getClientArea for controls that implement them" - */ - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - if (changed) { - getQMasterWidget().updateGeometry(); - } - Point res = QtSWTConverter.convert(getQMasterWidget().sizeHint()); - if (res.x < 0) { - res.x = DEFAULT_WIDTH; - } - if (res.y < 0) { - res.y = DEFAULT_HEIGHT; - } - - int border = getBorderWidth(); - if (wHint != SWT.DEFAULT) { - res.x = wHint + 2 * border; - } - if (hHint != SWT.DEFAULT) { - res.y = hHint + 2 * border; - } - - return res; - } - - Control computeTabGroup() { - if (isTabGroup()) { - return this; - } - return parent.computeTabGroup(); - } - - Control computeTabRoot() { - Control[] tabList = parent._getTabList(); - if (tabList != null) { - int index = 0; - while (index < tabList.length) { - if (tabList[index] == this) { - break; - } - index++; - } - if (index == tabList.length) { - if (isTabGroup()) { - return this; - } - } - } - return parent.computeTabRoot(); - } - - Control[] computeTabList() { - if (isTabGroup()) { - if (getVisible() && getEnabled()) { - return new Control[] { this }; - } - } - return new Control[0]; - } - - Font defaultFont() { - return display.getSystemFont(); - } - - /** - * Detects a drag and drop gesture. This method is used to detect a drag - * gesture when called from within a mouse down listener. - * - *

    - * By default, a drag is detected when the gesture occurs anywhere within - * the client area of a control. Some controls, such as tables and trees, - * override this behavior. In addition to the operating system specific drag - * gesture, they require the mouse to be inside an item. Custom widget - * writers can use setDragDetect to disable the default - * detection, listen for mouse down, and then call dragDetect() - * from within the listener to conditionally detect a drag. - *

    - * - * @param event - * the mouse down event - * - * @return true if the gesture occurred, and false - * otherwise. - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT when the event is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see DragDetectListener - * @see #addDragDetectListener - * - * @see #getDragDetect - * @see #setDragDetect - * - * @since 3.3 - */ - public boolean dragDetect(Event event) { - checkWidget(); - if (event == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return dragDetect(event.button, event.count, event.stateMask, event.x, event.y); - } - - /** - * Detects a drag and drop gesture. This method is used to detect a drag - * gesture when called from within a mouse down listener. - * - *

    - * By default, a drag is detected when the gesture occurs anywhere within - * the client area of a control. Some controls, such as tables and trees, - * override this behavior. In addition to the operating system specific drag - * gesture, they require the mouse to be inside an item. Custom widget - * writers can use setDragDetect to disable the default - * detection, listen for mouse down, and then call dragDetect() - * from within the listener to conditionally detect a drag. - *

    - * - * @param event - * the mouse down event - * - * @return true if the gesture occurred, and false - * otherwise. - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT when the event is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see DragDetectListener - * @see #addDragDetectListener - * - * @see #getDragDetect - * @see #setDragDetect - * - * @since 3.3 - */ - public boolean dragDetect(MouseEvent event) { - checkWidget(); - if (event == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return dragDetect(event.button, event.count, event.stateMask, event.x, event.y); - } - - boolean dragDetect(int button, int count, int stateMask, int x, int y) { - return false; - // TODO - } - - Cursor findCursor() { - if (cursor != null) { - return cursor; - } - return parent.findCursor(); - } - - Control findImageControl() { - Control control = findBackgroundControl(); - return control != null && control.backgroundImage != null ? control : null; - } - - Control findThemeControl() { - return background == null && backgroundImage == null ? parent.findThemeControl() : null; - } - - Menu[] findMenus(Control control) { - if (menu != null && this != control) { - return new Menu[] { menu }; - } - return new Menu[0]; - } - - protected char findMnemonic(String string) { - int index = 0; - int length = string.length(); - do { - while (index < length && string.charAt(index) != '&') { - index++; - } - if (++index >= length) { - return '\0'; - } - if (string.charAt(index) != '&') { - return string.charAt(index); - } - index++; - } while (index < length); - return '\0'; - } - - void fixChildren(Shell newShell, Shell oldShell, Decorations newDecorations, Decorations oldDecorations, - Menu[] menus) { - oldShell.fixShell(newShell, this); - oldDecorations.fixDecorations(newDecorations, this, menus); - } - - private void fixFocus(Control focusControl) { - Shell shell = getShell(); - Control control = this; - while (control != shell && (control = control.parent) != null) { - if (control.setFixedFocus()) { - return; - } - } - - shell.setSavedFocus(focusControl); - - QDesktopWidget desktopWidget = QApplication.desktop(); - if (desktopWidget != null) { - desktopWidget.setFocus(FocusReason.OtherFocusReason); - } - } - - /** - * Forces the receiver to have the keyboard focus, causing all - * keyboard events to be delivered to it. - * - * @return true if the control got focus, and - * false if it was unable to. - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setFocus - */ - public boolean forceFocus() { - checkWidget(); - return forceFocus(FocusReason.OtherFocusReason); - } - - protected boolean forceFocus(FocusReason focusReason) { - if (display.focusEvent == SWT.FocusOut) { - return false; - } - Decorations shell = menuShell(); - shell.setSavedFocus(this); - if (!isEnabled() || !isVisible() || !isActive()) { - return false; - } - if (isFocusControl()) { - return true; - } - shell.setSavedFocus(null); - getQWidget().setFocus(focusReason); - if (isDisposed()) { - return false; - } - shell.setSavedFocus(this); - return _isFocusControl(); - } - - /** - * Returns the accessible object for the receiver. If this is the first time - * this object is requested, then the object is created and returned. - * - * @return the accessible object - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see Accessible#addAccessibleListener - * @see Accessible#addAccessibleControlListener - * - * @since 2.0 - */ - public Accessible getAccessible() { - checkWidget(); - if (accessible == null) { - accessible = new_Accessible(this); - } - return accessible; - } - - /** - * Returns the receiver's background color. - * - * @return the background color - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Color getBackground() { - checkWidget(); - return _getBackgroundColor(); - } - - /** - * Returns the receiver's background image. - * - * @return the background image - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.2 - */ - public Image getBackgroundImage() { - checkWidget(); - Control control = findBackgroundControl(); - if (control == null) { - control = this; - } - return control.backgroundImage; - } - - Color _getBackgroundColor() { - Control control = findBackgroundControl(); - if (control == null) { - control = this; - } - if (control.background != null) { - return control.background; - } - return getDefaultBackgroundColor(); - } - - /** - * Returns the receiver's border width. - * - * @return the border width - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getBorderWidth() { - checkWidget(); - if (getQMasterWidget() instanceof QFrame) { - return ((QFrame) getQMasterWidget()).frameWidth(); - } - return 0; - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent (or its display if its parent is null), unless the receiver - * is a shell. In this case, the location is relative to the display. - * - * @return the receiver's bounding rectangle - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Rectangle getBounds() { - checkWidget(); - return QtSWTConverter.convert(getQMasterWidget().frameGeometry()); - } - - /** - * Returns the receiver's cursor, or null if it has not been set. - *

    - * When the mouse pointer passes over a control its appearance is changed to - * match the control's cursor. - *

    - * - * @return the receiver's cursor or null - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.3 - */ - public Cursor getCursor() { - checkWidget(); - return cursor; - } - - /** - * Returns true if the receiver is detecting drag gestures, and - * false otherwise. - * - * @return the receiver's drag detect state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.3 - */ - public boolean getDragDetect() { - checkWidget(); - return isDragDetectEnabled(); - } - - private boolean isDragDetectEnabled() { - return (state & DRAG_DETECT) != 0; - } - - /** - * Sets the receiver's drag detect state. If the argument is - * true, the receiver will detect drag gestures, otherwise - * these gestures will be ignored. - * - * @param dragDetect - * the new drag detect state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.3 - */ - public void setDragDetect(boolean dragDetect) { - checkWidget(); - if (dragDetect) { - state |= DRAG_DETECT; - } else { - state &= ~DRAG_DETECT; - } - } - - protected boolean isDropTargetEnabled() { - return getData(DND.DROP_TARGET_KEY) != null; // check if DropTarget is present - } - - public void setAcceptDrops(boolean accept) { - getQMasterWidget().setAcceptDrops(accept); - } - - public void setDragEnabled(boolean enabled) { - // nothing by default - } - - public void dragEnd() { - dragStartPos = null; - } - - public void setDragNDropListener(DragNDropListener listener) { - this.dndListener = listener; - } - - public void unsetDragNDropListener(DragNDropListener listener) { - if (this.dndListener == listener) { - this.dndListener = null; - } - } - - protected final void sendDropEvent(QDropEvent event) { - if (this.dndListener == null) { - return; - } - dndListener.drop(event); - } - - protected final void sendDragMoveEvent(QDragMoveEvent event) { - if (this.dndListener == null) { - return; - } - dndListener.dragMove(event); - } - - protected final void sendDragLeaveEvent(QDragLeaveEvent event) { - if (this.dndListener == null) { - return; - } - dndListener.dragLeave(event); - } - - protected final void sendDragEnterEvent(QDragEnterEvent event) { - if (this.dndListener == null) { - return; - } - dndListener.dragEnter(event); - } - - /** - * Returns the font that the receiver will use to paint textual information. - * - * @return the receiver's font - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Font getFont() { - checkWidget(); - if (font != null) { - return font; - } - return defaultFont(); - } - - /** - * Returns the foreground color that the receiver will use to draw. - * - * @return the receiver's foreground color - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Color getForeground() { - checkWidget(); - return _getForegroundColor(); - } - - Color _getForegroundColor() { - if (foreground != null) { - return foreground; - } - return getDefaultForegroundColor(); - } - - protected Color getDefaultForegroundColor() { - return Color.qt_new(display, getColorFromPalette(ColorRole.WindowText)); - } - - protected QColor getColorFromPalette(ColorRole role) { - QPalette palette = getQWidget().palette(); - return palette.color(role); - } - - /** - * Returns layout data which is associated with the receiver. - * - * @return the receiver's layout data - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Object getLayoutData() { - checkWidget(); - return layoutData; - } - - /** - * Returns a point describing the receiver's location relative to its parent - * (or its display if its parent is null), unless the receiver is a shell. - * In this case, the point is relative to the display. - * - * @return the receiver's location - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Point getLocation() { - checkWidget(); - //forceResize(); - return QtSWTConverter.convert(getQWidget().pos()); - } - - /** - * Returns the receiver's pop up menu if it has one, or null if it does not. - * All controls may optionally have a pop up menu that is displayed when the - * user requests one for the control. The sequence of key strokes, button - * presses and/or button releases that are used to request a pop up menu is - * platform specific. - * - * @return the receiver's menu - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - @Override - public Menu getMenu() { - checkWidget(); - return menu; - } - - /** - * Returns the receiver's monitor. - * - * @return the receiver's monitor - * - * @since 3.0 - */ - public Monitor getMonitor() { - checkWidget(); - return Display.createMonitor(getQWidget()); - } - - /** - * Returns the receiver's parent, which must be a Composite or - * null when the receiver is a shell that was created with null or a display - * for a parent. - * - * @return the receiver's parent - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Composite getParent() { - checkWidget(); - return parent; - } - - Control[] getPath() { - int count = 0; - Shell shell = getShell(); - Control control = this; - while (control != shell) { - count++; - control = control.parent; - } - control = this; - Control[] result = new Control[count]; - while (control != shell) { - result[--count] = control; - control = control.parent; - } - return result; - } - - /** - * Returns the region that defines the shape of the control, or null if the - * control has the default shape. - * - * @return the region that defines the shape of the shell (or null) - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public Region getRegion() { - checkWidget(); - return region; - } - - /** - * Returns the receiver's shell. For all controls other than shells, this - * simply returns the control's nearest ancestor shell. Shells return - * themselves, even if they are children of other shells. - * - * @return the receiver's shell - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #getParent - */ - public Shell getShell() { - checkWidget(); - return parent.getShell(); - } - - /** - * Returns a point describing the receiver's size. The x coordinate of the - * result is the width of the receiver. The y coordinate of the result is - * the height of the receiver. - * - * @return the receiver's size - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Point getSize() { - checkWidget(); - return QtSWTConverter.convert(getQMasterWidget().frameSize()); - } - - int getClientWidth() { - return getQMasterWidget().rect().width(); - } - - /** - * Returns the receiver's tool tip text, or null if it has not been set. - * - * @return the receiver's tool tip text - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getToolTipText() { - checkWidget(); - return getQWidget().toolTip(); - } - - /** - * Returns true if this control is receiving OS-level touch events, - * otherwise false - *

    - * Note that this method will return false if the current platform does not support touch-based input. - * If this method does return true, gesture events will not be sent to the control. - * - * @return true if the widget is currently receiving touch events; false otherwise. - * - * @exception SWTException

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
    • - *
    - * - * @since 3.7 - */ - public boolean getTouchEnabled() { - checkWidget(); - return false; - } - - boolean hasFocus() { - return getQWidget().hasFocus(); - } - - /** - * Invokes platform specific functionality to allocate a new GC handle. - *

    - * IMPORTANT: This method is not part of the public API for - * Control. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

    - * - * @param data - * the platform specific GC data - * @return the platform specific GC handle - */ - public QPaintDeviceInterface internal_new_GC(GCData data) { - checkWidget(); - initGCData(data); - // we are in a Qt paint event - if (isOngoingPaintEvent) { - return getQWidget(); - } - // if we are not in a paint event, we need to temporarily render to a - // temp GC and apply the changes in the next paint event - temporaryGC = new QPicture(); - //System.out.println("creating tmp gc for " + this + " " + temporaryGC); - return temporaryGC; - } - - void initGCData(GCData data) { - data.device = display; - data.backgroundColor = getBackground(); - data.foregroundColor = getForeground(); - data.font = getFont(); - } - - /** - * Invokes platform specific functionality to dispose a GC handle. - *

    - * IMPORTANT: This method is not part of the public API for - * Control. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

    - * - * @param hDC - * the platform specific GC handle - * @param data - * the platform specific GC data - */ - public void internal_dispose_GC(QPaintDeviceInterface paintDevice, GCData data) { - checkWidget(); - if (!isOngoingPaintEvent) { - //System.out.println("tmp gc back " + this + " " + parent + " " + Thread.currentThread()); - //new RuntimeException().printStackTrace(); - getQWidget().update(); - } - } - - boolean isActive() { - Dialog dialog = display.getModalDialog(); - if (dialog != null) { - Shell dialogShell = dialog.parent; - if (dialogShell != null && !dialogShell.isDisposed()) { - if (dialogShell != getShell()) { - return false; - } - } - } - Shell shell = null; - Shell[] modalShells = display.modalShells; - if (modalShells != null) { - int bits = SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL; - int index = modalShells.length; - while (--index >= 0) { - Shell modal = modalShells[index]; - if (modal != null) { - if ((modal.style & bits) != 0) { - Control control = this; - while (control != null) { - if (control == modal) { - break; - } - control = control.parent; - } - if (control != modal) { - return false; - } - break; - } - if ((modal.style & SWT.PRIMARY_MODAL) != 0) { - if (shell == null) { - shell = getShell(); - } - if (modal.parent == shell) { - return false; - } - } - } - } - } - if (shell == null) { - shell = getShell(); - } - return shell.getEnabled(); - } - - /** - * Returns true if the receiver has the user-interface focus, - * and false otherwise. - * - * @return the receiver's focus state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public boolean isFocusControl() { - checkWidget(); - return _isFocusControl(); - } - - protected boolean _isFocusControl() { - Control focusControl = display.focusControl; - if (focusControl != null && !focusControl.isDisposed()) { - return this == focusControl; - } - return hasFocus(); - } - - boolean isFocusAncestor(Control control) { - while (control != null && control != this && !(control instanceof Shell)) { - control = control.parent; - } - return control == this; - } - - /** - * Returns true if the underlying operating system supports - * this reparenting, otherwise false - * - * @return true if the widget can be reparented, otherwise - * false - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public boolean isReparentable() { - checkWidget(); - return true; - } - - boolean isShowing() { - if (!isVisible()) { - return false; - } - Control control = this; - while (control != null) { - Point size = control.getSize(); - if (size.x == 0 || size.y == 0) { - return false; - } - control = control.parent; - } - return true; - } - - boolean isTabGroup() { - Control[] tabList = parent._getTabList(); - if (tabList != null) { - for (int i = 0; i < tabList.length; i++) { - if (tabList[i] == this) { - return true; - } - } - } - //TODO - return false; - } - - boolean isTabItem() { - Control[] tabList = parent._getTabList(); - if (tabList != null) { - for (int i = 0; i < tabList.length; i++) { - if (tabList[i] == this) { - return false; - } - } - } - return FocusPolicy.TabFocus.equals(getQWidget().focusPolicy()); - } - - /** - * Returns true if the receiver is visible and all ancestors up - * to and including the receiver's nearest ancestor shell are visible. - * Otherwise, false is returned. - * - * @return the receiver's visibility state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #getVisible - */ - public boolean isVisible() { - checkWidget(); - return getQMasterWidget().isVisible(); - } - - /** - * Returns true if the receiver is visible, and - * false otherwise. - *

    - * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

    - * - * @return the receiver's visibility state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public boolean getVisible() { - checkWidget(); - // TODO hack. some layouts are distroyed if we return the visibile state instead of the real visibility - return getQMasterWidget().isVisible(); - } - - /** - * Sets the receiver to receive touch events from the OS. By default, touch - * events are not delivered to a control unless specifically requested for that control. - * This is independent of whether or not there are any TouchListener instances - * registered for the control. - * - * @param enabled the new touch-enabled state. - * - * @exception SWTException
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
    • - *
    - * - * @since 3.7 - */ - public void setTouchEnabled(boolean enabled) { - checkWidget(); - } - - /** - * Marks the receiver as visible if the argument is true, and - * marks it invisible otherwise. - *

    - * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

    - * - * @param visible - * the new visibility state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setVisible(final boolean visible) { - checkWidget(); - _setVisible(getQMasterWidget(), visible); - } - - protected void _setVisible(QWidget widget, final boolean visible) { - //this.visible = visible; - - boolean oldVisibility = getQMasterWidget().isVisible(); - - // we always set the visibility, this is important during initialization, when all widgets are not visible, but some are explicitly hidden - widget.setVisible(visible); - - if (oldVisibility == visible) { // bail out if state has not changed - return; - } - - // TODO hack - if (widget.parentWidget() != null) { - widget.parentWidget().update(); - } - - if (getQMasterWidget().isVisible()) { - sendEvent(SWT.Show); - if (isDisposed()) { - return; - } - } - Control control = null; - boolean fixFocus = false; - if (getQMasterWidget().isHidden()) { - if (display.focusEvent != SWT.FocusOut) { - control = display.getFocusControl(); - fixFocus = isFocusAncestor(control); - } - - sendEvent(SWT.Hide); - if (isDisposed()) { - return; - } - } - if (fixFocus) { - fixFocus(control); - } - } - - void markLayout(boolean changed, boolean all) { - /* Do nothing */ - } - - Decorations menuShell() { - return parent.menuShell(); - } - - boolean mnemonicHit(char key) { - return false; - } - - boolean mnemonicMatch(char key) { - return false; - } - - /** - * Moves the receiver above the specified control in the drawing order. If - * the argument is null, then the receiver is moved to the top of the - * drawing order. The control at the top of the drawing order will not be - * covered by other controls even if they occupy intersecting areas. - * - * @param control - * the sibling control (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the control has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see Control#moveBelow - * @see Composite#getChildren - */ - public void moveAbove(Control control) { - checkWidget(); - if (control != null) { - if (control.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (parent != control.parent) { - return; - } - - Control controlAbove = null; - List children = getQWidget().children(); - boolean next = false; - for (QObject child : children) { - Widget widget = display.findControl(child); - if (!next && widget == control) { - next = true; - continue; - } - if (next) { - if (widget != null && widget != this) { - if (widget instanceof Control) { - controlAbove = (Control) widget; - break; - } - } - } - } - if (controlAbove != null) { - moveBelow(controlAbove); - } else { - getQMasterWidget().raise(); - } - } else { - getQMasterWidget().raise(); - } - } - - /** - * Moves the receiver below the specified control in the drawing order. If - * the argument is null, then the receiver is moved to the bottom of the - * drawing order. The control at the bottom of the drawing order will be - * covered by all other controls which occupy intersecting areas. - * - * @param control - * the sibling control (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the control has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see Control#moveAbove - * @see Composite#getChildren - */ - public void moveBelow(Control control) { - checkWidget(); - if (control != null) { - if (control.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (parent != control.parent) { - return; - } - getQMasterWidget().stackUnder(control.getQWidget()); - } else { - getQMasterWidget().lower(); - } - } - - Accessible new_Accessible(Control control) { - return Accessible.internal_new_Accessible(this); - } - - @Override - GC new_GC(GCData data) { - return GC.qt_new(this, data); - } - - /** - * Causes the receiver to be resized to its preferred size. For a composite, - * this involves computing the preferred size from its layout, if there is - * one. - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #computeSize(int, int, boolean) - */ - public void pack() { - checkWidget(); - pack(true); - } - - /** - * Causes the receiver to be resized to its preferred size. For a composite, - * this involves computing the preferred size from its layout, if there is - * one. - *

    - * If the changed flag is true, it indicates that the - * receiver's contents have changed, therefore any caches that a - * layout manager containing the control may have been keeping need to be - * flushed. When the control is resized, the changed flag will be - * false, so layout manager caches can be retained. - *

    - * - * @param changed - * whether or not the receiver's contents have changed - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #computeSize(int, int, boolean) - */ - public void pack(boolean changed) { - checkWidget(); - setSize(computeSize(SWT.DEFAULT, SWT.DEFAULT, changed)); - } - - /** - * Prints the receiver and all children. - * - * @param gc - * the gc where the drawing occurs - * @return true if the operation was successful and - * false otherwise - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the gc is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the gc has been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public boolean print(GC gc) { - checkWidget(); - if (gc == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (gc.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - - // TODO - // QPixmap pix; - // pix.grabWidget(myMainWindowWidget); - // QImage im = pix.convertToImage(); - return false; - } - - /** - * Causes the entire bounds of the receiver to be marked as needing to be - * redrawn. The next time a paint request is processed, the control will be - * completely painted, including the background. - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #update() - * @see PaintListener - * @see SWT#Paint - * @see SWT#NO_BACKGROUND - * @see SWT#NO_REDRAW_RESIZE - * @see SWT#NO_MERGE_PAINTS - * @see SWT#DOUBLE_BUFFERED - */ - public void redraw() { - checkWidget(); - _redraw(); - } - - void _redraw() { - getQMasterWidget().update(); - if (getQMasterWidget() != getQWidget()) { - getQWidget().update(); - } - redrawChildren(); - } - - /** - * Causes the rectangular area of the receiver specified by the arguments to - * be marked as needing to be redrawn. The next time a paint request is - * processed, that area of the receiver will be painted, including the - * background. If the all flag is true, any - * children of the receiver which intersect with the specified area will - * also paint their intersecting areas. If the all flag is - * false, the children will not be painted. - * - * @param x - * the x coordinate of the area to draw - * @param y - * the y coordinate of the area to draw - * @param width - * the width of the area to draw - * @param height - * the height of the area to draw - * @param all - * true if children should redraw, and - * false otherwise - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #update() - * @see PaintListener - * @see SWT#Paint - * @see SWT#NO_BACKGROUND - * @see SWT#NO_REDRAW_RESIZE - * @see SWT#NO_MERGE_PAINTS - * @see SWT#DOUBLE_BUFFERED - */ - public void redraw(int x, int y, int width, int height, boolean all) { - checkWidget(); - getQMasterWidget().update(x, y, width, height); - if (getQMasterWidget() != getQWidget()) { - getQWidget().update(x, y, width, height); - } - - if (all) { - redrawChildren(); - } - } - - void redrawChildren() { - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is moved or resized. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see ControlListener - * @see #addControlListener - */ - public void removeControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Move, listener); - eventTable.unhook(SWT.Resize, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when a drag gesture occurs. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see DragDetectListener - * @see #addDragDetectListener - * - * @since 3.3 - */ - public void removeDragDetectListener(DragDetectListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.DragDetect, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control gains or loses focus. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see FocusListener - * @see #addFocusListener - */ - public void removeFocusListener(FocusListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.FocusIn, listener); - eventTable.unhook(SWT.FocusOut, listener); - } - - /** - * Removes the listener from the collection of listeners who will - * be notified when a gesture is performed on the control - * - * @param listener the listener which should no longer be notified - * - * @exception IllegalArgumentException
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
    • - *
    - * - * @see GestureListener - * @see #addGestureListener - * @since 3.7 - */ - public void removeGestureListener (GestureListener listener) { - checkWidget(); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - if (eventTable == null) return; - eventTable.unhook(SWT.Gesture, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the help events are generated for the control. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see HelpListener - * @see #addHelpListener - */ - public void removeHelpListener(HelpListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Help, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when keys are pressed and released on the system keyboard. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see KeyListener - * @see #addKeyListener - */ - public void removeKeyListener(KeyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.KeyUp, listener); - eventTable.unhook(SWT.KeyDown, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the platform-specific context menu trigger has occurred. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MenuDetectListener - * @see #addMenuDetectListener - * - * @since 3.3 - */ - public void removeMenuDetectListener(MenuDetectListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.MenuDetect, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the mouse passes or hovers over controls. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MouseTrackListener - * @see #addMouseTrackListener - */ - public void removeMouseTrackListener(MouseTrackListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.MouseEnter, listener); - eventTable.unhook(SWT.MouseExit, listener); - eventTable.unhook(SWT.MouseHover, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when mouse buttons are pressed and released. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MouseListener - * @see #addMouseListener - */ - public void removeMouseListener(MouseListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.MouseDown, listener); - eventTable.unhook(SWT.MouseUp, listener); - eventTable.unhook(SWT.MouseDoubleClick, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the mouse moves. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MouseMoveListener - * @see #addMouseMoveListener - */ - public void removeMouseMoveListener(MouseMoveListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.MouseMove, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the mouse wheel is scrolled. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MouseWheelListener - * @see #addMouseWheelListener - * - * @since 3.3 - */ - public void removeMouseWheelListener(MouseWheelListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.MouseWheel, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the receiver needs to be painted. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see PaintListener - * @see #addPaintListener - */ - public void removePaintListener(PaintListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Paint, listener); - } - - /** - * Removes the listener from the collection of listeners who will - * be notified when touch events occur. - * - * @param listener the listener which should no longer be notified - * - * @exception IllegalArgumentException
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
    • - *
    - * - * @see TouchListener - * @see #addTouchListener - * @since 3.7 - */ - public void removeTouchListener(TouchListener listener) { - checkWidget(); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - if (eventTable == null) return; - eventTable.unhook (SWT.Touch, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when traversal events occur. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see TraverseListener - * @see #addTraverseListener - */ - public void removeTraverseListener(TraverseListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Traverse, listener); - } - - void sendMove() { - sendEvent(SWT.Move); - } - - void sendResize() { - sendEvent(SWT.Resize); - } - - /** - * Sets the receiver's background color to the color specified by the - * argument, or to the default system color for the control if the argument - * is null. - *

    - * Note: This operation is a hint and may be overridden by the platform. For - * example, on Windows the background of a Button cannot be changed. - *

    - * - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setBackground(Color color) { - checkWidget(); - _setBackground(color); - } - - void _setBackground(Color color) { - if (color != null) { - if (color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - if (color == null) { - background = getDefaultBackgroundColor(); - } else { - background = color; - } - if (backgroundImage == null) { - updateBackgroundColor(); - } - } - - protected Color getDefaultBackgroundColor() { - return display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); - } - - /* refactored: was checkBackground */ - protected void checkAndUpdateBackground() { - Shell shell = getShell(); - if (this == shell) { - return; - } - state &= ~PARENT_BACKGROUND; - Composite composite = parent; - do { - int mode = composite.getBackgroundMode(); - if (mode != 0) { - if (mode == SWT.INHERIT_DEFAULT) { - Control control = this; - do { - if ((control.state & THEME_BACKGROUND) == 0) { - return; - } - control = control.parent; - } while (control != composite); - } - state |= PARENT_BACKGROUND; - return; - } - if (composite == shell) { - break; - } - composite = composite.parent; - } while (true); - } - - protected void updateBackground() { - if ((state & PARENT_BACKGROUND) == 0) { - return; - } - Control control = findBackgroundImageControl(); - if (control == null) { - control = this; - } - if (control.backgroundImage != null) { - applyBackgroundImage(control.backgroundImage); - return; - } - - control = findBackgroundColorControl(); - if (control == null) { - control = this; - } - applyBackgroundColor(control.background != null ? control.background : control.getDefaultBackgroundColor()); - } - - Control findBackgroundControl() { - if (background != null || backgroundImage != null) { - return this; - } - return (state & PARENT_BACKGROUND) != 0 ? parent.findBackgroundControl() : null; - } - - protected void applyBackgroundColor(Color color) { - updatedPalette(color, getBackgroundColorRoles()); - } - - protected void updatedPalette(Color color, ColorRole[] colorRoles) { - QPalette palette = getQMasterWidget().palette(); - for (ColorRole role : colorRoles) { - palette.setBrush(role, new QBrush(color.getColor())); - } - getQMasterWidget().setAutoFillBackground(true); - getQMasterWidget().setPalette(palette); - } - - protected ColorRole[] getBackgroundColorRoles() { - return new ColorRole[] { ColorRole.Window, ColorRole.Base, ColorRole.Button }; - } - - protected ColorRole[] getBackgroundImageRoles() { - return new QPalette.ColorRole[] { QPalette.ColorRole.Window, QPalette.ColorRole.Base }; - } - - /** - * Sets the receiver's background image to the image specified by the - * argument, or to the default system color for the control if the argument - * is null. The background image is tiled to fill the available space. - *

    - * Note: This operation is a hint and may be overridden by the platform. For - * example, on Windows the background of a Button cannot be changed. - *

    - * - * @param image - * the new image (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    • ERROR_INVALID_ARGUMENT - if the argument is not a - * bitmap
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.2 - */ - public void setBackgroundImage(Image image) { - checkWidget(); - if (image != null) { - if (image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (!image.isBitmap()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - } - if (image == null) { - backgroundImage = null; - updateBackgroundColor(); - } else { - backgroundImage = image; - updateBackgroundImage(); - } - } - - void applyBackgroundImage(Image image) { - QPalette palette = getQMasterWidget().palette(); - ColorRole[] bkRoles = getBackgroundImageRoles(); - for (ColorRole bkRole : bkRoles) { - // if (bgControl != this && canInheritBackgroundImage()) { - // palette.setColor(bkRole, null); - // // If background is inherited then brush is set to null - // palette.setBrush(bkRole, null); - // } else { - palette.setBrush(bkRole, new QBrush(image.getQPixmap())); - // } - } - getQMasterWidget().setPalette(palette); - getQMasterWidget().setAutoFillBackground(true); - } - - protected boolean canInheritBackgroundImage() { - return true; - } - - /** - * Sets the receiver's size and location to the rectangular area specified - * by the arguments. The x and y arguments are - * relative to the receiver's parent (or its display if its parent is null), - * unless the receiver is a shell. In this case, the x and - * y arguments are relative to the display. - *

    - * Note: Attempting to set the width or height of the receiver to a negative - * number will cause that value to be set to zero instead. - *

    - * - * @param x - * the new x coordinate for the receiver - * @param y - * the new y coordinate for the receiver - * @param width - * the new width for the receiver - * @param height - * the new height for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setBounds(int x, int y, int width, int height) { - checkWidget(); - setBounds(x, y, width, height, true, true); - } - - protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) { - if (resize) { - Point oldSize = QtSWTConverter.convert(getQMasterWidget().size()); - if (oldSize.x != width || oldSize.y != height) { - getQMasterWidget().resize(width, height); - state |= RESIZE_OCCURRED; - } - } - if (move) { - Point oldPos = QtSWTConverter.convert(getQMasterWidget().pos()); - if (oldPos.x != x || oldPos.y != y) { - getQMasterWidget().move(x, y); - state |= MOVE_OCCURRED; - } - } - } - - /** - * Sets the receiver's size and location to the rectangular area specified - * by the argument. The x and y fields of the - * rectangle are relative to the receiver's parent (or its display if its - * parent is null). - *

    - * Note: Attempting to set the width or height of the receiver to a negative - * number will cause that value to be set to zero instead. - *

    - * - * @param rect - * the new bounds for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setBounds(Rectangle rect) { - checkWidget(); - if (rect == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setBounds(rect.x, rect.y, rect.width, rect.height, true, true); - } - - /** - * If the argument is true, causes the receiver to have all - * mouse events delivered to it until the method is called with - * false as the argument. Note that on some platforms, a mouse - * button must currently be down for capture to be assigned. - * - * @param capture - * true to capture the mouse, and false - * to release it - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setCapture(boolean capture) { - checkWidget(); - if (capture) { - getQMasterWidget().grabMouse(); - } else { - getQMasterWidget().releaseMouse(); - } - } - - /** - * Sets the receiver's cursor to the cursor specified by the argument, or to - * the default cursor for that kind of control if the argument is null. - *

    - * When the mouse pointer passes over a control its appearance is changed to - * match the control's cursor. - *

    - * - * @param cursor - * the new cursor (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setCursor(Cursor cursor) { - checkWidget(); - if (cursor != null && cursor.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - this.cursor = cursor; - if (cursor == null) { - getQMasterWidget().setCursor(null); - } else { - getQMasterWidget().setCursor(cursor.cursor); - } - } - - /** - * Returns true if the receiver is enabled and all ancestors up - * to and including the receiver's nearest ancestor shell are enabled. - * Otherwise, false is returned. A disabled control is - * typically not selectable from the user interface and draws with an - * inactive or "grayed" look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #getEnabled - */ - public boolean isEnabled() { - checkWidget(); - return getQMasterWidget().isEnabled(); - } - - /** - * Returns true if the receiver is enabled, and - * false otherwise. A disabled control is typically not - * selectable from the user interface and draws with an inactive or "grayed" - * look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #isEnabled - */ - public boolean getEnabled() { - checkWidget(); - return enabled; - } - - /** - * Enables the receiver if the argument is true, and disables - * it otherwise. A disabled control is typically not selectable from the - * user interface and draws with an inactive or "grayed" look. - * - * @param enabled - * the new enabled state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setEnabled(boolean enabled) { - checkWidget(); - /* - * Feature in Windows. If the receiver has focus, disabling the receiver - * causes no window to have focus. The fix is to assign focus to the - * first ancestor window that takes focus. If no window will take focus, - * set focus to the desktop. - */ - Control control = null; - boolean fixFocus = false; - if (!enabled) { - if (display.focusEvent != SWT.FocusOut) { - control = display.getFocusControl(); - fixFocus = isFocusAncestor(control); - } - } - enableWidget(enabled); - if (fixFocus) { - fixFocus(control); - } - } - - void enableWidget(boolean enabled) { - this.enabled = enabled; - getQMasterWidget().setEnabled(enabled); - } - - boolean setFixedFocus() { - if ((style & SWT.NO_FOCUS) != 0) { - return false; - } - return forceFocus(FocusReason.OtherFocusReason); - } - - /** - * Causes the receiver to have the keyboard focus, such that all - * keyboard events will be delivered to it. Focus reassignment will respect - * applicable platform constraints. - * - * @return true if the control got focus, and - * false if it was unable to. - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #forceFocus - */ - public boolean setFocus() { - checkWidget(); - return setFocus(FocusReason.OtherFocusReason); - } - - protected boolean setFocus(FocusReason focusReason) { - if ((style & SWT.NO_FOCUS) != 0) { - return false; - } - return forceFocus(focusReason); - } - - /** - * Sets the font that the receiver will use to paint textual information to - * the font specified by the argument, or to the default font for that kind - * of control if the argument is null. - * - * @param font - * the new font (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setFont(Font font) { - checkWidget(); - if (font != null && font.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.font = font; - if (font == null) { - getQMasterWidget().setFont(null); - } else { - getQMasterWidget().setFont(font.getQFont()); - } - } - - /** - * Sets the receiver's foreground color to the color specified by the - * argument, or to the default system color for the control if the argument - * is null. - *

    - * Note: This operation is a hint and may be overridden by the platform. - *

    - * - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setForeground(Color color) { - checkWidget(); - Color oldColor = foreground; - if (color != null) { - if (color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - if (foreground == null && color == null) { - return; - } - if (color == null) { - foreground = null; - } else { - foreground = Color.qt_new(display, color.getColor()); - } - if (oldColor != null) { - oldColor.dispose(); - } - applyForegroundColor(foreground); - } - - protected void updateForeground() { - if (foreground != null) { - applyForegroundColor(foreground); - } - } - - void applyForegroundColor(Color color) { - updatedPalette(color, getForegroundColorRoles()); - } - - private ColorRole[] getForegroundColorRoles() { - return new ColorRole[] { QPalette.ColorRole.WindowText, QPalette.ColorRole.Text, QPalette.ColorRole.ButtonText }; - } - - /** - * Sets the layout data associated with the receiver to the argument. - * - * @param layoutData - * the new layout data for the receiver. - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setLayoutData(Object layoutData) { - checkWidget(); - this.layoutData = layoutData; - } - - /** - * Sets the receiver's location to the point specified by the arguments - * which are relative to the receiver's parent (or its display if its parent - * is null), unless the receiver is a shell. In this case, the point is - * relative to the display. - * - * @param x - * the new x coordinate for the receiver - * @param y - * the new y coordinate for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setLocation(int x, int y) { - checkWidget(); - setBounds(x, y, 0, 0, true, false); - } - - /** - * Sets the receiver's location to the point specified by the arguments - * which are relative to the receiver's parent (or its display if its parent - * is null), unless the receiver is a shell. In this case, the point is - * relative to the display. - * - * @param location - * the new location for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setLocation(Point location) { - checkWidget(); - if (location == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setLocation(location.x, location.y); - } - - /** - * Sets the receiver's pop up menu to the argument. All controls may - * optionally have a pop up menu that is displayed when the user requests - * one for the control. The sequence of key strokes, button presses and/or - * button releases that are used to request a pop up menu is platform - * specific. - *

    - * Note: Disposing of a control that has a pop up menu will dispose of the - * menu. To avoid this behavior, set the menu to null before the control is - * disposed. - *

    - * - * @param menu - * the new pop up menu - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_MENU_NOT_POP_UP - the menu is not a pop up menu
    • - *
    • ERROR_INVALID_PARENT - if the menu is not in the same - * widget tree
    • - *
    • ERROR_INVALID_ARGUMENT - if the menu has been disposed - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setMenu(Menu menu) { - checkWidget(); - if (menu != null) { - if (menu.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if ((menu.style & SWT.POP_UP) == 0) { - error(SWT.ERROR_MENU_NOT_POP_UP); - } - if (menu.parent != menuShell()) { - error(SWT.ERROR_INVALID_PARENT); - } - } - this.menu = menu; - } - - boolean setRadioFocus(boolean tabbing) { - return false; - } - - boolean setRadioSelection(boolean value) { - return false; - } - - /** - * If the argument is false, causes subsequent drawing - * operations in the receiver to be ignored. No drawing of any kind can - * occur in the receiver until the flag is set to true. Graphics operations - * that occurred while the flag was false are lost. When the - * flag is set to true, the entire widget is marked as needing - * to be redrawn. Nested calls to this method are stacked. - *

    - * Note: This operation is a hint and may not be supported on some platforms - * or for some widgets. - *

    - * - * @param redraw - * the new redraw state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #redraw(int, int, int, int, boolean) - * @see #update() - */ - public void setRedraw(boolean redraw) { - checkWidget(); - getQMasterWidget().setUpdatesEnabled(redraw); - } - - /** - * Sets the shape of the control to the region specified by the argument. - * When the argument is null, the default shape of the control is restored. - * - * @param region - * the region that defines the shape of the control (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the region has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public void setRegion(Region region) { - checkWidget(); - if (region != null && region.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.region = region; - getQMasterWidget().setMask(QtSWTConverter.convert(region)); - } - - boolean setSavedFocus() { - return forceFocus(); - } - - /** - * Sets the receiver's size to the point specified by the arguments. - *

    - * Note: Attempting to set the width or height of the receiver to a negative - * number will cause that value to be set to zero instead. - *

    - * - * @param width - * the new width for the receiver - * @param height - * the new height for the receiver - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setSize(int width, int height) { - checkWidget(); - setBounds(0, 0, Math.max(0, width), Math.max(0, height), false, true); - } - - /** - * Sets the receiver's size to the point specified by the argument. - *

    - * Note: Attempting to set the width or height of the receiver to a negative - * number will cause them to be set to zero instead. - *

    - * - * @param size - * the new size for the receiver - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the point is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setSize(Point size) { - checkWidget(); - if (size == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setSize(size.x, size.y); - } - - boolean setTabGroupFocus() { - return setTabItemFocus(); - } - - boolean setTabItemFocus() { - if (!isShowing()) { - return false; - } - return forceFocus(); - } - - /** - * Sets the receiver's tool tip text to the argument, which may be null - * indicating that the default tool tip for the control will be shown. For a - * control that has a default tool tip, such as the Tree control on Windows, - * setting the tool tip text to an empty string replaces the default, - * causing no tool tip text to be shown. - *

    - * The mnemonic indicator (character '&') is not displayed in a tool - * tip. To display a single '&' in the tool tip, the character '&' - * can be escaped by doubling it in the string. - *

    - * - * @param string - * the new tool tip text (or null) - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setToolTipText(String string) { - checkWidget(); - getQMasterWidget().setToolTip(string); - } - - /** - * Returns a point which is the result of converting the argument, which is - * specified in display relative coordinates, to coordinates relative to the - * receiver. - *

    - * - * @param x - * the x coordinate to be translated - * @param y - * the y coordinate to be translated - * @return the translated coordinates - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @since 2.1 - */ - public Point toControl(int x, int y) { - checkWidget(); - Point mappedPoint = QtSWTConverter.convert(getQMasterWidget().mapFromGlobal(new QPoint(x, y))); - if (isMirrored()) { - mappedPoint.x = getClientWidth() - mappedPoint.x; - } - return mappedPoint; - } - - boolean isMirrored() { - return (style & SWT.MIRRORED) != 0; - } - - /** - * Returns a point which is the result of converting the argument, which is - * specified in display relative coordinates, to coordinates relative to the - * receiver. - *

    - * - * @param point - * the point to be translated (must not be null) - * @return the translated coordinates - * - * @exception IllegalArgumentException - *

      - *
    • ERROR_NULL_ARGUMENT - if the point is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - */ - public Point toControl(Point point) { - checkWidget(); - if (point == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return toControl(point.x, point.y); - } - - /** - * Returns a point which is the result of converting the argument, which is - * specified in coordinates relative to the receiver, to display relative - * coordinates. - *

    - * - * @param x - * the x coordinate to be translated - * @param y - * the y coordinate to be translated - * @return the translated coordinates - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @since 2.1 - */ - public Point toDisplay(int x, int y) { - checkWidget(); - if (isMirrored()) { - x = getClientWidth() - x; - } - return QtSWTConverter.convert(getQMasterWidget().mapToGlobal(new QPoint(x, y))); - } - - /** - * Returns a point which is the result of converting the argument, which is - * specified in coordinates relative to the receiver, to display relative - * coordinates. - *

    - * - * @param point - * the point to be translated (must not be null) - * @return the translated coordinates - * - * @exception IllegalArgumentException - *

      - *
    • ERROR_NULL_ARGUMENT - if the point is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - */ - public Point toDisplay(Point point) { - checkWidget(); - System.out.println("toDisplay:" + point); - if (point == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return toDisplay(point.x, point.y); - } - - boolean translateMnemonic(Event event, Control control) { - if (control == this) { - return false; - } - if (!isVisible() || !isEnabled()) { - return false; - } - event.doit = mnemonicMatch(event.character); - return traverse(event); - } - - boolean traverse(Event event) { - /* - * It is possible (but unlikely), that application code could have - * disposed the widget in the traverse event. If this happens, return - * true to stop further event processing. - */ - sendEvent(SWT.Traverse, event); - if (isDisposed()) { - return true; - } - if (!event.doit) { - return false; - } - switch (event.detail) { - case SWT.TRAVERSE_NONE: - return true; - case SWT.TRAVERSE_ESCAPE: - return traverseEscape(); - case SWT.TRAVERSE_RETURN: - return traverseReturn(); - case SWT.TRAVERSE_TAB_NEXT: - return traverseGroup(true); - case SWT.TRAVERSE_TAB_PREVIOUS: - return traverseGroup(false); - case SWT.TRAVERSE_ARROW_NEXT: - return traverseItem(true); - case SWT.TRAVERSE_ARROW_PREVIOUS: - return traverseItem(false); - case SWT.TRAVERSE_MNEMONIC: - return traverseMnemonic(event.character); - case SWT.TRAVERSE_PAGE_NEXT: - return traversePage(true); - case SWT.TRAVERSE_PAGE_PREVIOUS: - return traversePage(false); - } - return false; - } - - /** - * Based on the argument, perform one of the expected platform traversal - * action. The argument should be one of the constants: - * SWT.TRAVERSE_ESCAPE, SWT.TRAVERSE_RETURN, - * SWT.TRAVERSE_TAB_NEXT, - * SWT.TRAVERSE_TAB_PREVIOUS, - * SWT.TRAVERSE_ARROW_NEXT and - * SWT.TRAVERSE_ARROW_PREVIOUS. - * - * @param traversal - * the type of traversal - * @return true if the traversal succeeded - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public boolean traverse(int traversal) { - checkWidget(); - Event event = new Event(); - event.doit = true; - event.detail = traversal; - return traverse(event); - } - - boolean traverseEscape() { - return false; - } - - boolean traverseGroup(boolean next) { - Control root = computeTabRoot(); - Control group = computeTabGroup(); - Control[] list = root.computeTabList(); - int length = list.length; - int index = 0; - while (index < length) { - if (list[index] == group) { - break; - } - index++; - } - /* - * It is possible (but unlikely), that application code could have - * disposed the widget in focus in or out events. Ensure that a disposed - * widget is not accessed. - */ - if (index == length) { - return false; - } - int start = index, offset = next ? 1 : -1; - while ((index = (index + offset + length) % length) != start) { - Control control = list[index]; - if (!control.isDisposed() && control.setTabGroupFocus()) { - return true; - } - } - if (group.isDisposed()) { - return false; - } - return group.setTabGroupFocus(); - } - - boolean traverseItem(boolean next) { - Control[] children = parent._getChildren(); - int length = children.length; - int index = 0; - while (index < length) { - if (children[index] == this) { - break; - } - index++; - } - /* - * It is possible (but unlikely), that application code could have - * disposed the widget in focus in or out events. Ensure that a disposed - * widget is not accessed. - */ - if (index == length) { - return false; - } - int start = index, offset = next ? 1 : -1; - while ((index = (index + offset + length) % length) != start) { - Control child = children[index]; - if (!child.isDisposed() && child.isTabItem()) { - if (child.setTabItemFocus()) { - return true; - } - } - } - return false; - } - - boolean traverseMnemonic(char key) { - // TODO - // if (mnemonicHit(key)) { - // OS.SendMessage(handle, OS.WM_CHANGEUISTATE, OS.UIS_INITIALIZE, 0); - // return true; - // } - return false; - } - - boolean traversePage(boolean next) { - return false; - } - - boolean traverseReturn() { - return false; - } - - /** - * Forces all outstanding paint requests for the widget to be processed - * before this method returns. If there are no outstanding paint request, - * this method does nothing. - *

    - * Note: This method does not cause a redraw. - *

    - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #redraw() - * @see #redraw(int, int, int, int, boolean) - * @see PaintListener - * @see SWT#Paint - */ - public void update() { - checkWidget(); - _update(); - } - - void _update() { - QCoreApplication.processEvents(ProcessEventsFlag.ExcludeUserInputEvents); - } - - void updateBackgroundColor() { - Control control = findBackgroundColorControl(); - if (control == null) { - control = this; - } - applyBackgroundColor(control.background); - } - - Control findBackgroundColorControl() { - if (background != null) { - return this; - } - if (parent == null) { - return null; - } - return (state & PARENT_BACKGROUND) != 0 ? parent.findBackgroundColorControl() : null; - } - - void updateBackgroundImage() { - Control control = findBackgroundImageControl(); - if (control == null) { - control = this; - } - applyBackgroundImage(control.backgroundImage); - } - - Control findBackgroundImageControl() { - if (backgroundImage != null) { - return this; - } - if (parent == null) { - return null; - } - return (state & PARENT_BACKGROUND) != 0 ? parent.findBackgroundImageControl() : null; - } - - void updateBackgroundMode() { - int oldState = state & PARENT_BACKGROUND; - checkAndUpdateBackground(); - if (oldState != (state & PARENT_BACKGROUND)) { - updateBackground(); - } - } - - void updateFont(Font oldFont, Font newFont) { - if (getFont().equals(oldFont)) { - setFont(newFont); - } - } - - void updateImages() { - /* Do nothing */ - } - - void updateLayout(boolean all) { - /* Do nothing */ - } - - /** - * Changes the parent of the widget to be the one provided if the underlying - * operating system supports this feature. Returns true if the - * parent is successfully changed. - * - * @param parent - * the new parent for the control. - * @return true if the parent is changed and false - * otherwise. - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
    • - *
    • ERROR_NULL_ARGUMENT - if the parent is - * null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public boolean setParent(Composite parent) { - checkWidget(); - if (parent == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (parent.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - if (this.parent == parent) { - return true; - } - if (!isReparentable()) { - return false; - } - releaseParent(); - Shell newShell = parent.getShell(), oldShell = getShell(); - Decorations newDecorations = parent.menuShell(), oldDecorations = menuShell(); - if (oldShell != newShell || oldDecorations != newDecorations) { - Menu[] menus = oldShell.findMenus(this); - fixChildren(newShell, oldShell, newDecorations, oldDecorations, menus); - } - getQMasterWidget().setParent(parent.getQWidget()); - return true; - } - - @Override - public boolean qtPaintEvent(QObject source, QPaintEvent paintEvent) { - if (source == getQWidget()) { - try { - isOngoingPaintEvent = true; - renderTemporaryGC(paintEvent.rect()); - sendPaintEvent(paintEvent); - } finally { - isOngoingPaintEvent = false; - } - } - return false; - } - - private void renderTemporaryGC(QRect rect) { - // Render the buffer created outside the paint event, if any - if (temporaryGC != null) { - //System.out.println("render tmp gc for " + this + " " + rect + " " + temporaryGC); - QPainter painter = new QPainter(getQWidget()); - //painter.setClipRect(rect); - painter.drawPicture(0, 0, temporaryGC); - painter.end(); - temporaryGC = null; - } - } - - private void sendPaintEvent(QPaintEvent paintEvent) { - if (!hooks(SWT.Paint) && !filters(SWT.Paint)) { - return; - } - - QRect rect = paintEvent.rect(); - int x = rect.x(); - int y = rect.y(); - int width = rect.width(); - int height = rect.height(); - GCData data = new GCData(); - initGCData(data); - GC gc = GC.qt_new(this, getQWidget(), data); - Event event = new Event(); - event.count = 0; - if (isMirrored()) { - event.x = getClientWidth() - x - width; - } else { - event.x = x; - } - event.y = y; - event.width = width; - event.height = height; - event.gc = gc; - try { - gc.setClipping(x, y, width, height); - sendEvent(SWT.Paint, event); - } finally { - if (!gc.isDisposed()) { - gc.dispose(); - } - } - } - - @Override - public boolean qtResizeEvent(QObject source, QResizeEvent resizeEvent) { - if (source == getQWidget()) { - sendResize(); - } - return super.qtResizeEvent(source, resizeEvent); - } - - @Override - public boolean qtMoveEvent(QObject source, QMoveEvent moveEvent) { - // if (source == getQMasterWidget()) { - // sendMove(); - // } - return true; - } - - @Override - public boolean qtKeyPressEvent(QObject source, QKeyEvent qEvent) { - // if ( ( ( state & NO_KEY_PROPAGATE ) != 0 ) ) { - // return true; - // } - if (source == getQWidget()) { - return sendKeyEvent(SWT.KeyDown, qEvent); - } - return false; - } - - @Override - public boolean qtKeyReleaseEvent(QObject source, QKeyEvent qEvent) { - if (source == getQWidget()) { - return sendKeyEvent(SWT.KeyUp, qEvent); - } - // if ( ( ( state & NO_KEY_PROPAGATE ) != 0 ) ) { - // return true; - // } - return false; - } - - boolean sendKeyEvent(int type, QKeyEvent qEvent) { - Event event = translateKeyEvent(qEvent); - sendEvent(type, event); - if (isDisposed()) { - return true; - } - return !event.doit; - } - - private final Event translateKeyEvent(QKeyEvent qEvent) { - Event event = new Event(); - switch (Key.resolve(qEvent.key())) { - case Key_Enter: - case Key_Return: - event.character = SWT.CR; - break; - case Key_Backspace: - event.character = SWT.BS; - break; - case Key_Delete: - event.character = SWT.DEL; - break; - case Key_Escape: - event.character = SWT.ESC; - break; - case Key_Tab: - event.character = SWT.TAB; - break; - default: - String text = qEvent.text(); - if (text != null && text.length() > 0) { - event.character = qEvent.text().charAt(0); - } - break; - } - event.keyCode = KeyUtil.translateKey(qEvent); - if (event.keyCode == 0) {// keyCode defaults to unicode value - String text = qEvent.text(); - if (text != null && text.length() > 0) { - event.keyCode = qEvent.text().charAt(0); - } - } - event.stateMask = KeyUtil.translateModifiers(qEvent.modifiers()); - return event; - } - - protected boolean sendMouseEvent(int type, QMouseEvent mouseEvent) { - return sendMouseEvent(type, mouseEvent, 0); - } - - protected boolean sendMouseEvent(int type, QMouseEvent mouseEvent, int count) { - Event event = translateMouseEvent(mouseEvent, count); - sendEvent(type, event); - if (isDisposed()) { - return true; - } - return !event.doit; - } - - private Event translateMouseEvent(QMouseEvent mouseEvent, int count) { - Event event = new Event(); - QPoint pos = mouseEvent.pos(); - event.x = pos.x(); - event.y = pos.y(); - event.count = count; - event.button = translateMouseButton(mouseEvent.button()); - event.stateMask = KeyUtil.translateModifiers(mouseEvent.modifiers()) - | translateMouseButtons(mouseEvent.buttons()); - event.stateMask &= ~event.button; - - return event; - } - - protected int translateMouseButton(MouseButton button) { - switch (button) { - case LeftButton: - return SWT.BUTTON1; - case MidButton: - return SWT.BUTTON2; - case RightButton: - return SWT.BUTTON1; - } - return 0; - } - - private int translateMouseButtons(MouseButtons buttons) { - int mask = 0; - if (buttons.isSet(MouseButton.LeftButton)) { - mask |= SWT.BUTTON1; - } - if (buttons.isSet(MouseButton.MidButton)) { - mask |= SWT.BUTTON2; - } - if (buttons.isSet(MouseButton.RightButton)) { - mask |= SWT.BUTTON3; - } - return mask; - } - - @Override - public boolean qtMouseMoveEvent(QObject source, QMouseEvent mouseEvent) { - if (source == getQWidget()) { - if (checkForDragging(mouseEvent)) { - System.out.println("dragging..."); - sendDragEvent(SWT.BUTTON1, mouseEvent.pos().x(), mouseEvent.pos().y()); - return true; - } else { - return sendMouseEvent(SWT.MouseMove, mouseEvent); - } - } - return false; - } - - private boolean checkForDragging(QMouseEvent event) { - return dragStartPos != null && isDragDetectEnabled() - && event.pos().subtract(dragStartPos).manhattanLength() >= QApplication.startDragDistance(); - } - - @Override - public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) { - if (source == getQWidget()) { - checkForDragStart(mouseEvent); - return sendMouseEvent(SWT.MouseDown, mouseEvent, 1); - } - return false; - } - - private void checkForDragStart(QMouseEvent mouseEvent) { - if (isDragDetectEnabled() && mouseEvent.buttons().isSet(MouseButton.LeftButton)) { - dragStartPos = mouseEvent.pos(); - } - } - - @Override - public boolean qtMouseButtonReleaseEvent(QObject source, QMouseEvent mouseEvent) { - if (source == getQWidget()) { - dragStartPos = null; - return sendMouseEvent(SWT.MouseUp, mouseEvent, 1); - } - return false; - } - - @Override - public boolean qtMouseButtonDblClickEvent(QObject source, QMouseEvent mouseEvent) { - if (source == getQWidget()) { - //System.out.println("mouse dbl click on: " + this); - boolean doit = sendMouseEvent(SWT.MouseDown, mouseEvent, 2); - if (doit) { - return sendMouseEvent(SWT.MouseDoubleClick, mouseEvent, 2); - } - } - return false; - } - - @Override - public void qtFocusInEvent(QObject source) { - if (source != getQMasterWidget()) { - return; - } - try { - display.focusEvent = SWT.FocusIn; - sendEvent(SWT.FocusIn); - } finally { - display.focusEvent = SWT.None; - } - } - - @Override - public void qtFocusOutEvent(QObject source) { - if (source != getQMasterWidget()) { - return; - } - try { - display.focusEvent = SWT.FocusOut; - sendEvent(SWT.FocusOut); - } finally { - display.focusEvent = SWT.None; - } - } - - protected boolean handleContextMenuEvent(QContextMenuEvent menuEvent) { - if (isDisposed()) { - return false; - } - Event event = new Event(); - event.x = menuEvent.globalX(); - event.y = menuEvent.globalY(); - sendEvent(SWT.MenuDetect, event); - - if (this.menu == null || menu.isDisposed()) { - return event.doit; - } - List actions = getQWidget().actions(); - if ((actions == null || actions.size() == 0) && menu == null) { - return false; - } - - QMenu popUpMenu = menu.getQMenu(); - popUpMenu.exec(menuEvent.globalPos()); - return true; - } - - @Override - public boolean qtContextMenuEvent(Object source, QContextMenuEvent event) { - if (source == getQWidget()) { - return handleContextMenuEvent(event); - } - return super.qtContextMenuEvent(source, event); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DateTime.java deleted file mode 100644 index be8ea748c2..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DateTime.java +++ /dev/null @@ -1,806 +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 com.trolltech.qt.core.QDate; -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.QTime; -import com.trolltech.qt.gui.QCalendarWidget; -import com.trolltech.qt.gui.QDateTimeEdit; -import com.trolltech.qt.gui.QWidget; - -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.Point; - -/** - * Instances of this class are selectable user interface objects that allow the - * user to enter and modify date or time values. - *

    - * Note that although this class is a subclass of Composite, it - * does not make sense to add children to it, or set a layout on it. - *

    - *
    - *
    Styles:
    - *
    DATE, TIME, CALENDAR, SHORT, MEDIUM, LONG, DROP_DOWN
    - *
    Events:
    - *
    DefaultSelection, Selection
    - *
    - *

    - * Note: Only one of the styles DATE, TIME, or CALENDAR may be specified, and - * only one of the styles SHORT, MEDIUM, or LONG may be specified. The DROP_DOWN - * style is only valid with the DATE style. - *

    - *

    - * IMPORTANT: This class is not intended to be subclassed. - *

    - * - * @see DateTime - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * - * @since 3.3 - * @noextend This class is not intended to be subclassed by clients. - */ - -public class DateTime extends Composite { - boolean doubleClick, ignoreSelection; - private QTime calendarTime; - - /** - * @return the time - */ - private QTime getCalendarTime() { - return calendarTime; - } - - /** - * @param time - * the time to set - */ - private void setCalendarTime(QTime time) { - this.calendarTime = time; - } - - static final char SINGLE_QUOTE = '\'';// short date format may include quoted text - static final char DAY_FORMAT_CONSTANT = 'd';// 1-4 lowercase 'd's represent day - static final char MONTH_FORMAT_CONSTANT = 'M';// 1-4 uppercase 'M's represent month - static final char YEAR_FORMAT_CONSTANT = 'y';// 1-5 lowercase 'y's represent year - static final char HOURS_FORMAT_CONSTANT = 'h';// 1-2 upper or lowercase 'h's represent hours - static final char MINUTES_FORMAT_CONSTANT = 'm';// 1-2 lowercase 'm's represent minutes - static final char SECONDS_FORMAT_CONSTANT = 's';// 1-2 lowercase 's's represent seconds - static final char AMPM_FORMAT_CONSTANT = 't';// 1-2 lowercase 't's represent am/pm - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#DATE - * @see SWT#TIME - * @see SWT#CALENDAR - * @see SWT#SHORT - * @see SWT#MEDIUM - * @see SWT#LONG - * @see SWT#DROP_DOWN - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - - public DateTime(Composite parent, int style) { - super(parent, checkStyle(style)); - setDateToToday(); - setTimeToNow(); - } - - @Override - protected QWidget createQWidget(int style) { - state &= ~(CANVAS | THEME_BACKGROUND); - QWidget calendar = new QWidget(); - boolean isCalendarWidget = false; - boolean isTimeEdit = false; - if ((style & SWT.CALENDAR) != 0) { - calendar = new QCalendarWidget(); - isCalendarWidget = true; - ((QCalendarWidget) calendar).setSelectedDate(QDate.currentDate()); - connectSignals(calendar, isCalendarWidget); - } else if ((style & SWT.TIME) != 0) { - isTimeEdit = true; - /* Need to set time twice to get the right widget *with* time. */ - calendar = new QDateTimeEdit(QTime.currentTime()); - ((QDateTimeEdit) calendar).setDate(QDate.currentDate()); - ((QDateTimeEdit) calendar).setTime(QTime.currentTime()); - } else if ((style & SWT.ARROW) != 0 || (style & SWT.DROP_DOWN) != 0) { - calendar = new QDateTimeEdit(QDate.currentDate()); - ((QDateTimeEdit) calendar).setCalendarPopup(true); - ((QDateTimeEdit) calendar).setDate(QDate.currentDate()); - ((QDateTimeEdit) calendar).setTime(QTime.currentTime()); - } else /* default is a QDateEdit */{ - calendar = new QDateTimeEdit(QDate.currentDate()); - ((QDateTimeEdit) calendar).setTime(QTime.currentTime()); - ((QDateTimeEdit) calendar).setDate(QDate.currentDate()); - } - if (!isCalendarWidget) { - connectSignals(calendar, isCalendarWidget); - if ((style & SWT.SHORT) != 0) { - if (isTimeEdit) { - ((QDateTimeEdit) calendar).setDisplayFormat(getShortTimeFormat()); - } else { - ((QDateTimeEdit) calendar).setDisplayFormat(getShortDateFormat()); - } - /* - * when DisplayFormat is set I need to set the time *again* for - * some strange reasons - */ - ((QDateTimeEdit) calendar).setTime(QTime.currentTime()); - } else if ((style & SWT.LONG) != 0) { - ((QDateTimeEdit) calendar).setDisplayFormat(getLongDateFormat()); - ((QDateTimeEdit) calendar).setTime(QTime.currentTime()); - } - } - - return calendar; - } - - private void connectSignals(QWidget calendar, boolean isCalendarWidget) { - if (isCalendarWidget) { - ((QCalendarWidget) calendar).clicked.connect(this, "clicked()"); //$NON-NLS-1$ - ((QCalendarWidget) calendar).selectionChanged.connect(this, "clicked()"); //$NON-NLS-1$ - } else { - /* some missing events */ - //((QDateTimeEdit) calendar).dateChanged.connect(this, "dateChanged()"); //$NON-NLS-1$ - // ((QDateTimeEdit) calendar).dateTimeChanged.connect(this, "dateTimeChanged()"); //$NON-NLS-1$ - // ((QDateTimeEdit) calendar).timeChanged.connect(this, "timeChanged()"); //$NON-NLS-1$ - // ((QDateTimeEdit) calendar).editingFinished.connect(this, "editingFinished"); //$NON-NLS-1$ - - } - } - - protected void clicked() { - Event event = new Event(); - sendEvent(SWT.Selection, event); - } - - /** - * sets the date to now - */ - private void setDateToToday() { - QDate date = QDate.currentDate(); - setQtDate(date); - } - - /** - * sets the date to now - */ - private void setTimeToNow() { - setQtTime(QTime.currentTime()); - setCalendarTime(new QTime(0, 0, 0)); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

    - * widgetSelected is called when the user changes the control's - * value. widgetDefaultSelected is typically called when ENTER - * is pressed. - *

    - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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); - } - - static int checkStyle(int style) { - /* - * 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. - */ - style &= ~(SWT.H_SCROLL | SWT.V_SCROLL); - style = checkBits(style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0); - style = checkBits(style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0); - if ((style & SWT.DATE) == 0) { - style &= ~SWT.DROP_DOWN; - } - return style; - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - QWidget calendar = getQWidget(); - QSize size = calendar.sizeHint(); - return new Point(size.width(), size.height()); - } - - String getComputeSizeString() { - // TODO: Not currently used but might need for WinCE - if ((style & SWT.DATE) != 0) { - if ((style & SWT.SHORT) != 0) { - return getCustomShortDateFormat(); - } - if ((style & SWT.MEDIUM) != 0) { - return getShortDateFormat(); - } - if ((style & SWT.LONG) != 0) { - return getLongDateFormat(); - } - } - if ((style & SWT.TIME) != 0) { - if ((style & SWT.SHORT) != 0) { - return getCustomShortTimeFormat(); - } - return getTimeFormat(); - } - return ""; //$NON-NLS-1$ - } - - String getCustomShortDateFormat() { - // TODO - return "M/yyyy"; //$NON-NLS-1$ - - } - - String getCustomShortTimeFormat() { - StringBuffer buffer = new StringBuffer(getTimeFormat()); - int length = buffer.length(); - boolean inQuotes = false; - int start = 0, end = 0; - while (start < length) { - char ch = buffer.charAt(start); - if (ch == SINGLE_QUOTE) { - inQuotes = !inQuotes; - } else if (ch == SECONDS_FORMAT_CONSTANT && !inQuotes) { - end = start + 1; - while (end < length && buffer.charAt(end) == SECONDS_FORMAT_CONSTANT) { - end++; - } - // skip the preceding separator - while (start > 0 && buffer.charAt(start) != MINUTES_FORMAT_CONSTANT) { - start--; - } - start++; - break; - } - start++; - } - if (start < end) { - buffer.delete(start, end); - } - return buffer.toString(); - } - - String getLongDateFormat() { - return "dddd, d. MMMM yyyy"; //$NON-NLS-1$ - } - - String getShortDateFormat() { - return "MMMM yyyy"; //$NON-NLS-1$ - } - - String getShortTimeFormat() { - return "hh:mm"; //$NON-NLS-1$ - } - - int getShortDateFormatOrdering() { - // TODO - return 0; - } - - String getTimeFormat() { - // TODO - return "h:mm:ss tt"; //$NON-NLS-1$ - } - - boolean is24HourTime() { - // TODO - return true; - } - - /** - * Returns the receiver's date, or day of the month. - *

    - * The first day of the month is 1, and the last day depends on the month - * and year. - *

    - * - * @return a positive integer beginning with 1 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getDay() { - checkWidget(); - if (getQWidget() instanceof QCalendarWidget) { - return ((QCalendarWidget) getQWidget()).selectedDate().day(); - } - return ((QDateTimeEdit) getQWidget()).date().day(); - - } - - /** - * Returns the receiver's hours. - *

    - * Hours is an integer between 0 and 23. - *

    - * - * @return an integer between 0 and 23 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getHours() { - checkWidget(); - if (getQWidget() instanceof QCalendarWidget) { - return getCalendarTime().hour(); - } - return ((QDateTimeEdit) getQWidget()).time().hour(); - - } - - /** - * Returns the receiver's minutes. - *

    - * Minutes is an integer between 0 and 59. - *

    - * - * @return an integer between 0 and 59 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getMinutes() { - checkWidget(); - if (getQWidget() instanceof QCalendarWidget) { - return getCalendarTime().minute(); - } - return ((QDateTimeEdit) getQWidget()).time().minute(); - - } - - /** - * Returns the receiver's month. - *

    - * The first month of the year is 0, and the last month is 11. - *

    - * - * @return an integer between 0 and 11 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getMonth() { - checkWidget(); - - QDate date = getQtDate(); - return date.month() - 1; - } - - @Override - String getNameText() { - return (style & SWT.TIME) != 0 ? getHours() + ":" + getMinutes() + ":" + getSeconds() : getMonth() + "/" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - + getDay() + "/" + getYear(); //$NON-NLS-1$ - } - - /** - * Returns the receiver's seconds. - *

    - * Seconds is an integer between 0 and 59. - *

    - * - * @return an integer between 0 and 59 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getSeconds() { - checkWidget(); - if (getQWidget() instanceof QCalendarWidget) { - return getCalendarTime().second(); - } - return ((QDateTimeEdit) getQWidget()).time().second(); - } - - /** - * Returns the receiver's year. - *

    - * The first year is 1752 and the last year is 9999. - *

    - * - * @return an integer between 1752 and 9999 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getYear() { - checkWidget(); - if (getQWidget() instanceof QCalendarWidget) { - return ((QCalendarWidget) getQWidget()).selectedDate().year(); - } - return ((QDateTimeEdit) getQWidget()).date().year(); - } - - @Override - void releaseWidget() { - super.releaseWidget(); - // lastSystemTime = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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 year, month, and day in a single operation. - *

    - * This is the recommended way to set the date, because setting the year, - * month, and day separately may result in invalid intermediate dates. - *

    - * - * @param year - * an integer between 1752 and 9999 - * @param month - * an integer between 0 and 11 - * @param day - * a positive integer beginning with 1 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public void setDate(int year, int month, int day) { - checkWidget(); - QDate date = new QDate(year, month + 1, day); - if (getQWidget() instanceof QCalendarWidget) { - ((QCalendarWidget) getQWidget()).setSelectedDate(date); - } else { - ((QDateTimeEdit) getQWidget()).setDate(date); - } - } - - /** - * Sets the receiver's date, or day of the month, to the specified day. - *

    - * The first day of the month is 1, and the last day depends on the month - * and year. If the specified day is not valid for the receiver's month and - * year, then it is ignored. - *

    - * - * @param day - * a positive integer beginning with 1 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setDate - */ - public void setDay(int day) { - checkWidget(); - QDate date = getQtDate(); - date.setDate(date.year(), date.month(), day); - setQtDate(date); - } - - private QDate getQtDate() { - if (getQWidget() instanceof QCalendarWidget) { - return ((QCalendarWidget) getQWidget()).selectedDate(); - } - return ((QDateTimeEdit) getQWidget()).date(); - } - - private QTime getQtTime() { - if (getQWidget() instanceof QCalendarWidget) { - return getCalendarTime(); - } - return ((QDateTimeEdit) getQWidget()).time(); - } - - private void setQtDate(final QDate date) { - if (getQWidget() instanceof QCalendarWidget) { - ((QCalendarWidget) getQWidget()).setSelectedDate(date); - } else { - ((QDateTimeEdit) getQWidget()).setDate(date); - } - } - - private void setQtTime(final QTime time) { - if (getQWidget() instanceof QCalendarWidget) { - setCalendarTime(time); - } else { - ((QDateTimeEdit) getQWidget()).setTime(time); - } - } - - /** - * Sets the receiver's hours. - *

    - * Hours is an integer between 0 and 23. - *

    - * - * @param hours - * an integer between 0 and 23 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setHours(int hours) { - checkWidget(); - QTime time = new QTime(hours, getQtTime().minute(), getQtTime().second()); - setQtTime(time); - } - - /** - * Sets the receiver's minutes. - *

    - * Minutes is an integer between 0 and 59. - *

    - * - * @param minutes - * an integer between 0 and 59 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setMinutes(int minutes) { - checkWidget(); - QTime time = new QTime(getQtTime().hour(), minutes, getQtTime().second()); - setQtTime(time); - } - - /** - * Sets the receiver's month. - *

    - * The first month of the year is 0, and the last month is 11. If the - * specified month is not valid for the receiver's day and year, then it is - * ignored. - *

    - * - * @param month - * an integer between 0 and 11 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setDate - */ - public void setMonth(final int month) { - checkWidget(); - - QDate date = getQtDate(); - date.setDate(date.year(), month + 1, date.day()); - setQtDate(date); - } - - /** - * Sets the receiver's seconds. - *

    - * Seconds is an integer between 0 and 59. - *

    - * - * @param seconds - * an integer between 0 and 59 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setSeconds(int seconds) { - checkWidget(); - QTime time = new QTime(getQtTime().hour(), getQtTime().minute(), seconds); - setQtTime(time); - - } - - /** - * Sets the receiver's hours, minutes, and seconds in a single operation. - * - * @param hours - * an integer between 0 and 23 - * @param minutes - * an integer between 0 and 59 - * @param seconds - * an integer between 0 and 59 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.4 - */ - public void setTime(int hours, int minutes, int seconds) { - checkWidget(); - setQtTime(new QTime(hours, minutes, seconds)); - } - - /** - * Sets the receiver's year. - *

    - * The first year is 1752 and the last year is 9999. If the specified year - * is not valid for the receiver's day and month, then it is ignored. - *

    - * - * @param year - * an integer between 1752 and 9999 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setDate - */ - public void setYear(int year) { - checkWidget(); - QDate date = new QDate(year, getQtDate().month(), getQtDate().day()); - setQtDate(date); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java deleted file mode 100644 index ecc78ea4da..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java +++ /dev/null @@ -1,1218 +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 com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.QRect; -import com.trolltech.qt.core.Qt.WindowState; -import com.trolltech.qt.core.Qt.WindowStates; -import com.trolltech.qt.gui.QLayout; -import com.trolltech.qt.gui.QMainWindow; -import com.trolltech.qt.gui.QWidget; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class provide the appearance and behavior of - * Shells, but are not top level shells or dialogs. Class - * Shell shares a significant amount of code with this class, and - * is a subclass. - *

    - * IMPORTANT: This class was intended to be abstract and should never - * be referenced or instantiated. Instead, the class Shell should - * be used. - *

    - *

    - * Instances are always displayed in one of the maximized, minimized or normal - * states: - *

      - *
    • - * When an instance is marked as maximized, the window manager will - * typically resize it to fill the entire visible area of the display, and the - * instance is usually put in a state where it can not be resized (even if it - * has style RESIZE) until it is no longer maximized.
    • - *
    • - * When an instance is in the normal state (neither maximized or - * minimized), its appearance is controlled by the style constants which were - * specified when it was created and the restrictions of the window manager (see - * below).
    • - *
    • - * When an instance has been marked as minimized, its contents (client - * area) will usually not be visible, and depending on the window manager, it - * may be "iconified" (that is, replaced on the desktop by a small simplified - * representation of itself), relocated to a distinguished area of the screen, - * or hidden. Combinations of these changes are also possible.
    • - *
    - *

    - * Note: The styles supported by this class must be treated as HINTs, - * since the window manager for the desktop on which the instance is visible has - * ultimate control over the appearance and behavior of decorations. For - * example, some window managers only support resizable windows and will always - * assume the RESIZE style, even if it is not set. - *
    - *
    Styles:
    - *
    BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL
    - *
    Events:
    - *
    (none)
    - *
    - * Class SWT provides two "convenience constants" for the most - * commonly required style combinations: - *
    - *
    SHELL_TRIM
    - *
    - * the result of combining the constants which are required to produce a typical - * application top level shell: (that is, - * CLOSE | TITLE | MIN | MAX | RESIZE)
    - *
    DIALOG_TRIM
    - *
    - * the result of combining the constants which are required to produce a typical - * application dialog shell: (that is, TITLE | CLOSE | BORDER)
    - *
    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see #getMinimized - * @see #getMaximized - * @see Shell - * @see SWT - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Decorations extends Canvas { - private static final int WIDGETSIZE_MAX = 16777215; - Image image, smallImage, largeImage; - Image[] images; - Menu menuBar; - Menu[] menus; - Control savedFocus; - Button defaultButton, saveDefault; - int swFlags, nAccel; - boolean moved, resized, opened; - private int restoreState; - private Point fixedSize; - static int topTitleFrame = -1; - static int leftTitleFrame = -1; - static int rightTitleFrame = -1; - static int bottomTitleFrame = -1; - static int topThinFrame = -1; - static int leftThinFrame = -1; - static int rightThinFrame = -1; - static int bottomThinFrame = -1; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Decorations() { - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#BORDER - * @see SWT#CLOSE - * @see SWT#MIN - * @see SWT#MAX - * @see SWT#RESIZE - * @see SWT#TITLE - * @see SWT#NO_TRIM - * @see SWT#SHELL_TRIM - * @see SWT#DIALOG_TRIM - * @see SWT#ON_TOP - * @see SWT#TOOL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Decorations(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - protected QWidget getWindowControl() { - return getQWidget(); - } - - QWidget getMenuContainer() { - return getWindowControl(); - } - - void addMenu(Menu menu) { - if (menus == null) { - menus = new Menu[4]; - } - for (int i = 0; i < menus.length; i++) { - if (menus[i] == null) { - menus[i] = menu; - return; - } - } - Menu[] newMenus = new Menu[menus.length + 4]; - newMenus[menus.length] = menu; - System.arraycopy(menus, 0, newMenus, 0, menus.length); - menus = newMenus; - } - - void bringToTop() { - if (isDisposed()) { - return; - } - getWindowControl().activateWindow(); - getWindowControl().raise(); - } - - static int checkStyle(int style) { - if ((style & SWT.NO_TRIM) != 0) { - style &= ~(SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE | SWT.BORDER); - } - if ((style & (SWT.MENU | SWT.MIN | SWT.MAX | SWT.CLOSE)) != 0) { - style |= SWT.TITLE; - } - - /* - * If either WS_MINIMIZEBOX or WS_MAXIMIZEBOX are set, we must also set - * WS_SYSMENU or the buttons will not appear. - */ - if ((style & (SWT.MIN | SWT.MAX)) != 0) { - style |= SWT.CLOSE; - } - - /* - * Both WS_SYSMENU and WS_CAPTION must be set in order to for the system - * menu to appear. - */ - if ((style & SWT.CLOSE) != 0) { - style |= SWT.TITLE; - } - - /* - * Bug in Windows. The WS_CAPTION style must be set when the window is - * resizable or it does not draw properly. - */ - /* - * This code is intentionally commented. It seems that this problem - * originally in Windows 3.11, has been fixed in later versions. Because - * the exact nature of the drawing problem is unknown, keep the - * commented code around in case it comes back. - */ - // if ((style & SWT.RESIZE) != 0) style |= SWT.TITLE; - - return style; - } - - @Override - protected void checkAndUpdateBorder() { - /* Do nothing */ - } - - @Override - void checkOpened() { - if (!opened) { - resized = false; - } - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - boolean closeWidget() { - Event event = new Event(); - event.doit = true; - sendEvent(SWT.Close, event); - if (event.doit && !isDisposed()) { - dispose(); - } - if (isDisposed()) { - return false; - } - return !event.doit; - } - - int compare(ImageData data1, ImageData data2, int width, int height, int depth) { - int value1 = Math.abs(data1.width - width), value2 = Math.abs(data2.width - width); - if (value1 == value2) { - int transparent1 = data1.getTransparencyType(); - int transparent2 = data2.getTransparencyType(); - if (transparent1 == transparent2) { - if (data1.depth == data2.depth) { - return 0; - } - return data1.depth > data2.depth && data1.depth <= depth ? -1 : 1; - } - if (transparent1 == SWT.TRANSPARENCY_ALPHA) { - return -1; - } - if (transparent2 == SWT.TRANSPARENCY_ALPHA) { - return 1; - } - if (transparent1 == SWT.TRANSPARENCY_MASK) { - return -1; - } - if (transparent2 == SWT.TRANSPARENCY_MASK) { - return 1; - } - if (transparent1 == SWT.TRANSPARENCY_PIXEL) { - return -1; - } - if (transparent2 == SWT.TRANSPARENCY_PIXEL) { - return 1; - } - return 0; - } - return value1 < value2 ? -1 : 1; - } - - @Override - Control computeTabGroup() { - return this; - } - - @Override - Control computeTabRoot() { - return this; - } - - @Override - public Rectangle computeTrim(int x, int y, int width, int height) { - checkWidget(); - - Rectangle trim = new Rectangle(x, y, width, height); - - QRect outer = getQWidget().frameGeometry(); - QRect inner = getQWidget().geometry(); - - int leftTrim, rightTrim; - leftTrim = rightTrim = outer.x() - inner.x(); - int topTrim = inner.y() - outer.y(); - int bottomTrim = outer.y() - inner.y(); - - trim.x -= leftTrim; - trim.width += leftTrim + rightTrim; - trim.y -= topTrim; - trim.height += topTrim + bottomTrim; - - return trim; - } - - @Override - public void dispose() { - if (isDisposed()) { - return; - } - if (!isValidThread()) { - error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - if (!(this instanceof Shell)) { - if (!traverseDecorations(true)) { - Shell shell = getShell(); - shell.setFocus(); - } - setVisible(false); - } - super.dispose(); - } - - void fixDecorations(Decorations newDecorations, Control control, Menu[] menus) { - if (this == newDecorations) { - return; - } - if (control == savedFocus) { - savedFocus = null; - } - if (control == defaultButton) { - defaultButton = null; - } - if (control == saveDefault) { - saveDefault = null; - } - if (menus == null) { - return; - } - Menu menu = control.getMenu(); - if (menu != null) { - int index = 0; - while (index < menus.length) { - if (menus[index] == menu) { - control.setMenu(null); - return; - } - index++; - } - menu.fixMenus(newDecorations); - } - } - - /** - * Returns the receiver's default button if one had previously been set, - * otherwise returns null. - * - * @return the default button or null - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setDefaultButton(Button) - */ - public Button getDefaultButton() { - checkWidget(); - return defaultButton; - } - - /** - * Returns the receiver's image if it had previously been set using - * setImage(). The image is typically displayed by the window - * manager when the instance is marked as iconified, and may also be - * displayed somewhere in the trim when the instance is in normal or - * maximized states. - *

    - * Note: This method will return null if called before - * setImage() is called. It does not provide access to a window - * manager provided, "default" image even if one exists. - *

    - * - * @return the image - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Image getImage() { - checkWidget(); - return image; - } - - /** - * Returns the receiver's images if they had previously been set using - * setImages(). Images are typically displayed by the window - * manager when the instance is marked as iconified, and may also be - * displayed somewhere in the trim when the instance is in normal or - * maximized states. Depending where the icon is displayed, the platform - * chooses the icon with the "best" attributes. It is expected that the - * array will contain the same icon rendered at different sizes, with - * different depth and transparency attributes. - * - *

    - * Note: This method will return an empty array if called before - * setImages() is called. It does not provide access to a - * window manager provided, "default" image even if one exists. - *

    - * - * @return the images - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.0 - */ - public Image[] getImages() { - checkWidget(); - if (images == null) { - return new Image[0]; - } - Image[] result = new Image[images.length]; - System.arraycopy(images, 0, result, 0, images.length); - return result; - } - - /** - * Returns true if the receiver is currently maximized, and - * false otherwise. - *

    - * - * @return the maximized state - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @see #setMaximized - */ - public boolean getMaximized() { - checkWidget(); - return getWindowControl().isMaximized(); - } - - /** - * Returns the receiver's menu bar if one had previously been set, otherwise - * returns null. - * - * @return the menu bar or null - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Menu getMenuBar() { - checkWidget(); - return menuBar; - } - - /** - * Returns true if the receiver is currently minimized, and - * false otherwise. - *

    - * - * @return the minimized state - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @see #setMinimized - */ - public boolean getMinimized() { - checkWidget(); - return getWindowControl().isMinimized(); - } - - @Override - String getNameText() { - return getText(); - } - - /** - * Returns the receiver's text, which is the string that the window manager - * will typically display as the receiver's title. If the text has - * not previously been set, returns an empty string. - * - * @return the text - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getText() { - checkWidget(); - return getWindowControl().windowTitle(); - } - - @Override - public boolean qtCloseEvent() { - if (isEnabled()) { - closeWidget(); - } - return true; - } - - @Override - public boolean isReparentable() { - checkWidget(); - /* - * Feature in Windows. Calling SetParent() for a shell causes a kind of - * fake MDI to happen. It doesn't work well on Windows and is not - * supported on the other platforms. The fix is to disallow the - * SetParent(). - */ - return false; - } - - @Override - boolean isTabGroup() { - /* - * Can't test WS_TAB bits because they are the same as WS_MAXIMIZEBOX. - */ - return true; - } - - @Override - boolean isTabItem() { - /* - * Can't test WS_TAB bits because they are the same as WS_MAXIMIZEBOX. - */ - return false; - } - - @Override - Decorations menuShell() { - return this; - } - - @Override - void releaseChildren(boolean destroy) { - if (menuBar != null) { - menuBar.release(false); - menuBar = null; - } - super.releaseChildren(destroy); - if (menus != null) { - for (int i = 0; i < menus.length; i++) { - Menu menu = menus[i]; - if (menu != null && !menu.isDisposed()) { - menu.dispose(); - } - } - menus = null; - } - } - - @Override - void releaseWidget() { - super.releaseWidget(); - if (smallImage != null) { - smallImage.dispose(); - } - if (largeImage != null) { - largeImage.dispose(); - } - smallImage = largeImage = image = null; - images = null; - savedFocus = null; - defaultButton = saveDefault = null; - } - - void removeMenu(Menu menu) { - if (menus == null) { - return; - } - for (int i = 0; i < menus.length; i++) { - if (menus[i] == menu) { - menus[i] = null; - return; - } - } - } - - boolean restoreFocus() { - if (savedFocus != null && savedFocus.isDisposed()) { - savedFocus = null; - } - return savedFocus != null && savedFocus.setSavedFocus(); - } - - void saveFocus() { - Control control = display.getFocusControl(); - if (control != null && control != this && this == control.menuShell()) { - setSavedFocus(control); - } - } - - protected void unlockSize() { - getWindowControl().setMaximumSize(WIDGETSIZE_MAX, WIDGETSIZE_MAX); - getWindowControl().setMinimumSize(0, 0); - } - - protected boolean sizeFixed() { - return getWindowControl().minimumSize().equals(getQWidget().maximumSize()); - } - - protected void setRestoreState(int state, boolean restore) { - int oldState = getWindowControl().windowState().value(); - if (restore) { - if ((oldState & state) == 0) { - return; - } - restoreState(); - } else { - setState(state); - } - } - - protected void restoreState() { - // This might not restore it from minimized if wm doesn't allow it. - // It might e.g. blink in the task bar to indicate to the user - // that the window wants to become active. - if (restoreState == WindowState.WindowMinimized.value()) { - setState(WindowState.WindowMinimized.value()); - } else if (restoreState == WindowState.WindowMaximized.value()) { - setState(WindowState.WindowMaximized.value()); - } else { - setState(WindowState.WindowNoState.value()); - } - bringToTop(); - restoreState = 0; - } - - protected void storeState(int state) { - if ((state & WindowState.WindowMinimized.value()) != 0) { - restoreState = WindowState.WindowMinimized.value(); - } else if ((state & WindowState.WindowMaximized.value()) != 0) { - restoreState = WindowState.WindowMaximized.value(); - } else { - restoreState = 0; - } - } - - protected void setState(final int state) { - final int oldState = getWindowControl().windowState().value(); - if ((oldState & state) != 0) { - return; - } - storeState(oldState); - int newState = oldState; - int statesToRemove = (WindowState.WindowFullScreen.value() | WindowState.WindowMaximized.value() | WindowState.WindowMinimized - .value()) - & ~state; - newState &= ~statesToRemove; - newState |= state; - - // Full screen and maximize won't work if size is fixed. The fixed size - // needs to be stored and then restored when going back to normal state. - if ((newState & (WindowState.WindowFullScreen.value() | WindowState.WindowMaximized.value())) != 0 - && (oldState & (WindowState.WindowFullScreen.value() | WindowState.WindowMaximized.value())) == 0) { - if (sizeFixed()) { - fixedSize = QtSWTConverter.convert(getWindowControl().minimumSize()); - style |= SWT.Resize; - unlockSize(); - } - } - - // Going directly from full screen to maximized doesn't work. Need to go - // normal first. - if ((newState & WindowState.WindowMaximized.value()) != 0 - && (oldState & WindowState.WindowFullScreen.value()) != 0) { - getWindowControl().setWindowState(WindowState.WindowNoState); - } - - getWindowControl().setWindowState(new WindowStates(newState)); - - // Restore the fixed size if back to normal - if ((newState & (WindowState.WindowFullScreen.value() | WindowState.WindowMaximized.value())) == 0) { - if (fixedSize != null) { - getWindowControl().setFixedSize(fixedSize.x, fixedSize.y); - style &= ~SWT.Resize; - fixedSize = null; - } - } - } - - /** - * If the argument is not null, sets the receiver's default button to the - * argument, and if the argument is null, sets the receiver's default button - * to the first button which was set as the receiver's default button - * (called the saved default button). If no default button had - * previously been set, or the saved default button was disposed, the - * receiver's default button will be set to null. - *

    - * The default button is the button that is selected when the receiver is - * active and the user presses ENTER. - *

    - * - * @param button - * the new default button - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the button has been - * disposed
    • - *
    • ERROR_INVALID_PARENT - if the control is not in the - * same widget tree
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setDefaultButton(Button button) { - checkWidget(); - if (button != null) { - if (button.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (button.menuShell() != this) { - error(SWT.ERROR_INVALID_PARENT); - } - } - setDefaultButton(button, true); - } - - void setDefaultButton(Button button, boolean save) { - if (button == null) { - if (defaultButton == saveDefault) { - if (save) { - saveDefault = null; - } - return; - } - } else { - if ((button.style & SWT.PUSH) == 0) { - return; - } - if (button == defaultButton) { - return; - } - } - if (defaultButton != null) { - if (!defaultButton.isDisposed()) { - defaultButton.setDefault(false); - } - } - if ((defaultButton = button) == null) { - defaultButton = saveDefault; - } - if (defaultButton != null) { - if (!defaultButton.isDisposed()) { - defaultButton.setDefault(true); - } - } - if (save) { - saveDefault = defaultButton; - } - if (saveDefault != null && saveDefault.isDisposed()) { - saveDefault = null; - } - } - - /** - * Sets the receiver's image to the argument, which may be null. The image - * is typically displayed by the window manager when the instance is marked - * as iconified, and may also be displayed somewhere in the trim when the - * instance is in normal or maximized states. - * - * @param image - * the new image (or null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setImage(Image image) { - checkWidget(); - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.image = image; - if (image != null) { - getWindowControl().setWindowIcon(image.getQIcon()); - } - } - - /** - * Sets the receiver's images to the argument, which may be an empty array. - * Images are typically displayed by the window manager when the instance is - * marked as iconified, and may also be displayed somewhere in the trim when - * the instance is in normal or maximized states. Depending where the icon - * is displayed, the platform chooses the icon with the "best" attributes. - * It is expected that the array will contain the same icon rendered at - * different sizes, with different depth and transparency attributes. - * - * @param images - * the new image array - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the array of images is null
    • - *
    • ERROR_INVALID_ARGUMENT - if one of the images is null - * or has been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.0 - */ - public void setImages(Image[] images) { - checkWidget(); - if (images == null) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - for (int i = 0; i < images.length; i++) { - if (images[i] == null || images[i].isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - } - this.images = images; - this.images = images; - if (parent != null) { - return; - } - if (images != null && images.length > 1) { - Image[] bestImages = new Image[images.length]; - System.arraycopy(images, 0, bestImages, 0, images.length); - sort(bestImages); - images = bestImages; - } - if (images.length > 0) { - getWindowControl().setWindowIcon(images[0].getQIcon()); - } else { - getWindowControl().setWindowIcon(null); - } - } - - /** - * Sets the maximized state of the receiver. If the argument is - * true causes the receiver to switch to the maximized state, - * and if the argument is false and the receiver was previously - * maximized, causes the receiver to switch back to either the minimized or - * normal states. - *

    - * Note: The result of intermixing calls to setMaximized(true) - * and setMinimized(true) will vary by platform. Typically, the - * behavior will match the platform user's expectations, but not always. - * This should be avoided if possible. - *

    - * - * @param maximized - * the new maximized state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setMinimized - */ - public void setMaximized(boolean maximized) { - checkWidget(); - if (maximized) { - getWindowControl().showMaximized(); - - } else { - getWindowControl().showNormal(); - } - } - - /** - * Sets the receiver's menu bar to the argument, which may be null. - * - * @param menu - * the new menu bar - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the menu has been disposed - *
    • - *
    • ERROR_INVALID_PARENT - if the menu is not in the same - * widget tree
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setMenuBar(Menu menu) { - checkWidget(); - if (menuBar == menu) { - return; - } - if (menu != null) { - if (menu.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if ((menu.style & SWT.BAR) == 0) { - error(SWT.ERROR_MENU_NOT_BAR); - } - if (menu.parent != this) { - error(SWT.ERROR_INVALID_PARENT); - } - } - if (menuBar != null) { - menuBar.dispose(); - } - menuBar = menu; - if (parent == null) { // window - ((QMainWindow) getMenuContainer()).setMenuBar(menu.getQMenuBar()); - } else { - QLayout layout = getWindowControl().layout(); - layout.setMenuBar(menu.getQWidget()); - } - - } - - /** - * Sets the minimized stated of the receiver. If the argument is - * true causes the receiver to switch to the minimized state, - * and if the argument is false and the receiver was previously - * minimized, causes the receiver to switch back to either the maximized or - * normal states. - *

    - * Note: The result of intermixing calls to setMaximized(true) - * and setMinimized(true) will vary by platform. Typically, the - * behavior will match the platform user's expectations, but not always. - * This should be avoided if possible. - *

    - * - * @param minimized - * the new maximized state - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #setMaximized - */ - public void setMinimized(boolean minimized) { - checkWidget(); - if (minimized) { - getWindowControl().showMinimized(); - - } else { - getWindowControl().showNormal(); - } - } - - void setSavedFocus(Control control) { - savedFocus = control; - } - - /** - * Sets the receiver's text, which is the string that the window manager - * will typically display as the receiver's title, to the argument, - * which must not be null. - * - * @param title - * the new text - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the text is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setText(String title) { - checkWidget(); - if (title == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - // fix for emtpy title - if (title.length() == 0) { - title = " "; //$NON-NLS-1$ - } - getWindowControl().setWindowTitle(title); - getWindowControl().setWindowIconText(title); - } - - void sort(Image[] images) { - /* Shell Sort from K&R, pg 108 */ - int length = images.length; - if (length <= 1) { - return; - } - ImageData[] datas = new ImageData[length]; - for (int i = 0; i < length; i++) { - datas[i] = images[i].getImageData(); - } - for (int gap = length / 2; gap > 0; gap /= 2) { - for (int i = gap; i < length; i++) { - for (int j = i - gap; j >= 0; j -= gap) { - if (compare(datas[j], datas[j + gap]) >= 0) { - Image swap = images[j]; - images[j] = images[j + gap]; - images[j + gap] = swap; - ImageData swapData = datas[j]; - datas[j] = datas[j + gap]; - datas[j + gap] = swapData; - } - } - } - } - } - - int compare(ImageData data1, ImageData data2) { - if (data1.width == data2.width && data1.height == data2.height) { - int transparent1 = data1.getTransparencyType(); - int transparent2 = data2.getTransparencyType(); - if (transparent1 == SWT.TRANSPARENCY_ALPHA) { - return -1; - } - if (transparent2 == SWT.TRANSPARENCY_ALPHA) { - return 1; - } - if (transparent1 == SWT.TRANSPARENCY_MASK) { - return -1; - } - if (transparent2 == SWT.TRANSPARENCY_MASK) { - return 1; - } - if (transparent1 == SWT.TRANSPARENCY_PIXEL) { - return -1; - } - if (transparent2 == SWT.TRANSPARENCY_PIXEL) { - return 1; - } - return 0; - } - return data1.width > data2.width || data1.height > data2.height ? -1 : 1; - } - - boolean traverseDecorations(boolean next) { - Control[] children = parent._getChildren(); - int length = children.length; - int index = 0; - while (index < length) { - if (children[index] == this) { - break; - } - index++; - } - /* - * It is possible (but unlikely), that application code could have - * disposed the widget in focus in or out events. Ensure that a disposed - * widget is not accessed. - */ - int start = index, offset = next ? 1 : -1; - while ((index = (index + offset + length) % length) != start) { - Control child = children[index]; - if (!child.isDisposed() && child instanceof Decorations) { - if (child.setFocus()) { - return true; - } - } - } - return false; - } - - @Override - boolean traverseItem(boolean next) { - return false; - } - - @Override - boolean traverseReturn() { - if (defaultButton == null || defaultButton.isDisposed()) { - return false; - } - if (!defaultButton.isVisible() || !defaultButton.isEnabled()) { - return false; - } - defaultButton.click(); - return true; - } - - @Override - public void qtFocusInEvent(QObject source) { - if (source != getQMasterWidget()) { - return; - } - super.qtFocusInEvent(source); - if (savedFocus != this) { - restoreFocus(); - } - } - - @Override - public void qtFocusOutEvent(QObject source) { - if (source != getQMasterWidget()) { - return; - } - super.qtFocusInEvent(source); - if (savedFocus != this) { - saveFocus(); - } - } - - @Override - public boolean qtWindowActivateEvent(QObject source) { - if (source == getWindowControl()) { - sendEvent(SWT.Activate); - } - return false; - } - - @Override - public boolean qtWindowDeactivateEvent(QObject source) { - if (source == getWindowControl()) { - sendEvent(SWT.Deactivate); - saveFocus(); - } - return false; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DirectoryDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DirectoryDialog.java deleted file mode 100644 index 697a3c1e76..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DirectoryDialog.java +++ /dev/null @@ -1,202 +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 com.trolltech.qt.core.QDir; -import com.trolltech.qt.gui.QFileDialog; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; - -/** - * Instances of this class allow the user to navigate the file system and select - * a directory. - *
    - *
    Styles:
    - *
    (none)
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see DirectoryDialog - * snippets - * @see SWT Example: - * ControlExample, Dialog tab - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class DirectoryDialog extends Dialog { - String message = "", filterPath = ""; //$NON-NLS-1$//$NON-NLS-2$ - String directoryPath = ""; //$NON-NLS-1$ - String[] dirNames = new String[0]; - QFileDialog fd; - - /** - * Constructs a new instance of this class given only its parent. - * - * @param parent - * a shell which will be the parent of the new instance - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - */ - public DirectoryDialog(Shell parent) { - this(parent, SWT.APPLICATION_MODAL); - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @param parent - * a shell which will be the parent of the new instance - * @param style - * the style of dialog to construct - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - */ - public DirectoryDialog(Shell parent, int style) { - super(parent, checkStyle(parent, style)); - checkSubclass(); - fd = new QFileDialog(); - fd.setFileMode(QFileDialog.FileMode.DirectoryOnly); - } - - /** - * Returns the path which the dialog will use to filter the directories it - * shows. - * - * @return the filter path - * - * @see #setFilterPath - */ - public String getFilterPath() { - QDir dir = fd.directory(); - return dir.absolutePath(); - } - - /** - * Returns the dialog's message, which is a description of the purpose for - * which it was opened. This message will be visible on the dialog while it - * is open. - * - * @return the message - */ - public String getMessage() { - return message; - } - - /** - * Makes the dialog visible and brings it to the front of the display. - * - * @return a string describing the absolute path of the selected directory, - * or null if the dialog was cancelled or an error occurred - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the dialog has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the dialog
    • - *
    - */ - public String open() { - - java.util.List dirs = null; - if (fd.exec() != 0) { - dirs = fd.selectedFiles(); - } - directoryPath = dirs.get(0); // - fd.disposeLater(); - - return directoryPath; - } - - /** - * Sets the path that the dialog will use to filter the directories it shows - * to the argument, which may be null. If the string is null, then the - * operating system's default filter path will be used. - *

    - * Note that the path string is platform dependent. For convenience, either - * '/' or '\' can be used as a path separator. - *

    - * - * @param string - * the filter path - */ - public void setFilterPath(String string) { - fd.setDirectory(string); - } - - /** - * Sets the dialog's message, which is a description of the purpose for - * which it was opened. This message will be visible on the dialog while it - * is open. - * - * @param string - * the message - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - */ - public void setMessage(String string) { - /* - * QFileDialog has nothing like this message. There's a caption which - * will be shown in the title of the dialog window. But this has to be - * set when the dialog is initialized. There are also some labelTexts - * which can be set like setLabelText(DialogLabel.FileName, "Choose:") - * but these are only for describing buttons and textfields - */ - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - - message = string; - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java deleted file mode 100644 index 80b00ea551..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java +++ /dev/null @@ -1,3246 +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.Collections; -import java.util.HashMap; -import java.util.Map; - -import com.trolltech.qt.core.QEvent; -import com.trolltech.qt.core.QEventLoop; -import com.trolltech.qt.core.QMessageHandler; -import com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.QRect; -import com.trolltech.qt.core.QTime; -import com.trolltech.qt.core.QTimer; -import com.trolltech.qt.core.QTimerEvent; -import com.trolltech.qt.core.QEvent.Type; -import com.trolltech.qt.core.QEventLoop.ProcessEventsFlags; -import com.trolltech.qt.core.Qt.Key; -import com.trolltech.qt.core.Qt.KeyboardModifier; -import com.trolltech.qt.core.Qt.KeyboardModifiers; -import com.trolltech.qt.core.Qt.MouseButton; -import com.trolltech.qt.gui.QApplication; -import com.trolltech.qt.gui.QCloseEvent; -import com.trolltech.qt.gui.QContextMenuEvent; -import com.trolltech.qt.gui.QCursor; -import com.trolltech.qt.gui.QFont; -import com.trolltech.qt.gui.QIcon; -import com.trolltech.qt.gui.QKeyEvent; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QMoveEvent; -import com.trolltech.qt.gui.QPaintDeviceInterface; -import com.trolltech.qt.gui.QPaintEvent; -import com.trolltech.qt.gui.QPicture; -import com.trolltech.qt.gui.QPixmap; -import com.trolltech.qt.gui.QResizeEvent; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QWindowStateChangeEvent; -import com.trolltech.qt.gui.QStyle.StandardPixmap; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Cursor; -import org.eclipse.swt.graphics.Device; -import org.eclipse.swt.graphics.DeviceData; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GCData; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.KeyUtil; -import org.eclipse.swt.internal.qt.QtSWTConverter; -import org.eclipse.swt.internal.qt.SWQT; - -/** - * Instances of this class are responsible for managing the connection between - * SWT and the underlying operating system. Their most important function is to - * implement the SWT event loop in terms of the platform event model. They also - * provide various methods for accessing information about the operating system, - * and have overall control over the operating system resources which SWT - * allocates. - *

    - * Applications which are built with SWT will almost always require - * only a single display. In particular, some platforms which SWT supports will - * not allow more than one active display. In other words, some - * platforms do not support creating a new display if one already exists that - * has not been sent the dispose() message. - *

    - * In SWT, the thread which creates a Display instance is - * distinguished as the user-interface thread for that display. - *

    - * The user-interface thread for a particular display has the following special - * attributes: - *
      - *
    • - * The event loop for that display must be run from the thread.
    • - *
    • - * Some SWT API methods (notably, most of the public methods in - * Widget and its subclasses), may only be called from the thread. - * (To support multi-threaded user-interface applications, class - * Display provides inter-thread communication methods which allow - * threads other than the user-interface thread to request that it perform - * operations on their behalf.)
    • - *
    • - * The thread is not allowed to construct other Displays until that - * display has been disposed. (Note that, this is in addition to the restriction - * mentioned above concerning platform support for multiple displays. Thus, the - * only way to have multiple simultaneously active displays, even on platforms - * which support it, is to have multiple threads.)
    • - *
    - * Enforcing these attributes allows SWT to be implemented directly on the - * underlying operating system's event model. This has numerous benefits - * including smaller footprint, better use of resources, safer memory - * management, clearer program logic, better performance, and fewer overall - * operating system threads required. The down side however, is that care must - * be taken (only) when constructing multi-threaded applications to use the - * inter-thread communication mechanisms which this class provides when - * required.

    - *

    - * All SWT API methods which may only be called from the user-interface thread - * are distinguished in their documentation by indicating that they throw the " - * ERROR_THREAD_INVALID_ACCESS" SWT exception. - *

    - *
    - *
    Styles:
    - *
    (none)
    - *
    Events:
    - *
    Close, Dispose, Settings
    - *
    - *

    - * IMPORTANT: This class is not intended to be subclassed. - *

    - * - * @see #syncExec - * @see #asyncExec - * @see #wake - * @see #readAndDispatch - * @see #sleep - * @see Device#dispose - * @see Display - * snippets - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Display extends Device { - - Thread thread; - int threadId; - /* Windows and Events */ - private Event[] eventQueue; - private EventTable eventTable, filterTable; - - /* Focus */ - int focusEvent; - Control focusControl; - - /* Menus */ - private Menu[] bars; - Menu[] popups; - private MenuItem[] items; - - /* Settings */ - private static final int /* long */SETTINGS_ID = 100; - - /* - * The start value for WM_COMMAND id's. Windows reserves the values 0..100. - * - * The SmartPhone SWT resource file reserves the values 101..107. - */ - private static final int ID_START = 108; - - /* Sync/Async Widget Communication */ - private Synchronizer synchronizer = new Synchronizer(this); - - /* Display Shutdown */ - private Runnable[] disposeList; - - /* System Tray */ - private Tray tray; - - /* Timers */ - private int /* long */[] timerIds; - private Runnable[] timerList; - private int /* long */nextTimerId = SETTINGS_ID + 1; - - /* Keyboard and Mouse */ - int lastKey; - int lastAscii; - boolean lastVirtual; - boolean lastNull; - boolean xMouse; - - /* System Resources */ - private Font systemFont; - private Image errorImage, infoImage, questionImage, warningIcon; - private Cursor[] cursors = new Cursor[SWT.CURSOR_HAND + 1]; - - /* Display Data */ - private Object data; - private String[] keys; - private Object[] values; - - /* Multiple Displays */ - private static Display Default; - private static Display[] Displays = new Display[4]; - - /* Modality */ - Shell[] modalShells; - private Dialog modalDialog; - - /* Qt specific fields */ - private String styleSheet; - private Map qt2swtControlMap; - private MasterEventFilter masterEventFilter; - private int lastEventTime; - private static final ProcessEventsFlags PROCESS_EVENTS_FLAGS = new ProcessEventsFlags( - QEventLoop.ProcessEventsFlag.AllEvents); - private QTimer timer; - private final boolean ignorePaintEvents = false; - private QMessageHandler messageHandler; - - /* Package Name */ - private static final String PACKAGE_PREFIX = "org.eclipse.swt.widgets."; //$NON-NLS-1$ - - /* - * TEMPORARY CODE. Install the runnable that gets the current display. This - * code will be removed in the future. - */ - static { - DeviceFinder = new Runnable() { - public void run() { - Device device = getCurrent(); - if (device == null) { - device = getDefault(); - } - setDevice(device); - } - }; - } - - /* - * TEMPORARY CODE. - */ - static void setDevice(Device device) { - CurrentDevice = device; - } - - /** - * Constructs a new instance of this class. - *

    - * Note: The resulting display is marked as the current display. If - * this is the first display which has been constructed since the - * application started, it is also marked as the default display. - *

    - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if called from a thread - * that already created an existing display
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see #getCurrent - * @see #getDefault - * @see Widget#checkSubclass - * @see Shell - */ - public Display() { - this(null); - } - - /** - * Constructs a new instance of this class using the parameter. - * - * @param data - * the device data - */ - public Display(DeviceData data) { - super(data); - } - - public String getStyleSheet() { - return styleSheet; - } - - protected void setStyleSheet(String style) { - this.styleSheet = style; - for (Shell shell : getShells()) { - shell.setStyleSheet(style); - } - Event event = new Event(); - event.text = style; - sendEvent(SWQT.StyleSheetChange, event); - } - - private Control _getFocusControl() { - Widget widget = findControl(QApplication.focusWidget()); - if (widget instanceof Control) { - return (Control) widget; - } - return null; - } - - void addControl(Object qtControl, Widget swtControl) { - if (qtControl == null || swtControl == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - qt2swtControlMap.put(qtControl, swtControl); - } - - Widget findControl(Object qtControl) { - if (qtControl == null) { - return null; - } - return qt2swtControlMap.get(qtControl); - } - - Widget removeControl(Object qtControl) { - return qt2swtControlMap.remove(qtControl); - } - - void addBar(Menu menu) { - if (bars == null) { - bars = new Menu[4]; - } - int length = bars.length; - for (int i = 0; i < length; i++) { - if (bars[i] == menu) { - return; - } - } - int index = 0; - while (index < length) { - if (bars[index] == null) { - break; - } - index++; - } - if (index == length) { - Menu[] newBars = new Menu[length + 4]; - System.arraycopy(bars, 0, newBars, 0, length); - bars = newBars; - } - bars[index] = menu; - } - - void releaseTray(Tray tray) { - if (this.tray == tray) { - this.tray = null; - } - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when an event of the given type occurs anywhere in a widget. The event - * type is one of the event constants defined in class SWT. - * When the event does occur, the listener is notified by sending it the - * handleEvent() message. - *

    - * Setting the type of an event to SWT.None from within the - * handleEvent() method can be used to change the event type - * and stop subsequent Java listeners from running. Because event filters - * run before other listeners, event filters can both block other listeners - * and set arbitrary fields within an event. For this reason, event filters - * are both powerful and dangerous. They should generally be avoided for - * performance, debugging and code maintenance reasons. - *

    - * - * @param eventType - * the type of event to listen for - * @param listener - * the listener which should be notified when the event occurs - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Listener - * @see SWT - * @see #removeFilter - * @see #removeListener - * - * @since 3.0 - */ - public void addFilter(int eventType, Listener listener) { - checkDevice(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (filterTable == null) { - filterTable = new EventTable(); - } - filterTable.hook(eventType, listener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when an event of the given type occurs. The event type is one of the - * event constants defined in class SWT. When the event does - * occur in the display, the listener is notified by sending it the - * handleEvent() message. - * - * @param eventType - * the type of event to listen for - * @param listener - * the listener which should be notified when the event occurs - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Listener - * @see SWT - * @see #removeListener - * - * @since 2.0 - */ - public void addListener(int eventType, Listener listener) { - checkDevice(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - eventTable = new EventTable(); - } - eventTable.hook(eventType, listener); - } - - void addMenuItem(MenuItem item) { - if (items == null) { - items = new MenuItem[64]; - } - for (int i = 0; i < items.length; i++) { - if (items[i] == null) { - item.id = i + ID_START; - items[i] = item; - return; - } - } - item.id = items.length + ID_START; - MenuItem[] newItems = new MenuItem[items.length + 64]; - newItems[items.length] = item; - System.arraycopy(items, 0, newItems, 0, items.length); - items = newItems; - } - - void addPopup(Menu menu) { - if (popups == null) { - popups = new Menu[4]; - } - int length = popups.length; - for (int i = 0; i < length; i++) { - if (popups[i] == menu) { - return; - } - } - int index = 0; - while (index < length) { - if (popups[index] == null) { - break; - } - index++; - } - if (index == length) { - Menu[] newPopups = new Menu[length + 4]; - System.arraycopy(popups, 0, newPopups, 0, length); - popups = newPopups; - } - popups[index] = menu; - } - - /** - * Causes the run() method of the runnable to be invoked by the - * user-interface thread at the next reasonable opportunity. The caller of - * this method continues to run in parallel, and is not notified when the - * runnable has completed. Specifying null as the runnable - * simply wakes the user-interface thread when run. - *

    - * Note that at the time the runnable is invoked, widgets that have the - * receiver as their display may have been disposed. Therefore, it is - * necessary to check for this case inside the runnable before accessing the - * widget. - *

    - * - * @param runnable - * code to run on the user-interface thread or null - * - * @exception SWTException - *
      - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #syncExec - */ - public void asyncExec(Runnable runnable) { - synchronized (Device.class) { - if (isDisposed()) { - error(SWT.ERROR_DEVICE_DISPOSED); - } - synchronizer.asyncExec(runnable); - } - } - - /** - * Causes the system hardware to emit a short sound (if it supports this - * capability). - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void beep() { - checkDevice(); - QApplication.beep(); - } - - /** - * Checks that this class can be subclassed. - *

    - * IMPORTANT: See the comment in Widget.checkSubclass(). - *

    - * - * @exception SWTException - *
      - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see Widget#checkSubclass - */ - protected void checkSubclass() { - if (!isValidClass(getClass())) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - @Override - protected void checkDevice() { - if (thread == null) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - if (thread != Thread.currentThread()) { - /* - * Bug in IBM JVM 1.6. For some reason, under conditions that are - * yet to be full understood, Thread.currentThread() is either - * returning null or a different instance from the one that was - * saved when the Display was created. This is possibly a JIT - * problem because modifying this method to print logging - * information when the error happens seems to fix the problem. The - * fix is to use operating system calls to verify that the current - * thread is not the Display thread. - * - * NOTE: Despite the fact that Thread.currentThread() is used in - * other places, the failure has not been observed in all places - * where it is called. - */ - - if (threadId != (int) Thread.currentThread().getId()) { - error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - } - if (isDisposed()) { - error(SWT.ERROR_DEVICE_DISPOSED); - } - } - - private static void checkDisplay(Thread thread, boolean multiple) { - synchronized (Device.class) { - for (int i = 0; i < Displays.length; i++) { - if (Displays[i] != null) { - if (!multiple) { - SWT.error(SWT.ERROR_NOT_IMPLEMENTED, null, " [multiple displays]"); //$NON-NLS-1$ - } - if (Displays[i].thread == thread) { - SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - } - } - } - } - - void clearModal(Shell shell) { - if (modalShells == null) { - return; - } - int index = 0, length = modalShells.length; - while (index < length) { - if (modalShells[index] == shell) { - break; - } - if (modalShells[index] == null) { - return; - } - index++; - } - if (index == length) { - return; - } - System.arraycopy(modalShells, index + 1, modalShells, index, --length - index); - modalShells[length] = null; - if (index == 0 && modalShells[0] == null) { - modalShells = null; - } - Shell[] shells = getShells(); - for (int i = 0; i < shells.length; i++) { - shells[i].updateModal(); - } - } - - /** - * Requests that the connection between SWT and the underlying operating - * system be closed. - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Device#dispose - * - * @since 2.0 - */ - public void close() { - checkDevice(); - Event event = new Event(); - sendEvent(SWT.Close, event); - if (event.doit) { - dispose(); - } - } - - /** - * Creates the device in the operating system. If the device does not have a - * handle, this method may do nothing depending on the device. - *

    - * This method is called before init. - *

    - * - * @param data - * the DeviceData which describes the receiver - * - * @see #init - */ - @Override - protected void create(DeviceData data) { - checkSubclass(); - checkDisplay(thread = Thread.currentThread(), true); - createDisplay(data); - register(this); - if (Default == null) { - Default = this; - } - } - - private void createDisplay(DeviceData data) { - qt2swtControlMap = Collections.synchronizedMap(new HashMap()); - QApplication.initialize(new String[0]); - QApplication.setQuitOnLastWindowClosed(false); - masterEventFilter = new MasterEventFilter(this); - QApplication.instance().installEventFilter(masterEventFilter); - setPaintDevice(QApplication.desktop()); - messageHandler = new SwtMessageHandler(); - QMessageHandler.installMessageHandler(messageHandler); - } - - static void deregister(Display display) { - synchronized (Device.class) { - for (int i = 0; i < Displays.length; i++) { - if (display == Displays[i]) { - Displays[i] = null; - } - } - } - } - - /** - * Destroys the device in the operating system and releases the device's - * handle. If the device does not have a handle, this method may do nothing - * depending on the device. - *

    - * This method is called after release. - *

    - * - * @see Device#dispose - * @see #release - */ - @Override - protected void destroy() { - if (this == Default) { - Default = null; - } - deregister(this); - destroyDisplay(); - } - - void destroyDisplay() { - QMessageHandler.removeMessageHandler(messageHandler); - QApplication.instance().removeEventFilter(masterEventFilter); - QApplication.instance().dispose(); - } - - /** - * Causes the run() method of the runnable to be invoked by the - * user-interface thread just before the receiver is disposed. Specifying a - * null runnable is ignored. - * - * @param runnable - * code to run at dispose time. - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public void disposeExec(Runnable runnable) { - checkDevice(); - if (disposeList == null) { - disposeList = new Runnable[4]; - } - for (int i = 0; i < disposeList.length; i++) { - if (disposeList[i] == null) { - disposeList[i] = runnable; - return; - } - } - Runnable[] newDisposeList = new Runnable[disposeList.length + 4]; - System.arraycopy(disposeList, 0, newDisposeList, 0, disposeList.length); - newDisposeList[disposeList.length] = runnable; - disposeList = newDisposeList; - } - - /** - * Does whatever display specific cleanup is required, and then uses the - * code in SWTError.error to handle the error. - * - * @param code - * the descriptive error code - * - * @see SWT#error(int) - */ - void error(int code) { - SWT.error(code); - } - - boolean filterEvent(Event event) { - if (filterTable != null) { - filterTable.sendEvent(event); - } - return false; - } - - boolean filters(int eventType) { - if (filterTable == null) { - return false; - } - return filterTable.hooks(eventType); - } - - /** - * Given a widget and a widget-specific id, returns the instance of the - * Widget subclass which represents the widget/id pair in the - * currently running application, if such exists, or null if no matching - * widget can be found. - * - * @param widget - * the widget - * @param id - * the id for the subwidget (usually an item) - * @return the SWT subwidget (usually an item) that the widget/id pair - * represents - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.3 - */ - public Widget findWidget(Widget widget, int /* long */id) { - checkDevice(); - // TODO howto to it with qt ? use qObj.nativeId() ? - throw new UnsupportedOperationException("not yet implemented for qt"); //$NON-NLS-1$ - } - - // linux 64bit - public Widget findWidget(/* int */long id) { - checkDevice(); - // TODO howto to it with qt ? use qObj.nativeId() ? - throw new UnsupportedOperationException("not yet implemented for qt"); //$NON-NLS-1$ - } - - // win32 - public Widget findWidget(int /* long */hwnd, int /* long */id) { - checkDevice(); - // TODO howto to it with qt ? use qObj.nativeId() ? - throw new UnsupportedOperationException("not yet implemented for qt"); //$NON-NLS-1$ - } - - /** - * Returns the display which the given thread is the user-interface thread - * for, or null if the given thread is not a user-interface thread for any - * display. Specifying null as the thread will return - * null for the display. - * - * @param thread - * the user-interface thread - * @return the display for the given thread - */ - public static Display findDisplay(Thread thread) { - synchronized (Device.class) { - for (int i = 0; i < Displays.length; i++) { - Display display = Displays[i]; - if (display != null && display.thread == thread) { - return display; - } - } - return null; - } - } - - /** - * Returns the currently active Shell, or null if no shell - * belonging to the currently running application is active. - * - * @return the active shell or null - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Shell getActiveShell() { - checkDevice(); - QWidget activeWindow = QApplication.activeWindow(); - Widget control = findControl(activeWindow); - if (!(control instanceof Control)) { - return null; - } - return control != null ? ((Control) control).getShell() : null; - } - - /** - * Returns the single instance of the application menu bar or null - * when there is no application menu bar for the platform. - * - * @return the application menu bar or null - * - * @exception SWTException
      - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been disposed
    • - *
    - * - * @since 3.7 - */ - public Menu getMenuBar () { - checkDevice (); - return null; - } - - /** - * Returns a rectangle describing the receiver's size and location. Note - * that on multi-monitor systems the origin can be negative. - * - * @return the bounding rectangle - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - @Override - public Rectangle getBounds() { - checkDevice(); - return QtSWTConverter.convert(QApplication.desktop().screenGeometry()); - } - - /** - * Returns the display which the currently running thread is the - * user-interface thread for, or null if the currently running thread is not - * a user-interface thread for any display. - * - * @return the current display - */ - public static Display getCurrent() { - return findDisplay(Thread.currentThread()); - } - - /** - * Returns a rectangle which describes the area of the receiver which is - * capable of displaying data. - * - * @return the client area - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #getBounds - */ - @Override - public Rectangle getClientArea() { - checkDevice(); - return QtSWTConverter.convert(QApplication.desktop().childrenRect()); - } - - /** - * Returns the control which the on-screen pointer is currently over top of, - * or null if it is not currently over one of the controls built by the - * currently running application. - * - * @return the control under the cursor - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Control getCursorControl() { - checkDevice(); - Widget widget = findControl(QApplication.widgetAt(QCursor.pos())); - if (widget instanceof Control) { - return (Control) widget; - } - return null; - } - - /** - * Returns the location of the on-screen pointer relative to the top left - * corner of the screen. - * - * @return the cursor location - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Point getCursorLocation() { - checkDevice(); - return QtSWTConverter.convert(QCursor.pos()); - } - - /** - * Returns an array containing the recommended cursor sizes. - * - * @return the array of cursor sizes - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public Point[] getCursorSizes() { - checkDevice(); - return new Point[] { new Point(32, 32) }; - } - - /** - * Returns the default display. One is created (making the thread that - * invokes this method its user-interface thread) if it did not already - * exist. - * - * @return the default display - */ - public static Display getDefault() { - synchronized (Device.class) { - if (Default == null) { - Default = new Display(); - // Hack: This is necessary to prevent a JVM crash when leaving the Eclipse IDE with Qt! - // http://eclipse.compeople.eu/wiki/index.php/Compeople:SWTQtImplementierungsdetails#ACCESS_VIOLATION_beim_Beenden_der_IDE_mit_Qt - Display.deregister(Default); - Default.destroyDisplay(); - } - return Default; - } - } - - static boolean isValidClass(Class clazz) { - String name = clazz.getName(); - int index = name.lastIndexOf('.'); - return name.substring(0, index + 1).equals(PACKAGE_PREFIX); - } - - /** - * Returns the application defined property of the receiver with the - * specified name, or null if it has not been set. - *

    - * Applications may have associated arbitrary objects with the receiver in - * this fashion. If the objects stored in the properties need to be notified - * when the display is disposed of, it is the application's responsibility - * to provide a disposeExec() handler which does so. - *

    - * - * @param key - * the name of the property - * @return the value of the property or null if it has not been set - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the key is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #setData(String, Object) - * @see #disposeExec(Runnable) - */ - public Object getData(String key) { - checkDevice(); - if (key == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - - if (SWQT.STYLESHEET_KEY.equals(key)) { - return styleSheet; - } - - if (keys == null) { - return null; - } - - for (int i = 0; i < keys.length; i++) { - if (keys[i].equals(key)) { - return values[i]; - } - } - return null; - } - - /** - * Returns the application defined, display specific data associated with - * the receiver, or null if it has not been set. The - * display specific data is a single, unnamed field that is stored - * with every display. - *

    - * Applications may put arbitrary objects in this field. If the object - * stored in the display specific data needs to be notified when the display - * is disposed of, it is the application's responsibility to provide a - * disposeExec() handler which does so. - *

    - * - * @return the display specific data - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #setData(Object) - * @see #disposeExec(Runnable) - */ - public Object getData() { - checkDevice(); - return data; - } - - /** - * Returns the button dismissal alignment, one of LEFT or - * RIGHT. The button dismissal alignment is the ordering that - * should be used when positioning the default dismissal button for a - * dialog. For example, in a dialog that contains an OK and CANCEL button, - * on platforms where the button dismissal alignment is LEFT, - * the button ordering should be OK/CANCEL. When button dismissal alignment - * is RIGHT, the button ordering should be CANCEL/OK. - * - * @return the button dismissal order - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 2.1 - */ - public int getDismissalAlignment() { - checkDevice(); - return SWT.LEFT; - } - - /** - * Returns the longest duration, in milliseconds, between two mouse button - * clicks that will be considered a double click by the underlying - * operating system. - * - * @return the double click time - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public int getDoubleClickTime() { - checkDevice(); - return QApplication.doubleClickInterval(); - } - - /** - * Returns the control which currently has keyboard focus, or null if - * keyboard events are not currently going to any of the controls built by - * the currently running application. - * - * @return the control under the cursor - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Control getFocusControl() { - checkDevice(); - if (focusControl != null && !focusControl.isDisposed()) { - return focusControl; - } - return _getFocusControl(); - } - - /** - * Returns true when the high contrast mode is enabled. Otherwise, false is - * returned. - *

    - * Note: This operation is a hint and is not supported on platforms that do - * not have this concept. - *

    - * - * @return the high contrast mode - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public boolean getHighContrast() { - checkDevice(); - return false; - } - - /** - * Returns the maximum allowed depth of icons on this display, in bits per - * pixel. On some platforms, this may be different than the actual depth of - * the display. - * - * @return the maximum icon depth - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Device#getDepth - */ - public int getIconDepth() { - checkDevice(); - return QPixmap.defaultDepth(); - } - - /** - * Returns an array containing the recommended icon sizes. - * - * @return the array of icon sizes - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Decorations#setImages(Image[]) - * - * @since 3.0 - */ - public Point[] getIconSizes() { - checkDevice(); - // TODO defaults ok? - return new Point[] { new Point(16, 16), new Point(32, 32) }; - } - - public int getLastEventTime() { - return lastEventTime; - } - - private int getMessageCount() { - return synchronizer.getMessageCount(); - } - - Shell getModalShell() { - if (modalShells == null) { - return null; - } - int index = modalShells.length; - while (--index >= 0) { - Shell shell = modalShells[index]; - if (shell != null) { - return shell; - } - } - return null; - } - - Dialog getModalDialog() { - return modalDialog; - } - - /** - * Returns an array of monitors attached to the device. - * - * @return the array of monitors - * - * @since 3.0 - */ - public Monitor[] getMonitors() { - checkDevice(); - Monitor[] monitors = new Monitor[QApplication.desktop().numScreens()]; - for (int i = 0; i < monitors.length; i++) { - monitors[i] = createMonitor(i); - } - return monitors; - } - - static Monitor createMonitor(QWidget widget) { - return createMonitor(QApplication.desktop().screenNumber(widget)); - } - - static Monitor createMonitor(int index) { - QRect screen = QApplication.desktop().screenGeometry(index); - Monitor monitor = new Monitor(); - monitor.handle = index; - monitor.width = screen.width(); - monitor.height = screen.height(); - - QRect rect = QApplication.desktop().availableGeometry(index); - monitor.clientX = rect.left(); - monitor.clientY = rect.top(); - monitor.clientWidth = rect.width(); - monitor.clientHeight = rect.height(); - return monitor; - } - - /** - * Returns the primary monitor for that device. - * - * @return the primary monitor - * - * @since 3.0 - */ - public Monitor getPrimaryMonitor() { - checkDevice(); - return createMonitor(QApplication.desktop().primaryScreen()); - } - - /** - * Returns a (possibly empty) array containing all shells which have not - * been disposed and have the receiver as their display. - * - * @return the receiver's shells - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Shell[] getShells() { - checkDevice(); - int index = 0; - Shell[] result = new Shell[16]; - for (Widget control : qt2swtControlMap.values()) { - if (control != null && control instanceof Shell) { - int j = 0; - while (j < index) { - if (result[j] == control) { - break; - } - j++; - } - if (j == index) { - if (index == result.length) { - Shell[] newResult = new Shell[index + 16]; - System.arraycopy(result, 0, newResult, 0, index); - result = newResult; - } - result[index++] = (Shell) control; - } - } - } - if (index == result.length) { - return result; - } - Shell[] newResult = new Shell[index]; - System.arraycopy(result, 0, newResult, 0, index); - return newResult; - } - - /** - * Gets the synchronizer used by the display. - * - * @return the receiver's synchronizer - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.4 - */ - public Synchronizer getSynchronizer() { - checkDevice(); - return synchronizer; - } - - /** - * Returns the thread that has invoked syncExec or null if no - * such runnable is currently being invoked by the user-interface thread. - *

    - * Note: If a runnable invoked by asyncExec is currently running, this - * method will return null. - *

    - * - * @return the receiver's sync-interface thread - * - * @exception SWTException - *
      - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Thread getSyncThread() { - synchronized (Device.class) { - if (isDisposed()) { - error(SWT.ERROR_DEVICE_DISPOSED); - } - return synchronizer.syncThread; - } - } - - /** - * Returns the matching standard platform cursor for the given constant, - * which should be one of the cursor constants specified in class - * SWT. This cursor should not be free'd because it was - * allocated by the system, not the application. A value of - * null will be returned if the supplied constant is not an SWT - * cursor constant. - * - * @param id - * the SWT cursor constant - * @return the corresponding cursor or null - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see SWT#CURSOR_ARROW - * @see SWT#CURSOR_WAIT - * @see SWT#CURSOR_CROSS - * @see SWT#CURSOR_APPSTARTING - * @see SWT#CURSOR_HELP - * @see SWT#CURSOR_SIZEALL - * @see SWT#CURSOR_SIZENESW - * @see SWT#CURSOR_SIZENS - * @see SWT#CURSOR_SIZENWSE - * @see SWT#CURSOR_SIZEWE - * @see SWT#CURSOR_SIZEN - * @see SWT#CURSOR_SIZES - * @see SWT#CURSOR_SIZEE - * @see SWT#CURSOR_SIZEW - * @see SWT#CURSOR_SIZENE - * @see SWT#CURSOR_SIZESE - * @see SWT#CURSOR_SIZESW - * @see SWT#CURSOR_SIZENW - * @see SWT#CURSOR_UPARROW - * @see SWT#CURSOR_IBEAM - * @see SWT#CURSOR_NO - * @see SWT#CURSOR_HAND - * - * @since 3.0 - */ - public Cursor getSystemCursor(int id) { - checkDevice(); - if (!(0 <= id && id < cursors.length)) { - return null; - } - if (cursors[id] == null) { - cursors[id] = new Cursor(this, id); - } - return cursors[id]; - } - - /** - * Returns a reasonable font for applications to use. On some platforms, - * this will match the "default font" or "system font" if such can be found. - * This font should not be free'd because it was allocated by the system, - * not the application. - *

    - * Typically, applications which want the default look should simply not set - * the font on the widgets they create. Widgets are always created with the - * correct default font for the class of user-interface component they - * represent. - *

    - * - * @return a font - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - @Override - public Font getSystemFont() { - checkDevice(); - return systemFont = Font.qt_new(this, new QFont()); - } - - /** - * Returns the matching standard platform image for the given constant, - * which should be one of the icon constants specified in class - * SWT. This image should not be free'd because it was - * allocated by the system, not the application. A value of - * null will be returned either if the supplied constant is not - * an SWT icon constant or if the platform does not define an image that - * corresponds to the constant. - * - * @param id - * the SWT icon constant - * @return the corresponding image or null - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see SWT#ICON_ERROR - * @see SWT#ICON_INFORMATION - * @see SWT#ICON_QUESTION - * @see SWT#ICON_WARNING - * @see SWT#ICON_WORKING - * - * @since 3.0 - */ - public Image getSystemImage(int id) { - checkDevice(); - switch (id) { - case SWT.ICON_ERROR: { - if (errorImage != null) { - return errorImage; - } - QIcon icon = QApplication.style().standardIcon(StandardPixmap.SP_MessageBoxCritical); - return errorImage = Image.qt_new(this, SWT.ICON, icon); - } - case SWT.ICON_WORKING: - case SWT.ICON_INFORMATION: { - if (infoImage != null) { - return infoImage; - } - QIcon icon = QApplication.style().standardIcon(StandardPixmap.SP_MessageBoxInformation); - return errorImage = Image.qt_new(this, SWT.ICON, icon); - } - case SWT.ICON_QUESTION: { - if (questionImage != null) { - return questionImage; - } - QIcon icon = QApplication.style().standardIcon(StandardPixmap.SP_MessageBoxQuestion); - return errorImage = Image.qt_new(this, SWT.ICON, icon); - } - case SWT.ICON_WARNING: { - if (warningIcon != null) { - return warningIcon; - } - QIcon icon = QApplication.style().standardIcon(StandardPixmap.SP_MessageBoxWarning); - return errorImage = Image.qt_new(this, SWT.ICON, icon); - } - } - return null; - } - - /** - * Returns the single instance of the system-provided menu for the application. - * On platforms where no menu is provided for the application this method returns null. - * - * @return the system menu or null - * - * @exception SWTException
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been disposed
    • - *
    - * - * @since 3.7 - */ - public Menu getSystemMenu() { - checkDevice(); - return null; - } - - /** - * Returns the single instance of the system tray or null when there is no - * system tray available for the platform. - * - * @return the system tray or null - * - * @exception SWTException - *
      - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - */ - public Tray getSystemTray() { - checkDevice(); - if (tray != null) { - return tray; - } - tray = new Tray(this, SWT.NONE); - return tray; - } - - /** - * Returns the user-interface thread for the receiver. - * - * @return the receiver's user-interface thread - * - * @exception SWTException - *
      - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - */ - public Thread getThread() { - synchronized (Device.class) { - if (isDisposed()) { - error(SWT.ERROR_DEVICE_DISPOSED); - } - return thread; - } - } - - /** - * Returns true if a touch-aware input device is attached to the system, - * enabled, and ready for use. - * - * @since 3.7 - */ - public boolean getTouchEnabled() { - checkDevice(); - return false; - } - - /** - * Invokes platform specific functionality to allocate a new GC handle. - *

    - * IMPORTANT: This method is not part of the public API for - * Display. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

    - * - * @param data - * the platform specific GC data - * @return the platform specific GC handle - * - * @exception SWTException - *
      - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * @exception SWTError - *
      - *
    • ERROR_NO_HANDLES if a handle could not be obtained for - * gc creation
    • - *
    - */ - @Override - public QPaintDeviceInterface internal_new_GC(GCData data) { - if (isDisposed()) { - SWT.error(SWT.ERROR_DEVICE_DISPOSED); - } - return new QPicture(); - } - - /** - * Invokes platform specific functionality to dispose a GC handle. - *

    - * IMPORTANT: This method is not part of the public API for - * Display. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

    - * - * @param hDC - * the platform specific GC handle - * @param data - * the platform specific GC data - */ - @Override - public void internal_dispose_GC(QPaintDeviceInterface paintDevice, GCData data) { - // nothing - } - - boolean isValidThread() { - return thread == Thread.currentThread(); - } - - /** - * Maps a point from one coordinate system to another. When the control is - * null, coordinates are mapped to the display. - *

    - * NOTE: On right-to-left platforms where the coordinate systems are - * mirrored, special care needs to be taken when mapping coordinates from - * one control to another to ensure the result is correctly mirrored. - * - * Mapping a point that is the origin of a rectangle and then adding the - * width and height is not equivalent to mapping the rectangle. When one - * control is mirrored and the other is not, adding the width and height to - * a point that was mapped causes the rectangle to extend in the wrong - * direction. Mapping the entire rectangle instead of just one point causes - * both the origin and the corner of the rectangle to be mapped. - *

    - * - * @param from - * the source Control or null - * @param to - * the destination Control or null - * @param point - * to be mapped - * @return point with mapped coordinates - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the point is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the Control from or the - * Control to have been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 2.1.2 - */ - public Point map(Control from, Control to, Point point) { - checkDevice(); - if (point == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return map(from, to, point.x, point.y); - } - - /** - * Maps a point from one coordinate system to another. When the control is - * null, coordinates are mapped to the display. - *

    - * NOTE: On right-to-left platforms where the coordinate systems are - * mirrored, special care needs to be taken when mapping coordinates from - * one control to another to ensure the result is correctly mirrored. - * - * Mapping a point that is the origin of a rectangle and then adding the - * width and height is not equivalent to mapping the rectangle. When one - * control is mirrored and the other is not, adding the width and height to - * a point that was mapped causes the rectangle to extend in the wrong - * direction. Mapping the entire rectangle instead of just one point causes - * both the origin and the corner of the rectangle to be mapped. - *

    - * - * @param from - * the source Control or null - * @param to - * the destination Control or null - * @param x - * coordinates to be mapped - * @param y - * coordinates to be mapped - * @return point with mapped coordinates - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the Control from or the - * Control to have been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 2.1.2 - */ - public Point map(Control from, Control to, int x, int y) { - checkDevice(); - if (from != null && from.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (to != null && to.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (from == to) { - return new Point(x, y); - } - - Point point = null; - if (to != null && from != null) { - point = from.toDisplay(x, y); - point = to.toControl(x, y); - } else if (to != null) { - point = to.toControl(x, y); - } else if (from != null) { - point = from.toDisplay(x, y); - } else { - point = new Point(x, y); - } - return point; - } - - /** - * Maps a point from one coordinate system to another. When the control is - * null, coordinates are mapped to the display. - *

    - * NOTE: On right-to-left platforms where the coordinate systems are - * mirrored, special care needs to be taken when mapping coordinates from - * one control to another to ensure the result is correctly mirrored. - * - * Mapping a point that is the origin of a rectangle and then adding the - * width and height is not equivalent to mapping the rectangle. When one - * control is mirrored and the other is not, adding the width and height to - * a point that was mapped causes the rectangle to extend in the wrong - * direction. Mapping the entire rectangle instead of just one point causes - * both the origin and the corner of the rectangle to be mapped. - *

    - * - * @param from - * the source Control or null - * @param to - * the destination Control or null - * @param rectangle - * to be mapped - * @return rectangle with mapped coordinates - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the rectangle is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the Control from or the - * Control to have been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 2.1.2 - */ - public Rectangle map(Control from, Control to, Rectangle rectangle) { - checkDevice(); - if (rectangle == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return map(from, to, rectangle.x, rectangle.y, rectangle.width, rectangle.height); - } - - /** - * Maps a point from one coordinate system to another. When the control is - * null, coordinates are mapped to the display. - *

    - * NOTE: On right-to-left platforms where the coordinate systems are - * mirrored, special care needs to be taken when mapping coordinates from - * one control to another to ensure the result is correctly mirrored. - * - * Mapping a point that is the origin of a rectangle and then adding the - * width and height is not equivalent to mapping the rectangle. When one - * control is mirrored and the other is not, adding the width and height to - * a point that was mapped causes the rectangle to extend in the wrong - * direction. Mapping the entire rectangle instead of just one point causes - * both the origin and the corner of the rectangle to be mapped. - *

    - * - * @param from - * the source Control or null - * @param to - * the destination Control or null - * @param x - * coordinates to be mapped - * @param y - * coordinates to be mapped - * @param width - * coordinates to be mapped - * @param height - * coordinates to be mapped - * @return rectangle with mapped coordinates - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the Control from or the - * Control to have been disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 2.1.2 - */ - public Rectangle map(Control from, Control to, int x, int y, int width, int height) { - checkDevice(); - if (from != null && from.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (to != null && to.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (from == to) { - return new Rectangle(x, y, width, height); - } - - Rectangle rectangle = new Rectangle(x, y, width, height); - if (to != null && from != null) { - Point topLeft = from.toDisplay(x, y); - topLeft = to.toControl(topLeft); - rectangle.x = topLeft.x; - rectangle.y = topLeft.y; - } else if (to != null) { - Point topLeft = to.toControl(x, y); - rectangle.x = topLeft.x; - rectangle.y = topLeft.y; - } else if (from != null) { - Point topLeft = from.toDisplay(x, y); - rectangle.x = topLeft.x; - rectangle.y = topLeft.y; - } - return rectangle; - } - - /** - * Generate a low level system event. - * - * post is used to generate low level keyboard and mouse - * events. The intent is to enable automated UI testing by simulating the - * input from the user. Most SWT applications should never need to call this - * method. - *

    - * Note that this operation can fail when the operating system fails to - * generate the event for any reason. For example, this can happen when - * there is no such key or mouse button or when the system event queue is - * full. - *

    - *

    - * Event Types: - *

    - * KeyDown, KeyUp - *

    - * The following fields in the Event apply: - *

      - *
    • (in) type KeyDown or KeyUp
    • - *

      - * Either one of: - *

    • (in) character a character that corresponds to a keyboard key
    • - *
    • (in) keyCode the key code of the key that was typed, as defined by - * the key code constants in class SWT
    • - *
    - *

    - * MouseDown, MouseUp - *

    - *

    - * The following fields in the Event apply: - *

      - *
    • (in) type MouseDown or MouseUp - *
    • (in) button the button that is pressed or released - *
    - *

    - * MouseMove - *

    - *

    - * The following fields in the Event apply: - *

      - *
    • (in) type MouseMove - *
    • (in) x the x coordinate to move the mouse pointer to in screen - * coordinates - *
    • (in) y the y coordinate to move the mouse pointer to in screen - * coordinates - *
    - *

    - * MouseWheel - *

    - *

    - * The following fields in the Event apply: - *

      - *
    • (in) type MouseWheel - *
    • (in) detail either SWT.SCROLL_LINE or SWT.SCROLL_PAGE - *
    • (in) count the number of lines or pages to scroll - *
    - * - * - * @param event - * the event to be generated - * - * @return true if the event was generated or false otherwise - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the event is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 3.0 - * - */ - public boolean post(Event event) { - if (isDisposed()) { - error(SWT.ERROR_DEVICE_DISPOSED); - } - if (event == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - - QWidget control = getControlForEvent(event); - if (control == null) { - return false; - } - - QEvent qtEvent = createQEvent(event, control); - if (event == null) { - return false; - } - - QApplication.postEvent(control, qtEvent); - return true; - - } - - private QWidget getControlForEvent(Event event) { - if (event.widget != null) { - return event.widget.getQWidget(); - } - return QApplication.focusWidget(); - } - - private QEvent createQEvent(Event event, QWidget focusWidget) { - KeyboardModifiers modifiers = mapSWTModifier2Qt(event.stateMask); - Type type = mapSWTEventType2Qt(event.type); - - switch (type) { - case KeyPress: - case KeyRelease: - return createQKeyEvent(event, type, modifiers); - case MouseButtonPress: - case MouseMove: - case MouseButtonRelease: - case MouseButtonDblClick: - return createQMouseEvent(event, type, modifiers, focusWidget); - } - return null; - } - - private QEvent createQMouseEvent(Event event, Type type, KeyboardModifiers modifiers, QWidget focusWidget) { - Control widget = (Control) findControl(focusWidget); - if ((widget.getStyle() & SWT.MIRRORED) != 0) { - event.x = widget.getClientWidth() - event.x; - } - - QPoint eventPoint = new QPoint(event.x, event.y); - QPoint global = focusWidget.mapToGlobal(eventPoint); - MouseButton button = mapSWTButton2Qt(event.button); - if (!type.equals(Type.MouseMove) && button.equals(MouseButton.NoButton)) { - return null; - } - return new QMouseEvent(type, eventPoint, global, button, MouseButton.createQFlags(button), modifiers); - } - - private QEvent createQKeyEvent(Event event, Type type, KeyboardModifiers modifiers) { - // If neither keyCode nor character is given then abort - if (event.keyCode == 0 && event.character == 0) { - return null; - } - - // Primarily try to map the keyCode to Qt:Key - int key = KeyUtil.untranslateKey(event.keyCode); - // If keyCode was given in the Event - if (event.keyCode != 0) { - // Given keyCode couldn't be translated, use it directly - if (key == 0) { - key = event.keyCode; - } - } - - // Secondarily if keyCode couldn't be mapped try the character - if (key == 0) { - switch (event.character) { - case SWT.BS: - key = Key.Key_Backspace.value(); - break; - case SWT.CR: - key = Key.Key_Return.value(); - break; - case SWT.DEL: - key = Key.Key_Delete.value(); - break; - case SWT.ESC: - key = Key.Key_Escape.value(); - break; - case SWT.TAB: - key = Key.Key_Tab.value(); - break; - /* - * Since there is no LF key on the keyboard, do not attempt to map - * LF to CR or attempt to post an LF key. - */ - case SWT.LF: - return null; - default: - key = Character.toUpperCase(event.character); - break; - } - } - return new QKeyEvent(type, key, modifiers, String.valueOf(event.character)); - } - - private static KeyboardModifiers mapSWTModifier2Qt(int modifiers) { - int nativeModifiers = 0; - if ((modifiers & SWT.ALT) != 0) { - nativeModifiers |= KeyboardModifier.AltModifier.value(); - } - if ((modifiers & SWT.SHIFT) != 0) { - nativeModifiers |= KeyboardModifier.ShiftModifier.value(); - } - if ((modifiers & SWT.CONTROL) != 0) { - nativeModifiers |= KeyboardModifier.ControlModifier.value(); - } - return new KeyboardModifiers(nativeModifiers); - } - - private static QEvent.Type mapSWTEventType2Qt(int type) { - switch (type) { - case SWT.KeyDown: - return Type.KeyPress; - case SWT.KeyUp: - return Type.KeyRelease; - case SWT.MouseDown: - return Type.MouseButtonPress; - case SWT.MouseMove: - return Type.MouseMove; - case SWT.MouseUp: - return Type.MouseButtonRelease; - case SWT.MouseDoubleClick: - return Type.MouseButtonDblClick; - default: - return Type.None; - } - } - - private static MouseButton mapSWTButton2Qt(int button) { - switch (button) { - case 1: - return MouseButton.LeftButton; - case 2: - return MouseButton.MidButton; - case 3: - return MouseButton.RightButton; - default: - return MouseButton.NoButton; - } - } - - void postEvent(Event event) { - /* - * Place the event at the end of the event queue. This code is always - * called in the Display's thread so it must be re-enterant but does not - * need to be synchronized. - */ - if (eventQueue == null) { - eventQueue = new Event[4]; - } - int index = 0; - int length = eventQueue.length; - while (index < length) { - if (eventQueue[index] == null) { - break; - } - index++; - } - if (index == length) { - Event[] newQueue = new Event[length + 4]; - System.arraycopy(eventQueue, 0, newQueue, 0, length); - eventQueue = newQueue; - } - eventQueue[index] = event; - } - - /** - * Reads an event from the operating system's event queue, dispatches it - * appropriately, and returns true if there is potentially more - * work to do, or false if the caller can sleep until another - * event is placed on the event queue. - *

    - * In addition to checking the system event queue, this method also checks - * if any inter-thread messages (created by syncExec() or - * asyncExec()) are waiting to be processed, and if so handles - * them before returning. - *

    - * - * @return false if the caller can sleep upon return from this - * method - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_FAILED_EXEC - if an exception occurred while - * running an inter-thread message
    • - *
    - * - * @see #sleep - * @see #wake - */ - public boolean readAndDispatch() { - checkDevice(); - // runPopups(); - // boolean canSleep = runAsyncMessages(false); - // if (!canSleep) { - // QApplication.processEvents(); - // } - // return canSleep; - - if (QApplication.hasPendingEvents()) { - QApplication.processEvents();//ProcessEventsFlag.AllEvents - if (isDisposed()) { - return false; - } - QApplication.sendPostedEvents(); - } - if (isDisposed()) { - return false; - } - - runDeferredEvents(); - - if (isDisposed()) { - return false; - } - - runPopups(); - - if (isDisposed()) { - return false; - } - - return runAsyncMessages(false); - } - - private static void register(Display display) { - synchronized (Device.class) { - for (int i = 0; i < Displays.length; i++) { - if (Displays[i] == null) { - Displays[i] = display; - return; - } - } - Display[] newDisplays = new Display[Displays.length + 4]; - System.arraycopy(Displays, 0, newDisplays, 0, Displays.length); - newDisplays[Displays.length] = display; - Displays = newDisplays; - } - } - - /** - * Releases any internal resources back to the operating system and clears - * all fields except the device handle. - *

    - * Disposes all shells which are currently open on the display. After this - * method has been invoked, all related related shells will answer - * true when sent the message isDisposed(). - *

    - *

    - * When a device is destroyed, resources that were acquired on behalf of the - * programmer need to be returned to the operating system. For example, if - * the device allocated a font to be used as the system font, this font - * would be freed in release. Also,to assist the garbage - * collector and minimize the amount of memory that is not reclaimed when - * the programmer keeps a reference to a disposed device, all fields except - * the handle are zero'd. The handle is needed by destroy. - *

    - * This method is called before destroy. - * - * @see Device#dispose - * @see #destroy - */ - @Override - protected void release() { - sendEvent(SWT.Dispose, new Event()); - Shell[] shells = getShells(); - for (int i = 0; i < shells.length; i++) { - Shell shell = shells[i]; - if (!shell.isDisposed()) { - shell.dispose(); - } - } - if (tray != null) { - tray.dispose(); - } - tray = null; - while (readAndDispatch()) { - } - if (disposeList != null) { - for (int i = 0; i < disposeList.length; i++) { - if (disposeList[i] != null) { - disposeList[i].run(); - } - } - } - disposeList = null; - synchronizer.releaseSynchronizer(); - synchronizer = null; - releaseDisplay(); - super.release(); - } - - private void releaseDisplay() { - /* Release the System fonts */ - if (systemFont != null) { - systemFont.dispose(); - } - systemFont = null; - - /* Release the System Images */ - if (errorImage != null) { - errorImage.dispose(); - } - if (infoImage != null) { - infoImage.dispose(); - } - if (questionImage != null) { - questionImage.dispose(); - } - if (warningIcon != null) { - warningIcon.dispose(); - } - errorImage = infoImage = questionImage = warningIcon = null; - - /* Release the System Cursors */ - for (int i = 0; i < cursors.length; i++) { - if (cursors[i] != null) { - cursors[i].dispose(); - } - } - cursors = null; - - /* Release references */ - thread = null; - modalDialog = null; - modalShells = null; - data = null; - keys = null; - values = null; - bars = popups = null; - timerIds = null; - timerList = null; - eventTable = filterTable = null; - items = null; - - /* Release handles */ - threadId = 0; - QApplication.quit(); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when an event of the given type occurs anywhere in a widget. The - * event type is one of the event constants defined in class - * SWT. - * - * @param eventType - * the type of event to listen for - * @param listener - * the listener which should no longer be notified when the event - * occurs - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see Listener - * @see SWT - * @see #addFilter - * @see #addListener - * - * @since 3.0 - */ - public void removeFilter(int eventType, Listener listener) { - checkDevice(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (filterTable == null) { - return; - } - filterTable.unhook(eventType, listener); - if (filterTable.size() == 0) { - filterTable = null; - } - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when an event of the given type occurs. The event type is one of - * the event constants defined in class SWT. - * - * @param eventType - * the type of event to listen for - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Listener - * @see SWT - * @see #addListener - * - * @since 2.0 - */ - public void removeListener(int eventType, Listener listener) { - checkDevice(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(eventType, listener); - } - - void removeBar(Menu menu) { - if (bars == null) { - return; - } - for (int i = 0; i < bars.length; i++) { - if (bars[i] == menu) { - bars[i] = null; - return; - } - } - } - - void removeMenuItem(MenuItem item) { - if (items == null) { - return; - } - items[item.id - ID_START] = null; - } - - void removePopup(Menu menu) { - if (popups == null) { - return; - } - for (int i = 0; i < popups.length; i++) { - if (popups[i] == menu) { - popups[i] = null; - return; - } - } - } - - private boolean runAsyncMessages(boolean all) { - return synchronizer.runAsyncMessages(all); - } - - private boolean runDeferredEvents() { - boolean run = false; - /* - * Run deferred events. This code is always called in the Display's - * thread so it must be re-enterant but need not be synchronized. - */ - while (eventQueue != null) { - - /* Take an event off the queue */ - Event event = eventQueue[0]; - if (event == null) { - break; - } - int length = eventQueue.length; - System.arraycopy(eventQueue, 1, eventQueue, 0, --length); - eventQueue[length] = null; - - /* Run the event */ - Widget widget = event.widget; - if (widget != null && !widget.isDisposed()) { - Widget item = event.item; - if (item == null || !item.isDisposed()) { - run = true; - widget.sendEvent(event); - } - } - - /* - * At this point, the event queue could be null due to a recursive - * invocation when running the event. - */ - } - - /* Clear the queue */ - eventQueue = null; - return run; - } - - private boolean runPopups() { - if (popups == null) { - return false; - } - boolean result = false; - while (popups != null) { - Menu menu = popups[0]; - if (menu == null) { - break; - } - int length = popups.length; - System.arraycopy(popups, 1, popups, 0, --length); - popups[length] = null; - if (!menu.isDisposed()) { - menu._setVisible(true); - } - result = true; - } - popups = null; - return result; - } - - private boolean runTimer(int /* long */id) { - if (timerList != null && timerIds != null) { - int index = 0; - while (index < timerIds.length) { - if (timerIds[index] == id && timerIds[index] != -1) { - timer.killTimer(timerIds[index]); - timerIds[index] = 0; - Runnable runnable = timerList[index]; - timerList[index] = null; - if (runnable != null) { - runnable.run(); - } - return true; - } - index++; - } - } - return false; - } - - private void sendEvent(int eventType, Event event) { - if (eventTable == null && filterTable == null) { - return; - } - if (event == null) { - event = new Event(); - } - event.display = this; - event.type = eventType; - if (event.time == 0) { - event.time = getLastEventTime(); - } - if (!filterEvent(event)) { - if (eventTable != null) { - eventTable.sendEvent(event); - } - } - } - - /** - * Sets the location of the on-screen pointer relative to the top left - * corner of the screen. Note: It is typically considered bad practice - * for a program to move the on-screen pointer location. - * - * @param x - * the new x coordinate for the cursor - * @param y - * the new y coordinate for the cursor - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 2.1 - */ - public void setCursorLocation(int x, int y) { - checkDevice(); - QCursor.setPos(x, y); - } - - /** - * Sets the location of the on-screen pointer relative to the top left - * corner of the screen. Note: It is typically considered bad practice - * for a program to move the on-screen pointer location. - * - * @param point - * new position - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_NULL_ARGUMENT - if the point is null - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @since 2.0 - */ - public void setCursorLocation(Point point) { - checkDevice(); - if (point == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setCursorLocation(point.x, point.y); - } - - /** - * Sets the application defined property of the receiver with the specified - * name to the given argument. - *

    - * Applications may have associated arbitrary objects with the receiver in - * this fashion. If the objects stored in the properties need to be notified - * when the display is disposed of, it is the application's responsibility - * provide a disposeExec() handler which does so. - *

    - * - * @param key - * the name of the property - * @param value - * the new value for the property - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the key is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #getData(String) - * @see #disposeExec(Runnable) - */ - public void setData(String key, Object value) { - checkDevice(); - if (key == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - - if (SWQT.STYLESHEET_KEY.equals(key)) { - setStyleSheet((String) value); - } - - /* Remove the key/value pair */ - if (value == null) { - if (keys == null) { - return; - } - int index = 0; - while (index < keys.length && !keys[index].equals(key)) { - index++; - } - if (index == keys.length) { - return; - } - if (keys.length == 1) { - keys = null; - values = null; - } else { - String[] newKeys = new String[keys.length - 1]; - Object[] newValues = new Object[values.length - 1]; - System.arraycopy(keys, 0, newKeys, 0, index); - System.arraycopy(keys, index + 1, newKeys, index, newKeys.length - index); - System.arraycopy(values, 0, newValues, 0, index); - System.arraycopy(values, index + 1, newValues, index, newValues.length - index); - keys = newKeys; - values = newValues; - } - return; - } - - /* Add the key/value pair */ - if (keys == null) { - keys = new String[] { key }; - values = new Object[] { value }; - return; - } - for (int i = 0; i < keys.length; i++) { - if (keys[i].equals(key)) { - values[i] = value; - return; - } - } - String[] newKeys = new String[keys.length + 1]; - Object[] newValues = new Object[values.length + 1]; - System.arraycopy(keys, 0, newKeys, 0, keys.length); - System.arraycopy(values, 0, newValues, 0, values.length); - newKeys[keys.length] = key; - newValues[values.length] = value; - keys = newKeys; - values = newValues; - } - - /** - * Sets the application defined, display specific data associated with the - * receiver, to the argument. The display specific data is a - * single, unnamed field that is stored with every display. - *

    - * Applications may put arbitrary objects in this field. If the object - * stored in the display specific data needs to be notified when the display - * is disposed of, it is the application's responsibility provide a - * disposeExec() handler which does so. - *

    - * - * @param data - * the new display specific data - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #getData() - * @see #disposeExec(Runnable) - */ - public void setData(Object data) { - checkDevice(); - this.data = data; - } - - /** - * On platforms which support it, sets the application name to be the - * argument. On Motif, for example, this can be used to set the name used - * for resource lookup. Specifying null for the name clears it. - * - * @param name - * the new app name or null - */ - public static void setAppName(String name) { - QApplication.setApplicationName(name); - } - - void setModalDialog(Dialog modalDailog) { - this.modalDialog = modalDailog; - Shell[] shells = getShells(); - for (int i = 0; i < shells.length; i++) { - shells[i].updateModal(); - } - } - - void setModalShell(Shell shell) { - if (modalShells == null) { - modalShells = new Shell[4]; - } - int index = 0, length = modalShells.length; - while (index < length) { - if (modalShells[index] == shell) { - return; - } - if (modalShells[index] == null) { - break; - } - index++; - } - if (index == length) { - Shell[] newModalShells = new Shell[length + 4]; - System.arraycopy(modalShells, 0, newModalShells, 0, length); - modalShells = newModalShells; - } - modalShells[index] = shell; - Shell[] shells = getShells(); - for (int i = 0; i < shells.length; i++) { - shells[i].updateModal(); - } - } - - /** - * Sets the synchronizer used by the display to be the argument, which can - * not be null. - * - * @param synchronizer - * the new synchronizer for the display (must not be null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the synchronizer is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_FAILED_EXEC - if an exception occurred while - * running an inter-thread message
    • - *
    - */ - public void setSynchronizer(Synchronizer synchronizer) { - checkDevice(); - if (synchronizer == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (synchronizer == this.synchronizer) { - return; - } - Synchronizer oldSynchronizer; - synchronized (Device.class) { - oldSynchronizer = this.synchronizer; - this.synchronizer = synchronizer; - } - if (oldSynchronizer != null) { - oldSynchronizer.runAsyncMessages(true); - } - } - - /** - * Causes the user-interface thread to sleep (that is, to be put in - * a state where it does not consume CPU cycles) until an event is received - * or it is otherwise awakened. - * - * @return true if an event requiring dispatching was placed on - * the queue. - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #wake - */ - public boolean sleep() { - checkDevice(); - if (getMessageCount() != 0) { - return true; - } - - try { - Thread.sleep(10); - } catch (InterruptedException e) { - // awake - } - QApplication.processEvents(PROCESS_EVENTS_FLAGS, 1000); - - if (isDisposed()) { - destroy(); - } - return true; - } - - /** - * Causes the run() method of the runnable to be invoked by the - * user-interface thread at the next reasonable opportunity. The thread - * which calls this method is suspended until the runnable completes. - * Specifying null as the runnable simply wakes the - * user-interface thread. - *

    - * Note that at the time the runnable is invoked, widgets that have the - * receiver as their display may have been disposed. Therefore, it is - * necessary to check for this case inside the runnable before accessing the - * widget. - *

    - * - * @param runnable - * code to run on the user-interface thread or null - * - * @exception SWTException - *
      - *
    • ERROR_FAILED_EXEC - if an exception occurred when - * executing the runnable
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #asyncExec - */ - public void syncExec(Runnable runnable) { - Synchronizer synchronizer; - synchronized (Device.class) { - if (isDisposed()) { - error(SWT.ERROR_DEVICE_DISPOSED); - } - synchronizer = this.synchronizer; - } - synchronizer.syncExec(runnable); - } - - /** - * Causes the run() method of the runnable to be invoked by the - * user-interface thread after the specified number of milliseconds have - * elapsed. If milliseconds is less than zero, the runnable is not executed. - *

    - * Note that at the time the runnable is invoked, widgets that have the - * receiver as their display may have been disposed. Therefore, it is - * necessary to check for this case inside the runnable before accessing the - * widget. - *

    - * - * @param milliseconds - * the delay before running the runnable - * @param runnable - * code to run on the user-interface thread - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the runnable is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #asyncExec - */ - - public void timerExec(int milliseconds, Runnable runnable) { - checkDevice(); - timer = new QTimer(); - - if (runnable == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (timerList == null) { - timerList = new Runnable[4]; - } - if (timerIds == null) { - timerIds = new int /* long */[4]; - } - int index = 0; - while (index < timerList.length) { - if (timerList[index] == runnable) { - break; - } - index++; - } - int /* long */timerId = 0; - if (index != timerList.length) { - timerId = timerIds[index]; - if (milliseconds < 0) { - timer.killTimer(timerId); - timerList[index] = null; - timerIds[index] = 0; - return; - } - } else { - if (milliseconds < 0) { - return; - } - index = 0; - while (index < timerList.length) { - if (timerList[index] == null) { - break; - } - index++; - } - timerId = nextTimerId++; - if (index == timerList.length) { - Runnable[] newTimerList = new Runnable[timerList.length + 4]; - System.arraycopy(timerList, 0, newTimerList, 0, timerList.length); - timerList = newTimerList; - int /* long */[] newTimerIds = new int /* long */[timerIds.length + 4]; - System.arraycopy(timerIds, 0, newTimerIds, 0, timerIds.length); - timerIds = newTimerIds; - } - } - - timer.setSingleShot(false); - timer.start(milliseconds); - final QTimerEvent qte = new QTimerEvent(timer.timerId()); - timer.timeout.connect(new QObject() { - private int id = qte.timerId(); - - @SuppressWarnings("unused") - protected void idTransfer() { - runTimer(id); - } - }, "idTransfer()"); //$NON-NLS-1$ - timerList[index] = runnable; - timerIds[index] = timer.timerId(); - } - - /** - * Forces all outstanding paint requests for the display to be processed - * before this method returns. - * - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see Control#update() - */ - public void update() { - checkDevice(); - if (QApplication.hasPendingEvents()) { - QApplication.processEvents(QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents); - } - } - - /** - * If the receiver's user-interface thread was sleeping, causes - * it to be awakened and start running again. Note that this method may be - * called from any thread. - * - * @exception SWTException - *
      - *
    • ERROR_DEVICE_DISPOSED - if the receiver has been - * disposed
    • - *
    - * - * @see #sleep - */ - public void wake() { - synchronized (Device.class) { - if (isDisposed()) { - error(SWT.ERROR_DEVICE_DISPOSED); - } - if (thread == Thread.currentThread()) { - return; - } - wakeThread(); - } - } - - void wakeThread() { - try { - thread.notify(); - } catch (Exception e) { - // ok - } - } - - static String withCrLf(String string) { - - /* If the string is empty, return the string. */ - int length = string.length(); - if (length == 0) { - return string; - } - - /* - * Check for an LF or CR/LF and assume the rest of the string is - * formated that way. This will not work if the string contains mixed - * delimiters. - */ - int i = string.indexOf('\n', 0); - if (i == -1) { - return string; - } - if (i > 0 && string.charAt(i - 1) == '\r') { - return string; - } - - /* - * The string is formatted with LF. Compute the number of lines and the - * size of the buffer needed to hold the result - */ - i++; - int count = 1; - while (i < length) { - if ((i = string.indexOf('\n', i)) == -1) { - break; - } - count++; - i++; - } - count += length; - - /* Create a new string with the CR/LF line terminator. */ - i = 0; - StringBuffer result = new StringBuffer(count); - while (i < length) { - int j = string.indexOf('\n', i); - if (j == -1) { - j = length; - } - result.append(string.substring(i, j)); - if ((i = j) < length) { - result.append("\r\n"); //$NON-NLS-1$ - i++; - } - } - return result.toString(); - } - - private final class MasterEventFilter extends QObject { - private final Display display; - private final boolean printEvents = Boolean.getBoolean("swtqt.printEvents"); //$NON-NLS-1$ - - public MasterEventFilter(Display display) { - this.display = display; - } - - @Override - public boolean eventFilter(QObject obj, QEvent event) { - try { - if (printEvents) { - System.out.println("QObject: " + (obj == null ? "null" : obj.toString()) + ": " + event.toString()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - lastEventTime = QTime.currentTime().elapsed(); - Widget eventSource = display.findControl(obj); - if (eventSource == null) { - // if (event.type() == Type.Paint) { - // System.out.println("paint event for qObj: " + obj + " unknown swt source"); //$NON-NLS-1$ //$NON-NLS-2$ - // } - if (printEvents) { - System.err.println("unknown event source: " + obj + " parent: " //$NON-NLS-1$ //$NON-NLS-2$ - + (obj == null ? "null" : obj.parent())); //$NON-NLS-1$ - } - return false; - } - switch (event.type()) { - case Paint: - if (printEvents) { - System.out.println("paint event for qObj: " + obj + " swt: " + eventSource); //$NON-NLS-1$ //$NON-NLS-2$ - } - if (ignorePaintEvents) { - return false; - } - return eventSource.qtPaintEvent(obj, (QPaintEvent) event); - case Resize: - return eventSource.qtResizeEvent(obj, (QResizeEvent) event); - case Move: - return eventSource.qtMoveEvent(obj, (QMoveEvent) event); - case FocusIn: - eventSource.qtFocusInEvent(obj); - return false; - case FocusOut: - eventSource.qtFocusOutEvent(obj); - return false; - case ContextMenu: { - QContextMenuEvent contextEvent = (QContextMenuEvent) event; - boolean accepted = eventSource.qtContextMenuEvent(obj, contextEvent); - if (accepted) { - contextEvent.setAccepted(true); - } - return accepted; - } - case Close: - QCloseEvent closeEvent = (QCloseEvent) event; - boolean accepted = eventSource.qtCloseEvent(); - if (accepted) { - closeEvent.ignore(); - } - return accepted; - case Enter: - return eventSource.qtMouseEnterEvent(obj); - case Leave: - return eventSource.qtMouseLeaveEvent(obj); - case Show: - return eventSource.qtShowEvent(obj); - case Hide: - return eventSource.qtHideEvent(obj); - case MouseMove: - return eventSource.qtMouseMoveEvent(obj, (QMouseEvent) event); - case MouseButtonPress: - QMouseEvent mouseEvent = (QMouseEvent) event; - // for debug - // QWidget widget = QApplication.widgetAt(mouseEvent.globalX(), mouseEvent.globalY()); - // System.out.println("mouse click on: " + widget); - // System.out.println("mouse click on swt widget: " + display.findControl(widget)); - return eventSource.qtMouseButtonPressEvent(obj, mouseEvent); - case MouseButtonRelease: - return eventSource.qtMouseButtonReleaseEvent(obj, (QMouseEvent) event); - case MouseButtonDblClick: - return eventSource.qtMouseButtonDblClickEvent(obj, (QMouseEvent) event); - case KeyPress: - return eventSource.qtKeyPressEvent(obj, (QKeyEvent) event); - case KeyRelease: - return eventSource.qtKeyReleaseEvent(obj, (QKeyEvent) event); - case WindowActivate: - return eventSource.qtWindowActivateEvent(obj); - case WindowDeactivate: - return eventSource.qtWindowDeactivateEvent(obj); - case WindowStateChange: - return eventSource.qtWindowStateChangeEvent(obj, (QWindowStateChangeEvent) event); - case WinEventAct: - return false; - case Timer: - return false; - default: - if (printEvents) { - System.err.println("unhandled event: " + event); //$NON-NLS-1$ - } - } - } catch (Exception e) { - System.err.println("error during event processing:"); //$NON-NLS-1$ - e.printStackTrace(); - } - return false; - } - - } - - private final static class SwtMessageHandler extends QMessageHandler { - - @Override - public void warning(String msg) { - System.err.println("Qt-Warning: " + msg); //$NON-NLS-1$ - } - - @Override - public void fatal(String msg) { - System.err.println("Qt-Fatal: " + msg); //$NON-NLS-1$ - } - - @Override - public void debug(String msg) { - System.err.println("Qt-Debug: " + msg); //$NON-NLS-1$ - } - - @Override - public void critical(String msg) { - System.err.println("Qt-Critical: " + msg); //$NON-NLS-1$ - } - }; - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FileDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FileDialog.java deleted file mode 100644 index f199d3626e..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FileDialog.java +++ /dev/null @@ -1,443 +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 java.util.List; - -import com.trolltech.qt.gui.QFileDialog; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; - -/** - * Instances of this class allow the user to navigate the file system and select - * or enter a file name. - *
    - *
    Styles:
    - *
    SAVE, OPEN, MULTI
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * Note: Only one of the styles SAVE and OPEN may be specified. - *

    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see FileDialog - * snippets - * @see SWT Example: - * ControlExample, Dialog tab - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class FileDialog extends Dialog { - String[] filterNames = new String[0]; - String[] filterExtensions = new String[0]; - String[] fileNames = new String[0]; - String filterPath = "", fileName = "";//$NON-NLS-1$ //$NON-NLS-2$ - int filterIndex = 0; - boolean overwrite = false; - static final String FILTER = "*.*";//$NON-NLS-1$ - QFileDialog fd; - - /** - * Constructs a new instance of this class given only its parent. - * - * @param parent - * a shell which will be the parent of the new instance - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - */ - public FileDialog(Shell parent) { - this(parent, SWT.APPLICATION_MODAL); - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @param parent - * a shell which will be the parent of the new instance - * @param style - * the style of dialog to construct - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - */ - public FileDialog(Shell parent, int style) { - super(parent, checkStyle(parent, style)); - checkSubclass(); - fd = new QFileDialog(); - if ((style & SWT.SAVE) != 0) { - fd.setFileMode(QFileDialog.FileMode.AnyFile); - } else if ((style & SWT.MULTI) != 0) { - fd.setFileMode(QFileDialog.FileMode.ExistingFiles); - } else { - fd.setFileMode(QFileDialog.FileMode.ExistingFile); - } - } - - /** - * Returns the path of the first file that was selected in the dialog - * relative to the filter path, or an empty string if no such file has been - * selected. - * - * @return the relative path of the file - */ - public String getFileName() { - String[] files = getSplittedFileNames(); - if (files.length == 1) { - return files[0]; - } else { - return ""; //$NON-NLS-1$ - } - } - - /** - * Returns a (possibly empty) array with the paths of all files that were - * selected in the dialog relative to the filter path. - * - * @return the relative paths of the files - */ - public String[] getFileNames() { - return getSplittedFileNames(); - } - - private String[] getSplittedFileNames() { - String[] split = { null, null }; - List files = fd.selectedFiles(); - - if (!files.isEmpty()) { - for (int i = 0; i < files.size(); i++) { - String file = files.get(i); - split = file.split("/"); //$NON-NLS-1$ - - if (split != null) { - files.set(i, split[split.length - 1]); - } - } - } - return files.toArray(new String[] {}); - } - - /** - * Returns the file extensions which the dialog will use to filter the files - * it shows. - * - * @return the file extensions filter - */ - @SuppressWarnings("nls") - public String[] getFilterExtensions() { - List filters = fd.nameFilters(); - ArrayList result = new ArrayList(); - String[] split1 = null; - String[] split2 = null; - /* - * just get the extensions out of the nameFilters, not the names (split - * between "(" and ")" - */ - for (String filter : filters) { - split1 = filter.split("\\("); - split2 = split1[1].split("\\)"); - result.add(split2[0]); - } - - /* - * replace all " " by ";" because that's the way swt returns the - * extensions - */ - for (String r : result) { - r = r.replaceAll(" ", ";"); - } - - return result.toArray(new String[] {}); - } - - /** - * Get the 0-based index of the file extension filter which was selected by - * the user, or -1 if no filter was selected. - *

    - * This is an index into the FilterExtensions array and the FilterNames - * array. - *

    - * - * @return index the file extension filter index - * - * @see #getFilterExtensions - * @see #getFilterNames - * - * @since 3.4 - */ - public int getFilterIndex() { - //TODO see Bug 166 - return filterIndex; - } - - /** - * Returns the names that describe the filter extensions which the dialog - * will use to filter the files it shows. - * - * @return the list of filter names - */ - @SuppressWarnings("nls") - public String[] getFilterNames() { - List filters = fd.nameFilters(); - ArrayList result = new ArrayList(); - String[] name = null; - - /* - * just get the names out of the nameFilters, not the extensions(split - * between "(" - */ - for (String filter : filters) { - name = filter.split("\\("); - result.add(name[0]); - } - - return result.toArray(new String[] {}); - } - - /** - * Returns the directory path that the dialog will use, or an empty string - * if this is not set. File names in this path will appear in the dialog, - * filtered according to the filter extensions. - * - * @return the directory path string - * - * @see #setFilterExtensions - */ - public String getFilterPath() { - return fd.directory().path(); - } - - /** - * Returns the flag that the dialog will use to determine whether to prompt - * the user for file overwrite if the selected file already exists. - * - * @return true if the dialog will prompt for file overwrite, false - * otherwise - * - * @since 3.4 - */ - public boolean getOverwrite() { - return fd.confirmOverwrite(); - } - - /** - * Makes the dialog visible and brings it to the front of the display. - * - * @return a string describing the absolute path of the first selected file, - * or null if the dialog was cancelled or an error occurred - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the dialog has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the dialog
    • - *
    - */ - public String open() { - fd.exec(); - java.util.List files = fd.selectedFiles(); - fileName = null; - fileNames = new String[files.size()]; - if (files.size() > 0) { - fileNames[0] = fileName = files.get(0); - } - for (int i = 1; i < files.size(); i++) { - fileNames[i] = files.get(i); - } - fd.disposeLater(); - return fileName; - } - - /** - * Set the initial filename which the dialog will select by default when - * opened to the argument, which may be null. The name will be prefixed with - * the filter path when one is supplied. - * - * @param string - * the file name - */ - public void setFileName(String string) { - fd.selectFile(string); - } - - /** - * Set the file extensions which the dialog will use to filter the files it - * shows to the argument, which may be null. - *

    - * The strings are platform specific. For example, on some platforms, an - * extension filter string is typically of the form "*.extension", where - * "*.*" matches all files. For filters with multiple extensions, use - * semicolon as a separator, e.g. "*.jpg;*.png". - *

    - * - * @param extensions - * the file extension filter - * - * @see #setFilterNames to specify the user-friendly names corresponding to - * the extensions - */ - public void setFilterExtensions(String[] extensions) { - filterExtensions = extensions; - makeFilter(); - - } - - /** - * Set the 0-based index of the file extension filter which the dialog will - * use initially to filter the files it shows to the argument. - *

    - * This is an index into the FilterExtensions array and the FilterNames - * array. - *

    - * - * @param index - * the file extension filter index - * - * @see #setFilterExtensions - * @see #setFilterNames - * - * @since 3.4 - */ - public void setFilterIndex(int index) { - //TODO see Bug 166 - filterIndex = index; - } - - /** - * Sets the names that describe the filter extensions which the dialog will - * use to filter the files it shows to the argument, which may be null. - *

    - * Each name is a user-friendly short description shown for its - * corresponding filter. The names array must be the same - * length as the extensions array. - *

    - * - * @param names - * the list of filter names, or null for no filter names - * - * @see #setFilterExtensions - */ - public void setFilterNames(String[] names) { - filterNames = names; - makeFilter(); - } - - /** - * constructs a filter for the fileDialog like this: - * "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)" - * - * @param names - * @return - */ - private void makeFilter() { - java.util.ArrayList filters = new java.util.ArrayList(); - - if (filterNames.length == 0 && filterExtensions.length == 0) { - // nothing to do - } else { - /* - * If there are more filterNames than filterExtensions, just use as - * much filterNames as FilterExtensions.length. Ignore the rest. - */ - for (int i = 0; i < filterExtensions.length; i++) { - if (filterNames.length >= i + 1) { - /* - * If there's a matching filterName for the - * filterExtension-Field, the filterExtension-Field has to - * get rid of the ";". The ";" are only allowed, when the - * filterExtension hasn't a matching name. - */ - String ex = filterExtensions[i].replace(";", " "); //$NON-NLS-1$ //$NON-NLS-2$ - filters.add(filterNames[i] + "(" + ex + ")"); //$NON-NLS-1$//$NON-NLS-2$ - - } else { - /* - * just a filterExtension without a name - */ - filters.add(filterExtensions[i]); - } - } - - fd.setNameFilters(filters); - } - } - - /** - * Sets the directory path that the dialog will use to the argument, which - * may be null. File names in this path will appear in the dialog, filtered - * according to the filter extensions. If the string is null, then the - * operating system's default filter path will be used. - *

    - * Note that the path string is platform dependent. For convenience, either - * '/' or '\' can be used as a path separator. - *

    - * - * @param string - * the directory path - * - * @see #setFilterExtensions - */ - public void setFilterPath(String string) { - fd.setDirectory(string); - } - - /** - * Sets the flag that the dialog will use to determine whether to prompt the - * user for file overwrite if the selected file already exists. - * - * @param overwrite - * true if the dialog will prompt for file overwrite, false - * otherwise - * - * @since 3.4 - */ - public void setOverwrite(boolean overwrite) { - fd.setConfirmOverwrite(overwrite); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FontDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FontDialog.java deleted file mode 100644 index 43563ebb4f..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FontDialog.java +++ /dev/null @@ -1,246 +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 com.trolltech.qt.gui.QDialog; -import com.trolltech.qt.gui.QFont; -import com.trolltech.qt.gui.QFontDialog; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.graphics.PaletteData; -import org.eclipse.swt.graphics.RGB; - -/** - * Instances of this class allow the user to select a font from all available - * fonts in the system. - *
    - *
    Styles:
    - *
    (none)
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see SWT Example: - * ControlExample, Dialog tab - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class FontDialog extends Dialog { - FontData fontData; - RGB rgb; - QFontDialog fd; - - /** - * Constructs a new instance of this class given only its parent. - * - * @param parent - * a shell which will be the parent of the new instance - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - */ - public FontDialog(Shell parent) { - this(parent, SWT.APPLICATION_MODAL); - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @param parent - * a shell which will be the parent of the new instance - * @param style - * the style of dialog to construct - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - */ - public FontDialog(Shell parent, int style) { - super(parent, checkStyle(parent, style)); - checkSubclass(); - } - - protected QFontDialog createFontDialog(Shell parent, int style) { - return new QFontDialog(); - } - - /** - * Returns a FontData object describing the font that was selected in the - * dialog, or null if none is available. - * - * @return the FontData for the selected font, or null - * @deprecated use #getFontList () - */ - @Deprecated - public FontData getFontData() { - return getFontList()[0]; - } - - /** - * Returns a FontData set describing the font that was selected in the - * dialog, or null if none is available. - * - * @return the FontData for the selected font, or null - * @since 2.1.1 - */ - public FontData[] getFontList() { - QFont font = fd.selectedFont(); - if (font == null) { - return null; - } - FontData[] result = new FontData[1]; - result[0] = qFontToFontData(font); - return result; - } - - private FontData qFontToFontData(QFont qFont) { - int style = SWT.NORMAL; - if (qFont.italic()) { - style += SWT.ITALIC; - } - if (qFont.bold()) { - style += SWT.BOLD; - } - FontData fontData = new FontData(qFont.rawName(), qFont.pointSize(), style); - return fontData; - } - - /** - * Returns an RGB describing the color that was selected in the dialog, or - * null if none is available. - * - * @return the RGB value for the selected color, or null - * - * @see PaletteData#getRGBs - * - * @since 2.1 - */ - public RGB getRGB() { - // QFontDialog doesn't support setting a font color, see Bug 167 - return null; - } - - /** - * Makes the dialog visible and brings it to the front of the display. - * - * @return a FontData object describing the font that was selected, or null - * if the dialog was cancelled or an error occurred - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the dialog has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the dialog
    • - *
    - */ - public FontData open() { - fd = new QFontDialog(); - if (fd.exec() == QDialog.DialogCode.Rejected.value()) { - return null; - } - QFont font = fd.selectedFont(); - - FontData fontData = qFontToFontData(font); - font.dispose(); - fd.disposeLater(); - return fontData; - } - - /** - * Sets a FontData object describing the font to be selected by default in - * the dialog, or null to let the platform choose one. - * - * @param fontData - * the FontData to use initially, or null - * @deprecated use #setFontList (FontData []) - */ - @Deprecated - public void setFontData(FontData fontData) { - // QFontDialog doesn't support setting the default font - this.fontData = fontData; - } - - /** - * Sets the set of FontData objects describing the font to be selected by - * default in the dialog, or null to let the platform choose one. - * - * @param fontData - * the set of FontData objects to use initially, or null to let - * the platform select a default when open() is called - * - * @see Font#getFontData - * - * @since 2.1.1 - */ - public void setFontList(FontData[] fontData) { - // QFontDialog doesn't support setting the default font, see Bug 168 - if (fontData != null && fontData.length > 0) { - this.fontData = fontData[0]; - } else { - this.fontData = null; - } - } - - /** - * Sets the RGB describing the color to be selected by default in the - * dialog, or null to let the platform choose one. - * - * @param rgb - * the RGB value to use initially, or null to let the platform - * select a default when open() is called - * - * @see PaletteData#getRGBs - * - * @since 2.1 - */ - public void setRGB(RGB rgb) { - // QFontDialog doesn't support setting a font color, see Bug 167 - this.rgb = rgb; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Group.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Group.java deleted file mode 100644 index 9af907e13e..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Group.java +++ /dev/null @@ -1,293 +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 com.trolltech.qt.gui.QContentsMargins; -import com.trolltech.qt.gui.QGroupBox; -import com.trolltech.qt.gui.QWidget; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class provide an etched border with an optional title. - *

    - * Shadow styles are hints and may not be honoured by the platform. To create a - * group with the default shadow style for the platform, do not specify a shadow - * style. - *

    - *
    Styles:
    - *
    SHADOW_ETCHED_IN, SHADOW_ETCHED_OUT, SHADOW_IN, SHADOW_OUT, SHADOW_NONE
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * Note: Only one of the above styles may be specified. - *

    - *

    - * IMPORTANT: This class is not intended to be subclassed. - *

    - * - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Group extends Composite { - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#SHADOW_ETCHED_IN - * @see SWT#SHADOW_ETCHED_OUT - * @see SWT#SHADOW_IN - * @see SWT#SHADOW_OUT - * @see SWT#SHADOW_NONE - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Group(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - state |= DRAW_BACKGROUND; - state |= CANVAS; - //TODO apply SWT.SHADOW_* styles - return new QGroupBox(); - } - - QGroupBox getQGroupBox() { - return (QGroupBox) getQWidget(); - } - - static int checkStyle(int style) { - style |= SWT.NO_FOCUS; - /* - * 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); - } - } - - @Override - public Rectangle getClientArea() { - checkWidget(); - if (!isVisible()) { - updateQLayouts(); - } - - Rectangle clientArea = QtSWTConverter.convert(getQWidget().contentsRect()); - if (clientArea.width < 0) { - clientArea.width = 0; - } - if (clientArea.height < 0) { - clientArea.height = 0; - } - - return clientArea; - } - - @Override - public Rectangle computeTrim(int x, int y, int width, int height) { - QContentsMargins margins = getQGroupBox().getContentsMargins(); - return new Rectangle(x - margins.left, y - margins.top, width + margins.left + margins.right, height - + margins.top + margins.bottom); - } - - @Override - String getNameText() { - return getText(); - } - - /** - * Returns the receiver's text, which is the string that the is used as the - * title. If the text has not previously been set, returns an empty - * string. - * - * @return the text - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getText() { - checkWidget(); - return getQGroupBox().title(); - } - - @Override - boolean mnemonicHit(char key) { - return setFocus(); - } - - @Override - boolean mnemonicMatch(char key) { - char mnemonic = findMnemonic(getText()); - if (mnemonic == '\0') { - return false; - } - return Character.toUpperCase(key) == Character.toUpperCase(mnemonic); - } - - void printWidget(int /* long */hwnd, int /* long */hdc, GC gc) { - // TODO - throw new UnsupportedOperationException("not yet implemented");//$NON-NLS-1$ - // /* - // * Bug in Windows. For some reason, PrintWindow() returns success but - // * does nothing when it is called on a printer. The fix is to just go - // * directly to WM_PRINT in this case. - // */ - // boolean success = false; - // if ( !( OS.GetDeviceCaps( gc.handle, OS.TECHNOLOGY ) == - // OS.DT_RASPRINTER ) ) { - // success = OS.PrintWindow( hwnd, hdc, 0 ); - // } - // - // /* - // * Bug in Windows. For some reason, PrintWindow() fails when it is - // * called on a push button. The fix is to detect the failure and use - // * WM_PRINT instead. Note that WM_PRINT cannot be used all the time - // * because it fails for browser controls when the browser has focus. - // */ - // if ( !success ) { - // /* - // * Bug in Windows. For some reason, WM_PRINT when called with - // * PRF_CHILDREN will not draw the tool bar divider for tool bar - // * children that do not have CCS_NODIVIDER. The fix is to draw the - // * group box and iterate through the children, drawing each one. - // */ - // int flags = OS.PRF_CLIENT | OS.PRF_NONCLIENT | OS.PRF_ERASEBKGND; - // OS.SendMessage( hwnd, OS.WM_PRINT, hdc, flags ); - // int nSavedDC = OS.SaveDC( hdc ); - // Control[] children = _getChildren(); - // Rectangle rect = getBounds(); - // OS.IntersectClipRect( hdc, 0, 0, rect.width, rect.height ); - // for ( int i = children.length - 1; i >= 0; --i ) { - // Point location = children[i].getLocation(); - // int graphicsMode = OS.GetGraphicsMode( hdc ); - // if ( graphicsMode == OS.GM_ADVANCED ) { - // float[] lpXform = { 1, 0, 0, 1, location.x, location.y }; - // OS.ModifyWorldTransform( hdc, lpXform, OS.MWT_LEFTMULTIPLY ); - // } else { - // OS.SetWindowOrgEx( hdc, -location.x, -location.y, null ); - // } - // int /* long */topHandle = children[i].topHandle(); - // int bits = OS.GetWindowLong( topHandle, OS.GWL_STYLE ); - // if ( ( bits & OS.WS_VISIBLE ) == 0 ) { - // OS.DefWindowProc( topHandle, OS.WM_SETREDRAW, 1, 0 ); - // } - // children[i].printWidget( topHandle, hdc, gc ); - // if ( ( bits & OS.WS_VISIBLE ) == 0 ) { - // OS.DefWindowProc( topHandle, OS.WM_SETREDRAW, 0, 0 ); - // } - // if ( graphicsMode == OS.GM_ADVANCED ) { - // float[] lpXform = { 1, 0, 0, 1, -location.x, -location.y }; - // OS.ModifyWorldTransform( hdc, lpXform, OS.MWT_LEFTMULTIPLY ); - // } - // } - // OS.RestoreDC( hdc, nSavedDC ); - // } - } - - @Override - public void setFont(Font font) { - checkWidget(); - Rectangle oldRect = getClientArea(); - super.setFont(font); - Rectangle newRect = getClientArea(); - if (!oldRect.equals(newRect)) { - sendResize(); - } - } - - /** - * Sets the receiver's text, which is the string that will be displayed as - * the receiver's title, to the argument, which may not be null. - * The string may include the mnemonic character.

    Mnemonics are - * indicated by an '&' that causes the next character to be the - * mnemonic. When the user presses a key sequence that matches the mnemonic, - * focus is assigned to the first child of the group. On most platforms, the - * mnemonic appears underlined but may be emphasised in a platform specific - * manner. The mnemonic indicator character '&' can be escaped by - * doubling it in the string, causing a single '&' to be displayed.

    - * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the text is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - getQGroupBox().setTitle(string); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Label.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Label.java deleted file mode 100644 index 1274dabea4..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Label.java +++ /dev/null @@ -1,456 +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 com.trolltech.qt.core.Qt.AlignmentFlag; -import com.trolltech.qt.gui.QDragEnterEvent; -import com.trolltech.qt.gui.QDragLeaveEvent; -import com.trolltech.qt.gui.QDragMoveEvent; -import com.trolltech.qt.gui.QDropEvent; -import com.trolltech.qt.gui.QFrame; -import com.trolltech.qt.gui.QLabel; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QWidget; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; - -/** - * Instances of this class represent a non-selectable user interface object that - * displays a string or image. When SEPARATOR is specified, displays a single - * vertical or horizontal line. - *

    - * Shadow styles are hints and may not be honored by the platform. To create a - * separator label with the default shadow style for the platform, do not - * specify a shadow style. - *

    - *
    - *
    Styles:
    - *
    SEPARATOR, HORIZONTAL, VERTICAL
    - *
    SHADOW_IN, SHADOW_OUT, SHADOW_NONE
    - *
    CENTER, LEFT, RIGHT, WRAP
    - *
    Events:
    - *
    (none)
    - *
    - *

    - * Note: Only one of SHADOW_IN, SHADOW_OUT and SHADOW_NONE may be specified. - * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified. - * Only one of CENTER, LEFT and RIGHT may be specified. - *

    - *

    - * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

    - * - * @see Label snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class Label extends Control { - private String text = ""; //$NON-NLS-1$ - private Image image; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#SEPARATOR - * @see SWT#HORIZONTAL - * @see SWT#VERTICAL - * @see SWT#SHADOW_IN - * @see SWT#SHADOW_OUT - * @see SWT#SHADOW_NONE - * @see SWT#CENTER - * @see SWT#LEFT - * @see SWT#RIGHT - * @see SWT#WRAP - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Label(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - state |= THEME_BACKGROUND; - QLabel label = new MyQLabel(); - if ((style & SWT.SEPARATOR) != 0) { - setSeparatorType(label, style); - } - label.setContentsMargins(0, 0, 0, 0); - setAlignment(label, style); - label.setMargin(0); - // TODO make this work with the right size. - //label.setWordWrap((style & SWT.WRAP) != 0); - return label; - } - - @Override - protected void checkAndUpdateBorder() { - // nothing on purpose - } - - private void setSeparatorType(QLabel label, int style) { - int frameStyle = 0; - if ((style & SWT.VERTICAL) != 0) { - frameStyle |= QFrame.Shape.VLine.value(); - label.setFixedWidth(2); - } else { - frameStyle |= QFrame.Shape.HLine.value(); - label.setMaximumHeight(2); - } - if ((style & SWT.SHADOW_IN) != 0) { - frameStyle |= QFrame.Shadow.Raised.value(); - } else if ((style & SWT.SHADOW_OUT) != 0) { - frameStyle |= QFrame.Shadow.Sunken.value(); - } else if ((style & SWT.SHADOW_NONE) != 0) { - frameStyle |= QFrame.Shadow.Plain.value(); - } - label.setFrameStyle(frameStyle); - } - - private QLabel getQLabel() { - return (QLabel) getQWidget(); - } - - static int checkStyle(int style) { - style |= SWT.NO_FOCUS; - if ((style & SWT.SEPARATOR) != 0) { - style = checkBits(style, SWT.VERTICAL, SWT.HORIZONTAL, 0, 0, 0, 0); - return checkBits(style, SWT.SHADOW_OUT, SWT.SHADOW_IN, SWT.SHADOW_NONE, 0, 0, 0); - } - return checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0); - } - - @Override - public boolean qtMouseEnterEvent(Object source) { - if (source == getQWidget()) { - sendEvent(SWT.MouseEnter); - } - return false; - } - - @Override - public boolean qtMouseLeaveEvent(Object source) { - if (source == getQWidget()) { - sendEvent(SWT.MouseExit); - } - return false; - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - Point p = super.computeSize(wHint, hHint, changed); - if ((style & SWT.SEPARATOR) != 0) { - int width = p.x; - int height = p.y; - if ((style & SWT.VERTICAL) != 0) { - width = 2; - } else { - height = Math.min(height, 3); - } - p.x = width; - p.y = height; - } - return p; - } - - @Override - String getNameText() { - return getText(); - } - - /** - * Returns the receiver's text, which will be an empty string if it has - * never been set or if the receiver is a SEPARATOR label. - * - * @return the receiver's text - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getText() { - checkWidget(); - if ((style & SWT.SEPARATOR) != 0) { - return "";//$NON-NLS-1$ - } - return text; - } - - /** - * Sets the receiver's text. - *

    - * This method sets the widget label. The label may include the mnemonic - * character and line delimiters. - *

    - *

    - * Mnemonics are indicated by an '&' that causes the next character to - * be the mnemonic. When the user presses a key sequence that matches the - * mnemonic, focus is assigned to the control that follows the label. On - * most platforms, the mnemonic appears underlined but may be emphasised in - * a platform specific manner. The mnemonic indicator character '&' can - * be escaped by doubling it in the string, causing a single '&' to be - * displayed. - *

    - * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the text is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if ((style & SWT.SEPARATOR) != 0) { - return; - } - if (string.equals(text)) { - return; - } - text = string; - string = Display.withCrLf(string); - getQLabel().setText(string); - } - - @Override - boolean mnemonicHit(char key) { - Composite control = this.parent; - while (control != null) { - Control[] children = control._getChildren(); - int index = 0; - while (index < children.length) { - if (children[index] == this) { - break; - } - index++; - } - index++; - if (index < children.length) { - if (children[index].setFocus()) { - return true; - } - } - control = control.parent; - } - return false; - } - - @Override - boolean mnemonicMatch(char key) { - char mnemonic = findMnemonic(getText()); - if (mnemonic == '\0') { - return false; - } - return Character.toUpperCase(key) == Character.toUpperCase(mnemonic); - } - - @Override - void releaseWidget() { - super.releaseWidget(); - text = null; - image = null; - } - - /** - * Returns a value which describes the position of the text or image in the - * receiver. The value will be one of LEFT, RIGHT - * or CENTER unless the receiver is a SEPARATOR - * label, in which case, NONE is returned. - * - * @return the alignment - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getAlignment() { - checkWidget(); - if ((style & SWT.SEPARATOR) != 0) { - return 0; - } - if ((style & SWT.LEFT) != 0) { - return SWT.LEFT; - } - if ((style & SWT.CENTER) != 0) { - return SWT.CENTER; - } - if ((style & SWT.RIGHT) != 0) { - return SWT.RIGHT; - } - return SWT.LEFT; - } - - /** - * Controls how text and images will be displayed in the receiver. The - * argument should be one of LEFT, RIGHT or - * CENTER. If the receiver is a SEPARATOR label, - * the argument is ignored and the alignment is not changed. - * - * @param alignment - * the new alignment - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setAlignment(int alignment) { - checkWidget(); - setAlignment(getQLabel(), alignment); - } - - void setAlignment(QLabel label, int alignment) { - if ((getStyle() & SWT.SEPARATOR) != 0) { - return; - } - if ((alignment & SWT.RIGHT) != 0) { - label.setAlignment(AlignmentFlag.AlignRight); - } else if ((alignment & SWT.CENTER) != 0) { - label.setAlignment(AlignmentFlag.AlignCenter); - } - } - - /** - * Returns the receiver's image if it has one, or null if it does not. - * - * @return the receiver's image - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public Image getImage() { - checkWidget(); - return image; - } - - /** - * Sets the receiver's image to the argument, which may be null indicating - * that no image should be displayed. - * - * @param image - * the image to display on the receiver (may be null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setImage(Image image) { - checkWidget(); - // dont crash if the image is null - if (image == null) { - return; - } - this.image = image; - getQLabel().setPixmap(image.getQPixmap()); - } - - private final class MyQLabel extends QLabel { - @Override - protected void mousePressEvent(QMouseEvent e) { - super.mousePressEvent(e); - e.setAccepted(false); - } - - @Override - protected void dropEvent(QDropEvent event) { - sendDropEvent(event); - } - - @Override - protected void dragMoveEvent(QDragMoveEvent event) { - sendDragMoveEvent(event); - } - - @Override - protected void dragEnterEvent(QDragEnterEvent event) { - sendDragEnterEvent(event); - } - - @Override - protected void dragLeaveEvent(QDragLeaveEvent event) { - sendDragLeaveEvent(event); - } - - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Link.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Link.java deleted file mode 100644 index 844a4371f5..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Link.java +++ /dev/null @@ -1,552 +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 com.trolltech.qt.core.Qt.TextInteractionFlag; -import com.trolltech.qt.gui.QLabel; -import com.trolltech.qt.gui.QWidget; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.accessibility.ACC; -import org.eclipse.swt.accessibility.Accessible; -import org.eclipse.swt.accessibility.AccessibleAdapter; -import org.eclipse.swt.accessibility.AccessibleControlAdapter; -import org.eclipse.swt.accessibility.AccessibleControlEvent; -import org.eclipse.swt.accessibility.AccessibleEvent; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class represent a selectable user interface object that - * displays a text with links. - *

    - *

    - *
    Styles:
    - *
    (none)
    - *
    Events:
    - *
    Selection
    - *
    - *

    - * IMPORTANT: This class is not intended to be subclassed. - *

    - * - * @see Link snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * - * @since 3.1 - * @noextend This class is not intended to be subclassed by clients. - */ -public class Link extends Control { - private Point[] offsets; - private String[] ids; - private int[] mnemonics; - - private static final String LINK_START = "";//$NON-NLS-1$ - private static final String LINK_END = "";//$NON-NLS-1$ - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Link(Composite parent, int style) { - super(parent, checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0)); - } - - @Override - protected QWidget createQWidget(int style) { - state |= THEME_BACKGROUND; - QLabel link = new QLabel(); - link.setTextInteractionFlags(TextInteractionFlag.TextBrowserInteraction); - link.setOpenExternalLinks(false); - return link; - } - - protected QLabel getQLabel() { - return (QLabel) getQWidget(); - } - - @Override - protected void connectSignals() { - getQLabel().linkActivated.connect(this, "linkActivated(java.lang.String)");//$NON-NLS-1$ - } - - protected void linkActivated(String link) { - Event event = new Event(); - event.text = link; - sendEvent(SWT.Selection, event); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

    - * widgetSelected is called when the control is selected by the - * user. widgetDefaultSelected is not called. - *

    - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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); - } - - void initAccessible() { - Accessible accessible = getAccessible(); - accessible.addAccessibleListener(new AccessibleAdapter() { - @Override - public void getName(AccessibleEvent e) { - e.result = parse(_getText()); - } - }); - - accessible.addAccessibleControlListener(new AccessibleControlAdapter() { - @Override - public void getChildAtPoint(AccessibleControlEvent e) { - e.childID = ACC.CHILDID_SELF; - } - - @Override - public void getLocation(AccessibleControlEvent e) { - Rectangle rect = display.map(getParent(), null, getBounds()); - e.x = rect.x; - e.y = rect.y; - e.width = rect.width; - e.height = rect.height; - } - - @Override - public void getChildCount(AccessibleControlEvent e) { - e.detail = 0; - } - - @Override - public void getRole(AccessibleControlEvent e) { - e.detail = ACC.ROLE_LINK; - } - - @Override - public void getState(AccessibleControlEvent e) { - e.detail = ACC.STATE_FOCUSABLE; - if (hasFocus()) { - e.detail |= ACC.STATE_FOCUSED; - } - } - - @Override - public void getDefaultAction(AccessibleControlEvent e) { - e.result = SWT.getMessage("SWT_Press"); //$NON-NLS-1$ - } - - @Override - public void getSelection(AccessibleControlEvent e) { - if (hasFocus()) { - e.childID = ACC.CHILDID_SELF; - } - } - - @Override - public void getFocus(AccessibleControlEvent e) { - if (hasFocus()) { - e.childID = ACC.CHILDID_SELF; - } - } - }); - } - - @Override - String getNameText() { - return getText(); - } - - /** - * Returns the receiver's text, which will be an empty string if it has - * never been set. - * - * @return the receiver's text - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getText() { - checkWidget(); - return _getText(); - } - - private String _getText() { - return getQLabel().text(); - } - - private String parse(String string) { - int length = string.length(); - offsets = new Point[length / 4]; - ids = new String[length / 4]; - mnemonics = new int[length / 4 + 1]; - StringBuffer result = new StringBuffer(); - char[] buffer = new char[length]; - string.getChars(0, string.length(), buffer, 0); - int index = 0, state = 0, linkIndex = 0; - int start = 0, tagStart = 0, linkStart = 0, endtagStart = 0, refStart = 0; - while (index < length) { - char c = Character.toLowerCase(buffer[index]); - switch (state) { - case 0: - if (c == '<') { - tagStart = index; - state++; - } - break; - case 1: - if (c == 'a') { - state++; - } - break; - case 2: - switch (c) { - case 'h': - state = 7; - break; - case '>': - linkStart = index + 1; - state++; - break; - default: - if (Character.isWhitespace(c)) { - break; - } - state = 13; - } - break; - case 3: - if (c == '<') { - endtagStart = index; - state++; - } - break; - case 4: - state = c == '/' ? state + 1 : 3; - break; - case 5: - state = c == 'a' ? state + 1 : 3; - break; - case 6: - if (c == '>') { - mnemonics[linkIndex] = parseMnemonics(buffer, start, tagStart, result); - int offset = result.length(); - parseMnemonics(buffer, linkStart, endtagStart, result); - offsets[linkIndex] = new Point(offset, result.length() - 1); - if (ids[linkIndex] == null) { - ids[linkIndex] = new String(buffer, linkStart, endtagStart - linkStart); - } - linkIndex++; - start = tagStart = linkStart = endtagStart = refStart = index + 1; - state = 0; - } else { - state = 3; - } - break; - case 7: - state = c == 'r' ? state + 1 : 0; - break; - case 8: - state = c == 'e' ? state + 1 : 0; - break; - case 9: - state = c == 'f' ? state + 1 : 0; - break; - case 10: - state = c == '=' ? state + 1 : 0; - break; - case 11: - if (c == '"') { - state++; - refStart = index + 1; - } else { - state = 0; - } - break; - case 12: - if (c == '"') { - ids[linkIndex] = new String(buffer, refStart, index - refStart); - state = 2; - } - break; - case 13: - if (Character.isWhitespace(c)) { - state = 0; - } else if (c == '=') { - state++; - } - break; - case 14: - state = c == '"' ? state + 1 : 0; - break; - case 15: - if (c == '"') { - state = 2; - } - break; - default: - state = 0; - break; - } - index++; - } - if (start < length) { - int tmp = parseMnemonics(buffer, start, tagStart, result); - int mnemonic = parseMnemonics(buffer, Math.max(tagStart, linkStart), length, result); - if (mnemonic == -1) { - mnemonic = tmp; - } - mnemonics[linkIndex] = mnemonic; - } else { - mnemonics[linkIndex] = -1; - } - if (offsets.length != linkIndex) { - Point[] newOffsets = new Point[linkIndex]; - System.arraycopy(offsets, 0, newOffsets, 0, linkIndex); - offsets = newOffsets; - String[] newIDs = new String[linkIndex]; - System.arraycopy(ids, 0, newIDs, 0, linkIndex); - ids = newIDs; - int[] newMnemonics = new int[linkIndex + 1]; - System.arraycopy(mnemonics, 0, newMnemonics, 0, linkIndex + 1); - mnemonics = newMnemonics; - } - return result.toString(); - } - - private int parseMnemonics(char[] buffer, int start, int end, StringBuffer result) { - int mnemonic = -1, index = start; - while (index < end) { - if (buffer[index] == '&') { - if (index + 1 < end && buffer[index + 1] == '&') { - result.append(buffer[index]); - index++; - } else { - mnemonic = result.length(); - } - } else { - result.append(buffer[index]); - } - index++; - } - return mnemonic; - } - - @Override - void releaseWidget() { - super.releaseWidget(); - offsets = null; - ids = null; - mnemonics = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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 text. - *

    - * The string can contain both regular text and hyperlinks. A hyperlink is - * delimited by an anchor tag, <A> and </A>. Within an anchor, a - * single HREF attribute is supported. When a hyperlink is selected, the - * text field of the selection event contains either the text of the - * hyperlink or the value of its HREF, if one was specified. In the rare - * case of identical hyperlinks within the same string, the HREF tag can be - * used to distinguish between them. The string may include the mnemonic - * character and line delimiters. - *

    - * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the text is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (string.equals(_getText())) { - return; - } - String text = string.replace("", "");//$NON-NLS-1$ //$NON-NLS-2$ - text = text.replace("", "");//$NON-NLS-1$ //$NON-NLS-2$ - getQLabel().setText(adjustTags(text)); - } - - /* - * QLabel does not render a link as a link if it is created like this: Text - * and link and another link QLabel requires the href part to - * be there also. This function changes the string above to this: Text and - * link and another link - */ - static String adjustTags(String str) { - int pos = str.indexOf(LINK_START); - - if (pos == -1) { - return str; - } - - int start = 0; - int endPos = pos; - StringBuffer sb = new StringBuffer(); - String clean = "";//$NON-NLS-1$ - - while (pos != -1) { - sb.append(str.substring(start, pos)).append("" + clean + LINK_END);//$NON-NLS-1$ - start = endPos + LINK_END.length(); - pos = str.indexOf(LINK_START, start); - } - - return sb.toString(); - } - - static String clean(String strToClean) { - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < strToClean.length(); i++) { - char charAt = strToClean.charAt(i); - if (charAt == '"') { - sb.append("""); //$NON-NLS-1$ - } else { - if (charAt == '<') { - sb.append("<"); //$NON-NLS-1$ - } else { - if (charAt == '>') { - sb.append(">"); //$NON-NLS-1$ - } else { - sb.append(charAt); - } - } - } - } - return sb.toString(); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/List.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/List.java deleted file mode 100644 index db2dfc0a7b..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/List.java +++ /dev/null @@ -1,1380 +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.Arrays; - -import com.trolltech.qt.core.QModelIndex; -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.Qt.DropActions; -import com.trolltech.qt.gui.QDragEnterEvent; -import com.trolltech.qt.gui.QDragLeaveEvent; -import com.trolltech.qt.gui.QDragMoveEvent; -import com.trolltech.qt.gui.QDropEvent; -import com.trolltech.qt.gui.QItemSelection; -import com.trolltech.qt.gui.QListWidget; -import com.trolltech.qt.gui.QListWidgetItem; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QAbstractItemView.DragDropMode; -import com.trolltech.qt.gui.QAbstractItemView.ScrollHint; -import com.trolltech.qt.gui.QAbstractItemView.SelectionMode; -import com.trolltech.qt.gui.QItemSelectionModel.SelectionFlag; -import com.trolltech.qt.gui.QItemSelectionModel.SelectionFlags; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; - -/** - * Instances of this class represent a selectable user interface object that - * displays a list of strings and issues notification when a string is selected. - * A list may be single or multi select. - *

    - *

    - *
    Styles:
    - *
    SINGLE, MULTI
    - *
    Events:
    - *
    Selection, DefaultSelection
    - *
    - *

    - * Note: Only one of SINGLE and MULTI may be specified. - *

    - *

    - * IMPORTANT: This class is not intended to be subclassed. - *

    - * - * @see
    List snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class List extends Scrollable { - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - * - * @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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#SINGLE - * @see SWT#MULTI - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public List(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - QListWidget listWidget = new MyListWidget(); - if ((style & SWT.MULTI) != 0) { - listWidget.setSelectionMode(SelectionMode.MultiSelection); - } else { - listWidget.setSelectionMode(SelectionMode.SingleSelection); - } - return listWidget; - } - - @Override - protected void connectSignals() { - getQListWidget().selectionModel().selectionChanged.connect(this, "selectionEvent()");//$NON-NLS-1$ - getQListWidget().itemActivated.connect(this, "itemActivationEvent(QListWidgetItem)");//$NON-NLS-1$ - } - - private QListWidget getQListWidget() { - return (QListWidget) getQWidget(); - } - - protected void selectionEvent() { - sendEvent(SWT.Selection); - } - - protected void itemActivationEvent(QListWidgetItem item) { - sendEvent(SWT.DefaultSelection); - } - - @Override - public void setDragEnabled(boolean enabled) { - getQListWidget().setDragEnabled(enabled); - } - - @Override - public void setAcceptDrops(boolean accept) { - super.setAcceptDrops(accept); - getQListWidget().setDragDropMode(DragDropMode.DragDrop); - getQListWidget().setDropIndicatorShown(true); - } - - /** - * Adds the argument to the end of the receiver's list. - * - * @param string - * the new item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #add(String,int) - */ - public void add(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - getQListWidget().addItem(string); - } - - /** - * Adds the argument to the receiver's list at the given zero-relative - * index. - *

    - * Note: To add an item at the end of the list, use the result of calling - * getItemCount() as the index or use add(String). - *

    - * - * @param string - * the new item - * @param index - * the index for the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list (inclusive)
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see #add(String) - */ - public void add(String string, int index) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - validateIndex(index); - getQListWidget().insertItem(index, string); - } - - /** - * 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 SelectionListener interface. - *

    - * widgetSelected is called when the selection changes. - * widgetDefaultSelected is typically called when an item is - * double-clicked. - *

    - * - * @param listener - * the listener which should be notified when the user changes - * the receiver's selection - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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); - } - - static int checkStyle(int style) { - return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0); - } - - /** - * Deselects the items at the given zero-relative indices in the receiver. - * If the item at the given zero-relative index in the receiver is selected, - * it is deselected. If the item at the index was not selected, it remains - * deselected. Indices that are out of range and duplicate indices are - * ignored. - * - * @param indices - * the array of indices for the items to deselect - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the set of indices is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void deselect(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - - updateSelection(indices, new SelectionFlags(SelectionFlag.Deselect)); - } - - private void updateSelection(int[] indices, SelectionFlags selectionFlags) { - int count = getQListWidget().count(); - for (int i = 0; i < indices.length; i++) { - if (indices[i] >= 0 && indices[i] < count) { - updateSelectionRange(indices[i], indices[i], selectionFlags); - } - } - } - - /** - * Deselects the item at the given zero-relative index in the receiver. If - * the item at the index was already deselected, it remains deselected. - * Indices that are out of range are ignored. - * - * @param index - * the index of the item to deselect - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void deselect(int index) { - checkWidget(); - validateIndex(index); - updateSelectionRange(index, index, new SelectionFlags(SelectionFlag.Deselect)); - } - - void validateIndex(int index) { - if (index < 0 || index > getQListWidget().count()) { - SWT.error(SWT.ERROR_INVALID_RANGE); - } - } - - /** - * Deselects the items at the given zero-relative indices in the receiver. - * If the item at the given zero-relative index in the receiver is selected, - * it is deselected. If the item at the index was not selected, it remains - * deselected. The range of the indices is inclusive. Indices that are out - * of range are ignored. - * - * @param start - * the start index of the items to deselect - * @param end - * the end index of the items to deselect - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void deselect(int start, int end) { - checkWidget(); - if (start > end || end < 0) { - return; - } - int count = getQListWidget().count(); - if (start > count - 1) { - return; - } - start = Math.max(0, start); - end = Math.min(end, count - 1); - updateSelectionRange(start, end, new SelectionFlags(SelectionFlag.Deselect)); - } - - void updateSelectionRange(int start, int end, SelectionFlags flags) { - QModelIndex startIndex = getQListWidget().model().index(start, 0); - QModelIndex endIndex = getQListWidget().model().index(end, 0); - QItemSelection itemSelection = new QItemSelection(startIndex, endIndex); - getQListWidget().selectionModel().select(itemSelection, flags); - } - - /** - * Deselects all selected items in the receiver. - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void deselectAll() { - checkWidget(); - getQListWidget().clearSelection(); - } - - /** - * Returns the zero-relative index of the item which currently has the focus - * in the receiver, or -1 if no item has focus. - * - * @return the index of the selected item - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getFocusIndex() { - checkWidget(); - return getQListWidget().currentRow(); - } - - /** - * 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 - *
      - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String getItem(int index) { - checkWidget(); - validateIndex(index); - return getQListWidget().item(index).text(); - } - - /** - * Returns the number of items contained in the receiver. - * - * @return the number of items - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getItemCount() { - checkWidget(); - return getQListWidget().count(); - } - - /** - * Returns the height of the area which would be used to display - * one of the items in the list. - * - * @return the height of one item - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getItemHeight() { - checkWidget(); - int itemHeight = 0; - if (getQListWidget().count() > 0) { - itemHeight = getQListWidget().sizeHintForRow(0); - } else { - // we add a dummy item to get the height - getQListWidget().addItem("");//$NON-NLS-1$ - itemHeight = getQListWidget().sizeHintForRow(0); - _remove(0); - } - return itemHeight; - } - - /** - * Returns a (possibly empty) array of Strings which are the - * items in the receiver. - *

    - * 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. - *

    - * - * @return the items in the receiver's list - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String[] getItems() { - checkWidget(); - int count = getItemCount(); - String[] result = new String[count]; - for (int i = 0; i < count; i++) { - result[i] = getItem(i); - } - return result; - } - - /** - * Returns an array of Strings that are currently selected in - * the receiver. The order of the items is unspecified. An empty array - * indicates that no items are selected. - *

    - * Note: This is not the actual structure used by the receiver to maintain - * its selection, so modifying the array will not affect the receiver. - *

    - * - * @return an array representing the selection - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public String[] getSelection() { - checkWidget(); - QListWidget listWidget = getQListWidget(); - java.util.List selectedIndices = listWidget.selectionModel().selectedRows(); - String[] sel = new String[selectedIndices.size()]; - int i = 0; - for (QModelIndex index : selectedIndices) { - sel[i] = listWidget.item(index.row()).text(); - i++; - } - return sel; - } - - /** - * Returns the number of selected items contained in the receiver. - * - * @return the number of selected items - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getSelectionCount() { - checkWidget(); - return getQListWidget().selectionModel().selectedRows().size(); - } - - /** - * 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 or -1 - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getSelectionIndex() { - checkWidget(); - java.util.List selectedIndices = getQListWidget().selectionModel().selectedRows(); - if (selectedIndices != null && selectedIndices.size() > 0) { - return selectedIndices.get(0).row(); - } - return 0; - } - - /** - * Returns the zero-relative indices of the items which are currently - * selected in the receiver. The order of the indices is unspecified. The - * array is empty if no items are selected. - *

    - * Note: This is not the actual structure used by the receiver to maintain - * its selection, so modifying the array will not affect the receiver. - *

    - * - * @return the array of indices of the selected items - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int[] getSelectionIndices() { - checkWidget(); - java.util.List selection = getQListWidget().selectionModel().selectedRows(); - int[] selIndex = new int[selection.size()]; - int i = 0; - for (QModelIndex index : selection) { - selIndex[i] = index.row(); - i++; - } - return selIndex; - } - - /** - * Returns the zero-relative index of the item which is currently at the top - * of the receiver. This index can change when items are scrolled or new - * items are added or removed. - * - * @return the index of the top item - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int getTopIndex() { - checkWidget(); - QModelIndex modellIndex = getQListWidget().indexAt(new QPoint(1, 1)); - return modellIndex == null ? -1 : modellIndex.row(); - } - - /** - * Gets the index of an item. - *

    - * The list is searched starting at 0 until an item is found that is equal - * to the search item. If no item is found, -1 is returned. Indexing is zero - * based. - * - * @param string - * the search item - * @return the index of the item - * - * @exception IllegalArgumentException - *

      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - */ - public int indexOf(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - - return indexOf(string, 0); - } - - /** - * Searches the receiver's list starting at the given, zero-relative index - * until an item is found that is equal to the argument, and returns the - * index of that item. If no item is found or the starting index is out of - * range, returns -1. - * - * @param string - * the search item - * @param start - * the zero-relative index at which to start the search - * @return the index of the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public int indexOf(String string, int start) { - checkWidget(); - if (string == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - QListWidget listWidget = getQListWidget(); - int count = listWidget.count(); - if (start < 0 || start > count - 1) { - return -1; - } - for (int i = start; i < count; i++) { - if (listWidget.item(i).equals(string)) { - return i; - } - } - return -1; - } - - /** - * Returns true if the item is selected, and false - * otherwise. Indices out of range are ignored. - * - * @param index - * the index of the item - * @return the selection state of the item at the index - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public boolean isSelected(int index) { - checkWidget(); - validateIndex(index); - QListWidgetItem item = getQListWidget().item(index); - if (item != null) { - return item.isSelected(); - } - return false; - } - - /** - * Removes the items from the receiver at the given zero-relative indices. - * - * @param indices - * the array of indices of the items - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
    • - *
    • ERROR_NULL_ARGUMENT - if the indices array is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void remove(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - for (int index : indices) { - _remove(index); - } - } - - /** - * Removes the item from the receiver at the given zero-relative index. - * - * @param index - * the index for the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void remove(int index) { - checkWidget(); - _remove(index); - } - - void _remove(int index) { - validateIndex(index); - getQListWidget().takeItem(index).dispose(); - } - - /** - * Removes the items from the receiver which are between the given - * zero-relative start and end indices (inclusive). - * - * @param start - * the start of the range - * @param end - * the end of the range - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_RANGE - if either the start or end are - * not between 0 and the number of elements in the list minus - * 1 (inclusive)
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void remove(int start, int end) { - checkWidget(); - if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) { - error(SWT.ERROR_INVALID_RANGE); - } - QListWidget listWidget = getQListWidget(); - int count = listWidget.count(); - if (count == 0 || start >= count) { - error(SWT.ERROR_INVALID_RANGE); - } - start = Math.max(0, start); - end = Math.min(end, count - 1); - for (int i = end; i >= start; --i) { - listWidget.takeItem(i).dispose(); - } - } - - /** - * Searches the receiver's list starting at the first item until an item is - * found that is equal to the argument, and removes that item from the list. - * - * @param string - * the item to remove - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    • ERROR_INVALID_ARGUMENT - if the string is not found in - * the list
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void remove(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int index = indexOf(string, 0); - if (index == -1) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - remove(index); - } - - /** - * Removes all of the items from the receiver. - *

    - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - */ - public void removeAll() { - checkWidget(); - getQListWidget().clear(); - } - - /** - * 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 - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @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); - } - - /** - * Selects the items at the given zero-relative indices in the receiver. The - * current selection is not cleared before the new items are selected. - *

    - * If the item at a given index is not selected, it is selected. If the item - * at a given index was already selected, it remains selected. Indices that - * are out of range and duplicate indices are ignored. If the receiver is - * single-select and multiple indices are specified, then all indices are - * ignored. - * - * @param indices - * the array of indices for the items to select - * - * @exception IllegalArgumentException - *

      - *
    • ERROR_NULL_ARGUMENT - if the array of indices is null - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @see List#setSelection(int[]) - */ - public void select(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int length = indices.length; - if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) { - return; - } - select(indices, false); - } - - void select(int[] indices, boolean scroll) { - updateSelection(indices, new SelectionFlags(SelectionFlag.Select)); - } - - /** - * Selects the item at the given zero-relative index in the receiver's list. - * If the item at the index was already selected, it remains selected. - * Indices that are out of range are ignored. - * - * @param index - * the index of the item to select - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void select(int index) { - checkWidget(); - select(index, false); - } - - void select(int index, boolean scroll) { - if (index < 0) { - return; - } - int count = getQListWidget().count(); - if (index >= count) { - return; - } - updateSelectionRange(index, index, new SelectionFlags(SelectionFlag.Select)); - } - - /** - * Selects the items in the range specified by the given zero-relative - * indices in the receiver. The range of indices is inclusive. The current - * selection is not cleared before the new items are selected. - *

    - * If an item in the given range is not selected, it is selected. If an item - * in the given range was already selected, it remains selected. Indices - * that are out of range are ignored and no items will be selected if start - * is greater than end. If the receiver is single-select and there is more - * than one item in the given range, then all indices are ignored. - * - * @param start - * the start of the range - * @param end - * the end of the range - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @see List#setSelection(int,int) - */ - public void select(int start, int end) { - checkWidget(); - if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) { - return; - } - int count = getQListWidget().count(); - if (count == 0 || start >= count) { - return; - } - start = Math.max(0, start); - end = Math.min(end, count - 1); - if ((style & SWT.SINGLE) != 0) { - select(start, false); - } else { - select(start, end, false); - } - } - - void select(int start, int end, boolean scroll) { - updateSelectionRange(start, end, new SelectionFlags(SelectionFlag.Select)); - } - - /** - * Selects all of the items in the receiver. - *

    - * If the receiver is single-select, do nothing. - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - */ - public void selectAll() { - checkWidget(); - int count = getQListWidget().count(); - if ((style & SWT.MULTI) != 0 && count > 0) { - updateSelectionRange(0, count - 1, new SelectionFlags(SelectionFlag.Select)); - } - } - - void setFocusIndex(int index) { - QModelIndex modelIndex = getQListWidget().model().index(index, 0); - getQListWidget().selectionModel().setCurrentIndex(modelIndex, SelectionFlag.Current); - } - - /** - * Sets the text of the item in the receiver's list at the given - * zero-relative index to the string argument. - * - * @param index - * the index for the item - * @param string - * the new text for the item - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
    • - *
    • ERROR_NULL_ARGUMENT - if the string is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setItem(int index, String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - validateIndex(index); - int topIndex = getTopIndex(); - boolean isSelected = isSelected(index); - remove(index); - add(string, index); - if (isSelected) { - select(index, false); - } - setTopIndex(topIndex); - } - - /** - * Sets the receiver's items to be the given array of items. - * - * @param items - * the array of items - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the items array is null
    • - *
    • ERROR_INVALID_ARGUMENT - if an item in the items array - * is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setItems(String[] items) { - checkWidget(); - if (items == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - for (String item : items) { - if (item == null) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - } - getQListWidget().clear(); - getQListWidget().addItems(Arrays.asList(items)); - } - - /** - * Selects the items at the given zero-relative indices in the receiver. The - * current selection is cleared before the new items are selected. - *

    - * Indices that are out of range and duplicate indices are ignored. If the - * receiver is single-select and multiple indices are specified, then all - * indices are ignored. - * - * @param indices - * the indices of the items to select - * - * @exception IllegalArgumentException - *

      - *
    • ERROR_NULL_ARGUMENT - if the array of indices is null - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @see List#deselectAll() - * @see List#select(int[]) - */ - public void setSelection(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - deselectAll(); - int length = indices.length; - if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) { - return; - } - select(indices, true); - if ((style & SWT.MULTI) != 0) { - int focusIndex = indices[0]; - if (focusIndex >= 0) { - setFocusIndex(focusIndex); - } - } - } - - /** - * Sets the receiver's selection to be the given array of items. The current - * selection is cleared before the new items are selected. - *

    - * Items that are not in the receiver are ignored. If the receiver is - * single-select and multiple items are specified, then all items are - * ignored. - * - * @param items - * the array of items - * - * @exception IllegalArgumentException - *

      - *
    • ERROR_NULL_ARGUMENT - if the array of items is null - *
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @see List#deselectAll() - * @see List#select(int[]) - * @see List#setSelection(int[]) - */ - public void setSelection(String[] items) { - checkWidget(); - if (items == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - deselectAll(); - int length = items.length; - if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) { - return; - } - int focusIndex = -1; - for (int i = length - 1; i >= 0; --i) { - String string = items[i]; - int index = 0; - if (string != null) { - int localFocus = -1; - while ((index = indexOf(string, index)) != -1) { - if (localFocus == -1) { - localFocus = index; - } - select(index, false); - if ((style & SWT.SINGLE) != 0 && isSelected(index)) { - showSelection(); - return; - } - index++; - } - if (localFocus != -1) { - focusIndex = localFocus; - } - } - } - if ((style & SWT.MULTI) != 0) { - if (focusIndex >= 0) { - setFocusIndex(focusIndex); - } - } - } - - /** - * 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 item is selected. Indices that - * are out of range are ignored. - * - * @param index - * the index of the item to select - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * @see List#deselectAll() - * @see List#select(int) - */ - public void setSelection(int index) { - checkWidget(); - deselectAll(); - select(index, true); - if ((style & SWT.MULTI) != 0) { - if (index >= 0 && index < getQListWidget().count()) { - setFocusIndex(index); - } - } - } - - /** - * Selects the items in the range specified by the given zero-relative - * indices in the receiver. The range of indices is inclusive. The current - * selection is cleared before the new items are selected. - *

    - * Indices that are out of range are ignored and no items will be selected - * if start is greater than end. If the receiver is single-select and there - * is more than one item in the given range, then all indices are ignored. - * - * @param start - * the start index of the items to select - * @param end - * the end index of the items to select - * - * @exception SWTException - *

      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
    • - *
    - * - * @see List#deselectAll() - * @see List#select(int,int) - */ - public void setSelection(int start, int end) { - checkWidget(); - deselectAll(); - if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) { - return; - } - int count = getQListWidget().count(); - if (count == 0 || start >= count) { - return; - } - start = Math.max(0, start); - end = Math.min(end, count - 1); - updateSelectionRange(start, end, new SelectionFlags(SelectionFlag.Select)); - } - - /** - * Sets the zero-relative index of the item which is currently at the top of - * the receiver. This index can change when items are scrolled or new items - * are added and removed. - * - * @param index - * the index of the top item - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void setTopIndex(int index) { - checkWidget(); - validateIndex(index); - getQListWidget().scrollToItem(getQListWidget().item(index), ScrollHint.PositionAtTop); - } - - /** - * Shows the selection. If the selection is already showing in the receiver, - * this method simply returns. Otherwise, the items are scrolled until the - * selection is visible. - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - */ - public void showSelection() { - checkWidget(); - getQListWidget().scrollToItem(getQListWidget().currentItem(), ScrollHint.PositionAtTop); - } - - private final class MyListWidget extends QListWidget { - - @Override - protected void startDrag(DropActions supportedActions) { - // System.out.println("MyQTreeWidget.startDrag: " + supportedActions); - } - - @Override - protected void dropEvent(QDropEvent event) { - sendDropEvent(event); - } - - @Override - protected void dragMoveEvent(QDragMoveEvent event) { - sendDragMoveEvent(event); - } - - @Override - protected void dragEnterEvent(QDragEnterEvent event) { - sendDragEnterEvent(event); - } - - @Override - protected void dragLeaveEvent(QDragLeaveEvent event) { - sendDragLeaveEvent(event); - } - - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java deleted file mode 100644 index 14e057d36c..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java +++ /dev/null @@ -1,1423 +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.List; - -import com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.Qt.LayoutDirection; -import com.trolltech.qt.gui.QAction; -import com.trolltech.qt.gui.QActionGroup; -import com.trolltech.qt.gui.QApplication; -import com.trolltech.qt.gui.QBrush; -import com.trolltech.qt.gui.QColor; -import com.trolltech.qt.gui.QMenu; -import com.trolltech.qt.gui.QMenuBar; -import com.trolltech.qt.gui.QPalette; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QPalette.ColorRole; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.HelpListener; -import org.eclipse.swt.events.MenuListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class are user interface objects that contain menu items. - *
    - *
    Styles:
    - *
    BAR, DROP_DOWN, POP_UP, NO_RADIO_GROUP
    - *
    LEFT_TO_RIGHT, RIGHT_TO_LEFT
    - *
    Events:
    - *
    Help, Hide, Show
    - *
    - *

    - * Note: Only one of BAR, DROP_DOWN and POP_UP may be specified. Only one of - * LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified. - *

    - *

    - * IMPORTANT: This class is not intended to be subclassed. - *

    - * - * @see Menu snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Menu extends Widget { - private int x, y; - private boolean hasLocation; - private Color foreground = null; - private Color background = null; - private Image backgroundImage; - MenuItem cascade; - Decorations parent; - private QActionGroup actionGroup; - - /** - * Constructs a new instance of this class given its parent, and sets the - * style for the instance so that the instance will be a popup menu on the - * given parent's shell. - *

    - * After constructing a menu, it can be set into its parent using - * parent.setMenu(menu). In this case, the parent may be any - * control in the same widget tree as the parent. - *

    - * - * @param parent - * a control which will be the parent of the new instance (cannot - * be null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#POP_UP - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Menu(Control parent) { - this(checkNull(parent).menuShell(), null, SWT.POP_UP); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Decorations) and a style value describing its behavior and - * appearance. - *

    - * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

    - *

    - * After constructing a menu or menuBar, it can be set into its parent using - * parent.setMenu(menu) or - * parent.setMenuBar(menuBar). - *

    - * - * @param parent - * a decorations control which will be the parent of the new - * instance (cannot be null) - * @param style - * the style of menu to construct - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#BAR - * @see SWT#DROP_DOWN - * @see SWT#POP_UP - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Menu(Decorations parent, int style) { - this(parent, null, checkStyle(style)); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Menu) and sets the style for the instance so that the - * instance will be a drop-down menu on the given parent's parent. - *

    - * After constructing a drop-down menu, it can be set into its parentMenu - * using parentMenu.setMenu(menu). - *

    - * - * @param parentMenu - * a menu which will be the parent of the new instance (cannot be - * null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#DROP_DOWN - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Menu(Menu parentMenu) { - this(checkNull(parentMenu).parent, parentMenu.getQWidget(), SWT.DROP_DOWN); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * MenuItem) and sets the style for the instance so that the - * instance will be a drop-down menu on the given parent's parent menu. - *

    - * After constructing a drop-down menu, it can be set into its parentItem - * using parentItem.setMenu(menu). - *

    - * - * @param parentItem - * a menu item which will be the parent of the new instance - * (cannot be null) - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the parent is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
    • - *
    • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
    • - *
    - * - * @see SWT#DROP_DOWN - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Menu(MenuItem parentItem) { - this(checkNull(parentItem).parent); - } - - Menu(Decorations parent, QWidget qParent, int style) { - super(parent, checkStyle(style)); - display = parent.display; - createWidget(parent, qParent, style); - } - - protected void createWidget(Decorations parent, QWidget qParent, int style) { - state |= DRAG_DETECT; - this.parent = parent; - checkAndUpdateOrientation(parent); - QWidget qtControl = createQtControl(qParent != null ? qParent : parent.getQWidget()); - if (qtControl == null) { - error(SWT.ERROR_UNSPECIFIED); - } - setQWidget(qtControl); - if ((style & SWT.RIGHT_TO_LEFT) != 0) { - qtControl.setLayoutDirection(LayoutDirection.RightToLeft); - } - register(); - if ((state & PARENT_BACKGROUND) != 0) { - updateBackground(); - } - parent.addMenu(this); - } - - protected QWidget createQtControl(QWidget parent) { - state &= ~CANVAS; - if (isMenuBar()) { - return new QMenuBar(parent); - } - return new QMenu(parent); - } - - QMenuBar getQMenuBar() { - return (QMenuBar) getQWidget(); - } - - QMenu getQMenu() { - return (QMenu) getQWidget(); - } - - void addToActionGroup(QAction action) { - initActionGroup(); - actionGroup.addAction(action); - } - - void removeFromActionGroup(QAction action) { - if (hasActionGroup()) { - actionGroup.removeAction(action); - } - } - - private boolean hasActionGroup() { - return actionGroup != null; - } - - private void initActionGroup() { - if (actionGroup == null) { - actionGroup = new QActionGroup(getQWidget()); - if ((parent.style & SWT.NO_RADIO_GROUP) != 0) { - actionGroup.setExclusive(false); - } - } - } - - void register() { - display.addControl(getQWidget(), this); - } - - void deregister() { - display.removeControl(getQWidget()); - } - - void _setVisible(boolean visible) { - if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) { - return; - } - getQWidget().setHidden(!visible); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when help events are generated for the control, by sending it one of the - * messages defined in the HelpListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see HelpListener - * @see #removeHelpListener - */ - public void addHelpListener(HelpListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Help, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when menus are hidden or shown, by sending it one of the messages defined - * in the MenuListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
      - *
    • ERROR_NULL_ARGUMENT - if the listener is null
    • - *
    - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @see MenuListener - * @see #removeMenuListener - */ - public void addMenuListener(MenuListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Hide, typedListener); - addListener(SWT.Show, typedListener); - } - - static Control checkNull(Control control) { - if (control == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - return control; - } - - static Menu checkNull(Menu menu) { - if (menu == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - return menu; - } - - static MenuItem checkNull(MenuItem item) { - if (item == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - return item; - } - - static int checkStyle(int style) { - return checkBits(style, SWT.POP_UP, SWT.BAR, SWT.DROP_DOWN, 0, 0, 0); - } - - void addAction(QAction action, int index) { - QWidget menu = getQWidget(); - int itemCount = _getItemCount(); - if (index >= 0 && index < itemCount) { - MenuItem[] items = getItems(); - QAction before = items[index].getQAction(); - menu.insertAction(before, action); - } else { - menu.addAction(action); - } - } - - void removeAction(QAction action) { - if (isMenuBar()) { - getQMenuBar().removeAction(action); - } else { - getQMenu().removeAction(action); - } - } - - boolean isMenuBar() { - return (style & SWT.BAR) != 0; - } - - Color defaultBackground() { - return display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); - } - - Color defaultForeground() { - return display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND); - } - - void fixMenus(Decorations newParent) { - MenuItem[] items = getItems(); - for (int i = 0; i < items.length; i++) { - items[i].fixMenus(newParent); - } - parent.removeMenu(this); - newParent.addMenu(this); - this.parent = newParent; - } - - /** - * Returns the receiver's background color. - * - * @return the background color - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.3 - */ - /* public */Color getBackground() { - checkWidget(); - return background != null ? Color.qt_new(display, background.getColor()) : defaultBackground(); - } - - /** - * Returns the receiver's background image. - * - * @return the background image - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.3 - */ - /* public */Image getBackgroundImage() { - checkWidget(); - return backgroundImage; - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent (or its display if its parent is null), unless the receiver - * is a menu or a shell. In this case, the location is relative to the - * display. - *

    - * Note that the bounds of a menu or menu item are undefined when the menu - * is not visible. This is because most platforms compute the bounds of a - * menu dynamically just before it is displayed. - *

    - * - * @return the receiver's bounding rectangle - * - * @exception SWTException - *
      - *
    • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
    • - *
    • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
    • - *
    - * - * @since 3.1 - */ - /* public */Rectangle getBounds() { - checkWidget(); - return QtSWTConverter.convert(getQWidget().frameGeometry()); - } - - /** - * Returns the default menu item or null if none has been previously set. - * - * @return the default menu item. - * - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public MenuItem getDefaultItem() { - checkWidget(); - // if ( OS.IsWinCE ) - // return null; - // int id = OS.GetMenuDefaultItem( handle, OS.MF_BYCOMMAND, - // OS.GMDI_USEDISABLED ); - // if ( id == -1 ) - // return null; - // MENUITEMINFO info = new MENUITEMINFO(); - // info.cbSize = MENUITEMINFO.sizeof; - // info.fMask = OS.MIIM_ID; - // if ( OS.GetMenuItemInfo( handle, id, false, info ) ) { - // return display.getMenuItem( info.wID ); - // } - return null; - } - - /** - * Returns true if the receiver is enabled, and - * false otherwise. A disabled menu is typically not selectable - * from the user interface and draws with an inactive or "grayed" look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #isEnabled - */ - public boolean getEnabled() { - checkWidget(); - return getQMenuBar().isEnabled(); - } - - /** - * Returns the foreground color that the receiver will use to draw. - * - * @return the receiver's foreground color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - /* public */Color getForeground() { - checkWidget(); - return foreground != null ? Color.qt_new(display, foreground.getColor()) : defaultForeground(); - } - - /** - * 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 - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public MenuItem getItem(int index) { - checkWidget(); - List list = getQWidget().actions(); - int count = list.size(); - if (!(0 <= index && index < count)) { - error(SWT.ERROR_INVALID_RANGE); - } - Widget widget = display.findControl(list.get(index)); - if (widget == null || !MenuItem.class.isInstance(widget)) { - error(SWT.ERROR_CANNOT_GET_ITEM); - } - return (MenuItem) widget; - } - - /** - * Returns the number of items contained in the receiver. - * - * @return the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getItemCount() { - checkWidget(); - return _getItemCount(); - } - - /** - * Returns a (possibly empty) array of MenuItems which are the - * items in the receiver. - *

- * 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. - *

- * - * @return the items in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public MenuItem[] getItems() { - checkWidget(); - List list = getQWidget().actions(); - int count = list.size(); - if (count == 0) { - return new MenuItem[0]; - } - MenuItem[] children = new MenuItem[count]; - int items = 0; - for (QAction action : list) { - if (action != null) { - Widget widget = display.findControl(action); - if (widget != null && widget != this) { - if (widget instanceof MenuItem) { - children[items++] = (MenuItem) widget; - } - } - } - } - if (items == count) { - return children; - } - MenuItem[] newChildren = new MenuItem[items]; - System.arraycopy(children, 0, newChildren, 0, items); - return newChildren; - } - - int _getItemCount() { - return getQWidget().actions().size(); - } - - @Override - String getNameText() { - String result = "";//$NON-NLS-1$ - MenuItem[] items = getItems(); - int length = items.length; - if (length > 0) { - for (int i = 0; i < length - 1; i++) { - result = result + items[i].getNameText() + ", ";//$NON-NLS-1$ - } - result = result + items[length - 1].getNameText(); - } - return result; - } - - /** - * Returns the receiver's parent, which must be a Decorations. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Decorations getParent() { - checkWidget(); - return parent; - } - - /** - * Returns the receiver's parent item, which must be a MenuItem - * or null when the receiver is a root. - * - * @return the receiver's parent item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public MenuItem getParentItem() { - checkWidget(); - return cascade; - } - - /** - * Returns the receiver's parent item, which must be a Menu or - * null when the receiver is a root. - * - * @return the receiver's parent item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Menu getParentMenu() { - checkWidget(); - if (cascade != null) { - return cascade.parent; - } - return null; - } - - /** - * Returns the receiver's shell. For all controls other than shells, this - * simply returns the control's nearest ancestor shell. Shells return - * themselves, even if they are children of other shells. - * - * @return the receiver's shell - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getParent - */ - public Shell getShell() { - checkWidget(); - return parent.getShell(); - } - - /** - * Returns true if the receiver is visible, and - * false otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

- * - * @return the receiver's visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getVisible() { - checkWidget(); - if ((style & SWT.BAR) != 0) { - return this == parent.menuShell().menuBar; - } - if ((style & SWT.POP_UP) != 0) { - Menu[] popups = display.popups; - if (popups == null) { - return false; - } - for (int i = 0; i < popups.length; i++) { - if (popups[i] == this) { - return true; - } - } - } - Shell shell = getShell(); - Menu menu = shell.activeMenu; - while (menu != null && menu != this) { - menu = menu.getParentMenu(); - } - return this == menu; - } - - /** - * 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int indexOf(MenuItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (item.parent != this) { - return -1; - } - List actions = getQWidget().actions(); - for (int i = 0; i < actions.size(); i++) { - if (actions.get(i) == item.getQAction()) { - return i; - } - } - return -1; - } - - /** - * Returns true if the receiver is enabled and all of the - * receiver's ancestors are enabled, and false otherwise. A - * disabled menu is typically not selectable from the user interface and - * draws with an inactive or "grayed" look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getEnabled - */ - public boolean isEnabled() { - checkWidget(); - Menu parentMenu = getParentMenu(); - if (parentMenu == null) { - return getEnabled() && parent.isEnabled(); - } - return getEnabled() && parentMenu.isEnabled(); - } - - /** - * Returns true if the receiver is visible and all of the - * receiver's ancestors are visible and false otherwise. - * - * @return the receiver's visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getVisible - */ - public boolean isVisible() { - checkWidget(); - return getVisible(); - } - - void redraw() { - if (!isVisible()) { - return; - } - if ((style & SWT.BAR) != 0) { - display.addBar(this); - } - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - cascade = null; - } - - @Override - void releaseChildren(boolean destroy) { - MenuItem[] items = getItems(); - for (int i = 0; i < items.length; i++) { - MenuItem item = items[i]; - if (item != null && !item.isDisposed()) { - item.release(false); - } - } - super.releaseChildren(destroy); - } - - @Override - void releaseParent() { - super.releaseParent(); - if ((style & SWT.BAR) != 0) { - display.removeBar(this); - if (this == parent.menuBar) { - parent.setMenuBar(null); - } - } else { - if ((style & SWT.POP_UP) != 0) { - display.removePopup(this); - } - } - } - - @Override - void releaseWidget() { - super.releaseWidget(); - backgroundImage = null; - if (parent != null) { - parent.removeMenu(this); - } - parent = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the help events are generated for the control. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see HelpListener - * @see #addHelpListener - */ - public void removeHelpListener(HelpListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Help, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the menu events are generated for the control. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see MenuListener - * @see #addMenuListener - */ - public void removeMenuListener(MenuListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Hide, listener); - eventTable.unhook(SWT.Show, listener); - } - - /** - * Sets the receiver's background color to the color specified by the - * argument, or to the default system color for the control if the argument - * is null. - * - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.3 - */ - /* public */void setBackground(Color color) { - checkWidget(); - if (color != null) { - if (color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - Color oldColor = background; - if (color == null) { - background = null; - } else { - if (color.equals(background)) { - return; - } - background = color; - } - if (oldColor != null) { - oldColor.dispose(); - } - updateBackground(); - } - - /** - * Sets the receiver's background image to the image specified by the - * argument, or to the default system color for the control if the argument - * is null. The background image is tiled to fill the available space. - * - * @param image - * the new image (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
  • ERROR_INVALID_ARGUMENT - if the argument is not a - * bitmap
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.3 - */ - /* public */void setBackgroundImage(Image image) { - checkWidget(); - if (image != null) { - if (image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (!image.isBitmap()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - } - if (backgroundImage == image) { - return; - } - backgroundImage = image; - updateBackground(); - } - - /** - * Sets the receiver's foreground color to the color specified by the - * argument, or to the default system color for the control if the argument - * is null. - * - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.3 - */ - /* public */void setForeground(Color color) { - checkWidget(); - if (color != null) { - if (color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - } - Color oldColor = foreground; - if (color == null) { - foreground = null; - } else { - if (color.equals(foreground)) { - return; - } - foreground = color; - } - if (oldColor != null) { - oldColor.dispose(); - } - applyForegroundColor(foreground); - } - - /** - * Sets the default menu item to the argument or removes the default - * emphasis when the argument is null. - * - * @param item - * the default menu item or null - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the menu item has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setDefaultItem(MenuItem item) { - checkWidget(); - if (item != null) { - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (item.parent != this) { - return; - } - if (!isMenuBar()) { - getQMenu().setDefaultAction(item.getQAction()); - } - } else { - if (!isMenuBar()) { - getQMenu().setDefaultAction(null); - } - } - } - - /** - * Enables the receiver if the argument is true, and disables - * it otherwise. A disabled menu is typically not selectable from the user - * interface and draws with an inactive or "grayed" look. - * - * @param enabled - * the new enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setEnabled(boolean enabled) { - checkWidget(); - getQWidget().setEnabled(enabled); - getQWidget().update(); - } - - /** - * Sets the location of the receiver, which must be a popup, to the point - * specified by the arguments which are relative to the display. - *

- * Note that this is different from most widgets where the location of the - * widget is relative to the parent. - *

- *

- * Note that the platform window manager ultimately has control over the - * location of popup menus. - *

- * - * @param x - * the new x coordinate for the receiver - * @param y - * the new y coordinate for the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setLocation(int x, int y) { - checkWidget(); - if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) { - return; - } - this.x = x; - this.y = y; - hasLocation = true; - } - - /** - * Sets the location of the receiver, which must be a popup, to the point - * specified by the argument which is relative to the display. - *

- * Note that this is different from most widgets where the location of the - * widget is relative to the parent. - *

- *

- * Note that the platform window manager ultimately has control over the - * location of popup menus. - *

- * - * @param location - * the new location for the receiver - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the point is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.1 - */ - public void setLocation(Point location) { - checkWidget(); - if (location == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - setLocation(location.x, location.y); - } - - /** - * Marks the receiver as visible if the argument is true, and - * marks it invisible otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

- * - * @param visible - * the new visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setVisible(boolean visible) { - checkWidget(); - if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) { - return; - } - if (visible) { - display.addPopup(this); - if (hasLocation) { - getQMenu().move(x, y); - } - getQMenu().setVisible(true); - } else { - display.removePopup(this); - _setVisible(false); - } - } - - @Override - public boolean qtHideEvent(QObject source) { - if (source == getQWidget()) { - if (!isDisposed()) { - sendEvent(SWT.Hide); - } - } - return super.qtHideEvent(source); - } - - @Override - public boolean qtShowEvent(QObject source) { - if (source == getQWidget()) { - if (!isDisposed()) { - sendEvent(SWT.Show); - } - } - return super.qtShowEvent(source); - } - - void updateBackground() { - if (backgroundImage != null) { - applyBackgroundImage(backgroundImage); - return; - } - if (background != null) { - applyBackgroundColor(background); - return; - } - } - - private void applyBackgroundColor(Color color) { - updatedPalette(color, getBackgroundColorRoles()); - updateAutoFillBackground(); - } - - private void updatedPalette(Color color, ColorRole[] colorRoles) { - QPalette palette = getQWidget().palette(); - if (color != null) { - QColor qColor = new QColor(color.getColor()); - for (ColorRole role : colorRoles) { - palette.setColor(role, qColor); - } - } else { - QPalette defaultPalette = QApplication.palette(); - for (ColorRole role : colorRoles) { - QBrush brush = defaultPalette.brush(role); - palette.setBrush(role, brush); - } - } - getQWidget().setPalette(palette); - } - - private QPalette.ColorRole[] getBackgroundColorRoles() { - return new QPalette.ColorRole[] { QPalette.ColorRole.Window, QPalette.ColorRole.Base, QPalette.ColorRole.Button }; - } - - private void updateAutoFillBackground() { - if (background != null || backgroundImage != null) { - getQWidget().setAutoFillBackground(true); - } - } - - private void applyBackgroundImage(Image image) { - QPalette palette = getQWidget().palette().clone(); - try { - setPaletteBgImage(palette, image); - getQWidget().setPalette(palette); - } finally { - palette.dispose(); - } - updateAutoFillBackground(); - } - - private void setPaletteBgImage(QPalette palette, Image image) { - ColorRole[] bkRoles = getBackgroundImageRoles(); - if (image != null) { - for (ColorRole bkRole : bkRoles) { - palette.setBrush(bkRole, new QBrush(image.getQPixmap())); - } - } else { - QPalette defaultPalette = QApplication.palette(); - for (ColorRole role : bkRoles) { - QBrush brush = defaultPalette.brush(role); - palette.setBrush(role, brush.clone()); - } - } - } - - private ColorRole[] getBackgroundImageRoles() { - return new QPalette.ColorRole[] { QPalette.ColorRole.Window, QPalette.ColorRole.Base }; - } - - private void applyForegroundColor(Color color) { - updatedPalette(color, getForegroundColorRoles()); - } - - private ColorRole[] getForegroundColorRoles() { - return new ColorRole[] { QPalette.ColorRole.WindowText, QPalette.ColorRole.Text, QPalette.ColorRole.ButtonText }; - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MenuItem.java deleted file mode 100644 index 4ea324fd6a..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MenuItem.java +++ /dev/null @@ -1,1045 +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.HashMap; - -import com.trolltech.qt.core.Qt; -import com.trolltech.qt.gui.QAction; -import com.trolltech.qt.gui.QIcon; -import com.trolltech.qt.gui.QKeySequence; -import com.trolltech.qt.gui.QMenu; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ArmListener; -import org.eclipse.swt.events.HelpListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class represent a selectable user interface object that - * issues notification when pressed and released. - *
- *
Styles:
- *
CHECK, CASCADE, PUSH, RADIO, SEPARATOR
- *
Events:
- *
Arm, Help, Selection
- *
- *

- * Note: Only one of the styles CHECK, CASCADE, PUSH, RADIO and SEPARATOR may be - * specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class MenuItem extends Item { - private QAction action; - Menu parent, menu; - int id, accelerator, userId; - - private HashMap modifiers = new HashMap(); - private HashMap accelerators = new HashMap(); - - /** - * Constructs a new instance of this class given its parent (which must be a - * Menu) and a style value describing its behavior and - * appearance. The item is added to the end of the items maintained by its - * parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param parent - * a menu control which will be the parent of the new instance - * (cannot be null) - * @param style - * the style of control to construct - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#CHECK - * @see SWT#CASCADE - * @see SWT#PUSH - * @see SWT#RADIO - * @see SWT#SEPARATOR - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public MenuItem(Menu parent, int style) { - super(parent, checkStyle(style)); - this.parent = parent; - createAction(parent, style, -1); - initializeKeys(); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Menu), a style value describing its behavior and appearance, - * and the index at which to place it in the items maintained by its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param parent - * a menu control which will be the parent of the new instance - * (cannot be null) - * @param style - * the style of control to construct - * @param index - * the zero-relative index to store the receiver in its parent - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the parent (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#CHECK - * @see SWT#CASCADE - * @see SWT#PUSH - * @see SWT#RADIO - * @see SWT#SEPARATOR - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public MenuItem(Menu parent, int style, int index) { - super(parent, checkStyle(style)); - this.parent = parent; - createAction(parent, style, index); - initializeKeys(); - } - - MenuItem(Menu parent, Menu menu, int style, int index) { - super(parent, checkStyle(style)); - this.parent = parent; - this.menu = menu; - if (menu != null) { - menu.cascade = this; - } - display.addMenuItem(this); - initializeKeys(); - } - - protected void createAction(Menu parent, int style, int index) { - action = new QAction(parent.getQWidget()); - - parent.addAction(action, index); - int bits = SWT.CHECK | SWT.RADIO | SWT.PUSH | SWT.SEPARATOR; - switch (style & bits) { - case SWT.SEPARATOR: - action.setSeparator(true); - break; - case SWT.RADIO: - action.setCheckable(true); - parent.addToActionGroup(action); - break; - case SWT.CHECK: - action.setCheckable(true); - break; - case SWT.PUSH: - default: - break; - } - connectSignals(); - display.addControl(action, this); - } - - QAction getQAction() { - return action; - } - - protected void connectSignals() { - if ((style & SWT.CASCADE) == 0) { - getQAction().triggered.connect(this, "triggerEvent(boolean)");//$NON-NLS-1$ - } - getQAction().hovered.connect(this, "hoverEvent()");//$NON-NLS-1$ - } - - protected void triggerEvent(boolean triggered) { - Event event = new Event(); - sendEvent(SWT.Selection, event); - } - - protected void hoverEvent() { - sendEvent(SWT.Arm); - } - - /** - * Initialize the hashmaps with the SWT keys mapping to QT keys. This is - * needed for the accelerator. - */ - private void initializeKeys() { - - modifiers.put(SWT.CTRL, Qt.Modifier.CTRL.value()); // 262144, 67108864 - modifiers.put(SWT.MOD1, Qt.Modifier.CTRL.value()); // 262144, 67108864 - modifiers.put(SWT.SHIFT, Qt.Modifier.SHIFT.value()); - modifiers.put(SWT.MOD2, Qt.Modifier.SHIFT.value()); - modifiers.put(SWT.ALT, Qt.Modifier.ALT.value()); - - accelerators.put(SWT.ARROW_DOWN, Qt.Key.Key_Down.value()); // 16777218 - accelerators.put(SWT.ARROW_LEFT, Qt.Key.Key_Left.value()); // 16777219 - accelerators.put(SWT.ARROW_RIGHT, Qt.Key.Key_Right.value()); // 16777220 - accelerators.put(SWT.ARROW_UP, Qt.Key.Key_Up.value()); // 16777217 - accelerators.put(SWT.F1, Qt.Key.Key_F1.value()); // 16777226 - accelerators.put(SWT.F2, Qt.Key.Key_F2.value()); - accelerators.put(SWT.F3, Qt.Key.Key_F3.value()); - accelerators.put(SWT.F4, Qt.Key.Key_F4.value()); - accelerators.put(SWT.F5, Qt.Key.Key_F5.value()); - accelerators.put(SWT.F6, Qt.Key.Key_F6.value()); - accelerators.put(SWT.F7, Qt.Key.Key_F7.value()); - accelerators.put(SWT.F8, Qt.Key.Key_F8.value()); - accelerators.put(SWT.F9, Qt.Key.Key_F9.value()); - accelerators.put(SWT.F10, Qt.Key.Key_F10.value()); - accelerators.put(SWT.F11, Qt.Key.Key_F11.value()); - accelerators.put(SWT.F12, Qt.Key.Key_F12.value()); - accelerators.put(SWT.F13, Qt.Key.Key_F13.value()); - accelerators.put(SWT.F14, Qt.Key.Key_F14.value()); - accelerators.put(SWT.F15, Qt.Key.Key_F15.value()); - accelerators.put(SWT.PAGE_UP, Qt.Key.Key_PageUp.value()); - accelerators.put(SWT.PAGE_DOWN, Qt.Key.Key_PageDown.value()); - accelerators.put(SWT.HOME, Qt.Key.Key_Home.value()); - accelerators.put(SWT.END, Qt.Key.Key_End.value()); - accelerators.put(SWT.INSERT, Qt.Key.Key_Insert.value()); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the arm events are generated for the control, by sending it one of - * the messages defined in the ArmListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ArmListener - * @see #removeArmListener - */ - public void addArmListener(ArmListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Arm, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the help events are generated for the control, by sending it one of - * the messages defined in the HelpListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see HelpListener - * @see #removeHelpListener - */ - public void addHelpListener(HelpListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Help, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the menu item is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * When widgetSelected is called, the stateMask field of the - * event object is valid. widgetDefaultSelected is not called. - *

- * - * @param listener - * the listener which should be notified when the menu item is - * selected by the user - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - static int checkStyle(int style) { - return checkBits(style, SWT.PUSH, SWT.CHECK, SWT.RADIO, SWT.SEPARATOR, SWT.CASCADE, 0); - } - - @Override - void destroyWidget() { - parent.removeAction(getQAction()); - super.destroyWidget(); - } - - void fixMenus(Decorations newParent) { - if (menu != null) { - menu.fixMenus(newParent); - } - } - - /** - * Returns the widget accelerator. An accelerator is the bit-wise OR of zero - * or more modifier masks and a key. Examples: - * SWT.CONTROL | SWT.SHIFT | 'T', SWT.ALT | SWT.F2. The default - * value is zero, indicating that the menu item does not have an - * accelerator. - * - * @return the accelerator or 0 - * - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getAccelerator() { - checkWidget(); - return accelerator; - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent (or its display if its parent is null). - * - * @return the receiver's bounding rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - /* public */Rectangle getBounds() { - checkWidget(); - return QtSWTConverter.convert(getQWidget().frameGeometry()); - } - - /** - * Returns true if the receiver is enabled, and - * false otherwise. A disabled menu item is typically not - * selectable from the user interface and draws with an inactive or "grayed" - * look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #isEnabled - */ - public boolean getEnabled() { - checkWidget(); - return getQAction().isEnabled(); - } - - /** - * Gets the identifier associated with the receiver. - * - * @exception SWTException
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  • - *
- * - * @since 3.7 - */ - public int getID () { - checkWidget(); - return userId; - } - - /** - * Returns the receiver's cascade menu if it has one or null if it does not. - * Only CASCADE menu items can have a pull down menu. The - * sequence of key strokes, button presses and/or button releases that are - * used to request a pull down menu is platform specific. - * - * @return the receiver's menu - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - @Override - public Menu getMenu() { - checkWidget(); - return menu; - } - - @Override - String getNameText() { - if ((style & SWT.SEPARATOR) != 0) { - return "|";//$NON-NLS-1$ - } - return super.getNameText(); - } - - /** - * Returns the receiver's parent, which must be a Menu. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Menu getParent() { - checkWidget(); - return parent; - } - - /** - * Returns true if the receiver is selected, and false - * otherwise. - *

- * When the receiver is of type CHECK or RADIO, it - * is selected when it is checked. - * - * @return the selection state - * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public boolean getSelection() { - checkWidget(); - return getQAction().isChecked(); - } - - /** - * Returns true if the receiver is enabled and all of the - * receiver's ancestors are enabled, and false otherwise. A - * disabled menu item is typically not selectable from the user interface - * and draws with an inactive or "grayed" look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getEnabled - */ - public boolean isEnabled() { - return getEnabled() && parent.isEnabled(); - } - - @Override - void releaseChildren(boolean destroy) { - if (menu != null) { - menu.release(false); - menu = null; - } - super.releaseChildren(destroy); - } - - @Override - void releaseQWidget() { - if ((style & SWT.RADIO) != 0) { - parent.removeFromActionGroup(action); - } - parent.removeAction(action); - display.removeControl(action); - parent = null; - action = null; - id = -1; - super.releaseQWidget(); - } - - @Override - void releaseParent() { - super.releaseParent(); - if (menu != null) { - menu.dispose(); - } - menu = null; - } - - @Override - void releaseWidget() { - super.releaseWidget(); - accelerator = 0; - display.removeMenuItem(this); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the arm events are generated for the control. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ArmListener - * @see #addArmListener - */ - public void removeArmListener(ArmListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Arm, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the help events are generated for the control. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see HelpListener - * @see #addHelpListener - */ - public void removeHelpListener(HelpListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Help, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - void selectRadio() { - int index = 0; - MenuItem[] items = parent.getItems(); - while (index < items.length && items[index] != this) { - index++; - } - int i = index - 1; - while (i >= 0 && items[i].setRadioSelection(false)) { - --i; - } - int j = index + 1; - while (j < items.length && items[j].setRadioSelection(false)) { - j++; - } - setSelection(true); - } - - /** - * Sets the widget accelerator. An accelerator is the bit-wise OR of zero or - * more modifier masks and a key. Examples: - * SWT.MOD1 | SWT.MOD2 | 'T', SWT.MOD3 | SWT.F2. - * SWT.CONTROL | SWT.SHIFT | 'T', SWT.ALT | SWT.F2. The default - * value is zero, indicating that the menu item does not have an - * accelerator. - * - * @param accelerator - * an integer that is the bit-wise OR of masks and a key - * - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setAccelerator(int accelerator) { - checkWidget(); - int seq = 0; - if (this.accelerator == accelerator) { - return; - } - this.accelerator = accelerator; - /* - * fetch the modifiers of the accelerator (something like - * CTRL+SHIFT...). There can be more than one modifier. - */ - for (Integer modifier : modifiers.keySet()) { - if ((accelerator & modifier) != 0) { - accelerator -= modifier; - seq += modifiers.get(modifier); - } - } - - /* - * Fetch uppercase characters and other ascii characters (+, =, ?...). - * Only one of this chars is allowed. - */ - if (accelerator >= 32 && accelerator <= 96 || accelerator >= 123 && accelerator <= 127) { - seq += accelerator; - accelerator -= accelerator; - } - /* - * Transform lowercase characters to uppercase characters, because QT - * can only handle uppercase characters and there is no difference - * between CTRL+m and CTRL+M. Only one of this chars is allowed. - */ - if (accelerator >= 97 && accelerator <= 122) { - seq += accelerator - 32; // make a uppercase character out of a lowercase character - accelerator -= accelerator; - } - - /* fetch characters like F1, arrow keys or Page Up. Only one is allowed */ - if (accelerator != 0) { - for (Integer acc : accelerators.keySet()) { - if (accelerator == acc) { - accelerator -= acc; - seq += accelerators.get(acc); - } - } - } - - if (accelerator != 0) { // something went wrong here. Not every character could be fetched. - return; - } - getQAction().setShortcut(new QKeySequence(seq)); - - } - - /* - * private QKeySequence acceleratorToString(int accelerator) { int seq = 0; - * if ((accelerator & SWT.MOD1) != 0 || (accelerator & SWT.CTRL) != 0) { // - * on Windows systems SWT.MOD1 is the ctrl key accelerator -= SWT.MOD1; seq - * += Qt.Modifier.CTRL.value(); } if ((accelerator & SWT.MOD2) != 0 || - * (accelerator & SWT.SHIFT) != 0) { // on Windows systems SWT.MOD2 is the - * shift key accelerator -= SWT.MOD2; seq += Qt.Modifier.SHIFT.value(); } if - * ((accelerator & SWT.MOD3) != 0 || (accelerator & SWT.ALT) != 0) { - * accelerator -= SWT.MOD3; seq += Qt.Modifier.ALT.value(); } if - * (accelerator >= 65 && accelerator <= 90) { seq += accelerator; } else if - * (accelerator >= 97 && accelerator <= 122) { seq += accelerator - 32; // - * this takes care of lowercase characters. CTRL+m should be the same as - * CTRL+M } else if ((accelerator & SWT.ARROW_DOWN) != 0) { seq += - * Qt.Key.Key_Down.value(); } else if ((accelerator & SWT.ARROW_LEFT) != 0) - * { seq += Qt.Key.Key_Left.value(); } else if ((accelerator & - * SWT.ARROW_RIGHT) != 0) { seq += Qt.Key.Key_Right.value(); } else if - * ((accelerator & SWT.ARROW_UP) != 0) { seq += Qt.Key.Key_Up.value(); } - * else if ((accelerator & SWT.F1) != 0) { seq += Qt.Key.Key_F1.value(); } - * return new QKeySequence(seq); } - */ - /** - * Enables the receiver if the argument is true, and disables - * it otherwise. A disabled menu item is typically not selectable from the - * user interface and draws with an inactive or "grayed" look. - * - * @param enabled - * the new enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setEnabled(boolean enabled) { - checkWidget(); - getQAction().setEnabled(enabled); - } - - /** - * Sets the identifier associated with the receiver to the argument. - * - * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values. - * - * @exception SWTException
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  • - *
  • ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.
  • - *
- * - * @since 3.7 - */ - public void setID (int id) { - checkWidget(); - if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT); - userId = id; - } - - /** - * Sets the image the receiver will display to the argument. - *

- * Note: This operation is a hint and is not supported on platforms that do - * not have this concept (for example, Windows NT). Furthermore, some - * platforms (such as GTK), cannot display both a check box and an image at - * the same time. Instead, they hide the image and display the check box. - *

- * - * @param image - * the image to display - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - @Override - public void setImage(Image image) { - checkWidget(); - if ((style & SWT.SEPARATOR) != 0) { - return; - } - super.setImage(image); - if (image != null) { - getQAction().setIcon(image.getQIcon()); - } else { - getQAction().setIcon((QIcon) null); - } - } - - /** - * Sets the receiver's pull down menu to the argument. Only - * CASCADE menu items can have a pull down menu. The sequence - * of key strokes, button presses and/or button releases that are used to - * request a pull down menu is platform specific. - *

- * Note: Disposing of a menu item that has a pull down menu will dispose of - * the menu. To avoid this behavior, set the menu to null before the menu - * item is disposed. - *

- * - * @param menu - * the new pull down menu - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_MENU_NOT_DROP_DOWN - if the menu is not a drop - * down menu
  • - *
  • ERROR_MENUITEM_NOT_CASCADE - if the menu item is not a - * CASCADE
  • - *
  • ERROR_INVALID_ARGUMENT - if the menu has been disposed - *
  • - *
  • ERROR_INVALID_PARENT - if the menu is not in the same - * widget tree
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMenu(Menu menu) { - checkWidget(); - - /* Check to make sure the new menu is valid */ - if ((style & SWT.CASCADE) == 0) { - error(SWT.ERROR_MENUITEM_NOT_CASCADE); - } - if (menu != null) { - if (menu.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if ((menu.style & SWT.DROP_DOWN) == 0) { - error(SWT.ERROR_MENU_NOT_DROP_DOWN); - } - if (menu.parent != parent.parent) { - error(SWT.ERROR_INVALID_PARENT); - } - } - setMenu(menu, false); - } - - void setMenu(Menu menu, boolean dispose) { - if ((style & SWT.CASCADE) == 0) { - error(SWT.ERROR_MENUITEM_NOT_CASCADE); - } - QMenu qMenu = null; - if (menu != null) { - if ((menu.style & SWT.DROP_DOWN) == 0) { - error(SWT.ERROR_MENU_NOT_DROP_DOWN); - } - if (menu.parent != parent.parent) { - error(SWT.ERROR_INVALID_PARENT); - } - qMenu = menu.getQMenu(); - } - Menu oldMenu = this.menu; - if (oldMenu == menu) { - return; - } - if (oldMenu != null) { - oldMenu.cascade = null; - } - this.menu = menu; - getQAction().setMenu(qMenu); - if (this.menu != null) { - this.menu.cascade = this; - } - } - - boolean setRadioSelection(boolean value) { - if ((style & SWT.RADIO) == 0) { - return false; - } - if (getSelection() != value) { - setSelection(value); - postEvent(SWT.Selection); - } - return true; - } - - /** - * Sets the selection state of the receiver. - *

- * When the receiver is of type CHECK or RADIO, it - * is selected when it is checked. - * - * @param selected - * the new selection state - * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public void setSelection(boolean selected) { - checkWidget(); - if ((style & (SWT.CHECK | SWT.RADIO)) == 0) { - return; - } - getQAction().setChecked(selected); - } - - /** - * Sets the receiver's text. The string may include the mnemonic character - * and accelerator text. - *

- * Mnemonics are indicated by an '&' that causes the next character to - * be the mnemonic. When the user presses a key sequence that matches the - * mnemonic, a selection event occurs. On most platforms, the mnemonic - * appears underlined but may be emphasised in a platform specific manner. - * The mnemonic indicator character '&' can be escaped by doubling it in - * the string, causing a single '&' to be displayed. - *

- *

- * Accelerator text is indicated by the '\t' character. On platforms that - * support accelerator text, the text that follows the '\t' character is - * displayed to the user, typically indicating the key stroke that will - * cause the item to become selected. On most platforms, the accelerator - * text appears right aligned in the menu. Setting the accelerator text does - * not install the accelerator key sequence. The accelerator key sequence is - * installed using #setAccelerator. - *

- * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #setAccelerator - */ - @Override - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if ((style & SWT.SEPARATOR) != 0) { - return; - } - if (text.equals(string)) { - return; - } - super.setText(string); - getQAction().setText(string); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MessageBox.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MessageBox.java deleted file mode 100644 index 297dd3161f..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MessageBox.java +++ /dev/null @@ -1,312 +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 org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; - -/** - * Instances of this class are used to inform or warn the user. - *
- *
Styles:
- *
ICON_ERROR, ICON_INFORMATION, ICON_QUESTION, ICON_WARNING, ICON_WORKING
- *
OK, OK | CANCEL
- *
YES | NO, YES | NO | CANCEL
- *
RETRY | CANCEL
- *
ABORT | RETRY | IGNORE
- *
Events:
- *
(none)
- *
- *

- * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION, - * ICON_WARNING and ICON_WORKING may be specified. - *

- *

- * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

- * - * @see SWT Example: - * ControlExample, Dialog tab - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class MessageBox extends Dialog { - String message = ""; //$NON-NLS-1$ - - /** - * Constructs a new instance of this class given only its parent. - * - * @param parent - * a shell which will be the parent of the new instance - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- */ - public MessageBox(Shell parent) { - this(parent, SWT.OK | SWT.ICON_INFORMATION | SWT.APPLICATION_MODAL); - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - * - * @param parent - * a shell which will be the parent of the new instance - * @param style - * the style of dialog to construct - * - * @exception IllegalArgumentException - *

    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - * ERROR_INVALID_SUBCLASS - if this class is not an allowed - * subclass
  • - *
- */ - public MessageBox(Shell parent, int style) { - super(parent, checkStyle(parent, checkStyle(style))); - checkSubclass(); - } - - static int checkStyle(int style) { - int mask = SWT.YES | SWT.NO | SWT.OK | SWT.CANCEL | SWT.ABORT | SWT.RETRY | SWT.IGNORE; - int bits = style & mask; - if (bits == SWT.OK || bits == SWT.CANCEL || bits == (SWT.OK | SWT.CANCEL)) { - return style; - } - if (bits == SWT.YES || bits == SWT.NO || bits == (SWT.YES | SWT.NO) || bits == (SWT.YES | SWT.NO | SWT.CANCEL)) { - return style; - } - if (bits == (SWT.RETRY | SWT.CANCEL) || bits == (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) { - return style; - } - style = style & ~mask | SWT.OK; - return style; - } - - /** - * Returns the dialog's message, or an empty string if it does not have one. - * The message is a description of the purpose for which the dialog was - * opened. This message will be visible in the dialog while it is open. - * - * @return the message - */ - public String getMessage() { - return message; - } - - /** - * Makes the dialog visible and brings it to the front of the display. - * - * @return the ID of the button that was selected to dismiss the message box - * (e.g. SWT.OK, SWT.CANCEL, etc.) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the dialog has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the dialog
  • - *
- */ - public int open() { - - /* Compute the MessageBox style */ - // int buttonBits = 0; - // if ((style & SWT.OK) == SWT.OK) { - // buttonBits = OS.MB_OK; - // } - // if ((style & (SWT.OK | SWT.CANCEL)) == (SWT.OK | SWT.CANCEL)) { - // buttonBits = OS.MB_OKCANCEL; - // } - // if ((style & (SWT.YES | SWT.NO)) == (SWT.YES | SWT.NO)) { - // buttonBits = OS.MB_YESNO; - // } - // if ((style & (SWT.YES | SWT.NO | SWT.CANCEL)) == (SWT.YES | SWT.NO | SWT.CANCEL)) { - // buttonBits = OS.MB_YESNOCANCEL; - // } - // if ((style & (SWT.RETRY | SWT.CANCEL)) == (SWT.RETRY | SWT.CANCEL)) { - // buttonBits = OS.MB_RETRYCANCEL; - // } - // if ((style & (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) == (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) { - // buttonBits = OS.MB_ABORTRETRYIGNORE; - // } - // if (buttonBits == 0) { - // buttonBits = OS.MB_OK; - // } - // - // int iconBits = 0; - // if ((style & SWT.ICON_ERROR) != 0) { - // iconBits = OS.MB_ICONERROR; - // } - // if ((style & SWT.ICON_INFORMATION) != 0) { - // iconBits = OS.MB_ICONINFORMATION; - // } - // if ((style & SWT.ICON_QUESTION) != 0) { - // iconBits = OS.MB_ICONQUESTION; - // } - // if ((style & SWT.ICON_WARNING) != 0) { - // iconBits = OS.MB_ICONWARNING; - // } - // if ((style & SWT.ICON_WORKING) != 0) { - // iconBits = OS.MB_ICONINFORMATION; - // } - // - // /* Only MB_APPLMODAL is supported on WinCE */ - // int modalBits = 0; - // - // if ((style & SWT.PRIMARY_MODAL) != 0) { - // modalBits = OS.MB_APPLMODAL; - // } - // if ((style & SWT.APPLICATION_MODAL) != 0) { - // modalBits = OS.MB_TASKMODAL; - // } - // if ((style & SWT.SYSTEM_MODAL) != 0) { - // modalBits = OS.MB_SYSTEMMODAL; - // } - // - // int bits = buttonBits | iconBits | modalBits; - // if ((style & SWT.RIGHT_TO_LEFT) != 0) { - // bits |= OS.MB_RTLREADING | OS.MB_RIGHT; - // } - // if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) { - // if (parent != null && (parent.style & SWT.MIRRORED) != 0) { - // bits |= OS.MB_RTLREADING | OS.MB_RIGHT; - // } - // } - // - // /* - // * Feature in Windows. System modal is not supported on Windows 95 and - // * NT. The fix is to convert system modal to task modal. - // */ - // if ((bits & OS.MB_SYSTEMMODAL) != 0) { - // bits |= OS.MB_TASKMODAL; - // bits &= ~OS.MB_SYSTEMMODAL; - // /* Force a system modal message box to the front */ - // bits |= OS.MB_TOPMOST; - // } - // - // /* - // * Feature in Windows. In order for MB_TASKMODAL to work, the parent - // * HWND of the MessageBox () call must be NULL. If the parent is not - // * NULL, MB_TASKMODAL behaves the same as MB_APPLMODAL. The fix to set - // * the parent HWND anyway and not rely on MB_MODAL to work by making the - // * parent be temporarily modal. - // */ - // int /* long */hwndOwner = 0; //parent != null ? parent.handle : 0; - // Dialog oldModal = null; - // Display display = null; - // if ((bits & OS.MB_TASKMODAL) != 0) { - // display = parent.getDisplay(); - // oldModal = display.getModalDialog(); - // display.setModalDialog(this); - // } - // - // /* Open the message box */ - // /* Use the character encoding for the default locale */ - // TCHAR buffer1 = new TCHAR(0, message, true); - // TCHAR buffer2 = new TCHAR(0, title, true); - // int code = OS.MessageBox(hwndOwner, buffer1, buffer2, bits); - // - // /* Clear the temporarily dialog modal parent */ - // if ((bits & OS.MB_TASKMODAL) != 0) { - // display.setModalDialog(oldModal); - // } - // - // /* - // * This code is intentionally commented. On some platforms, the owner - // * window is repainted right away when a dialog window exits. This - // * behavior is currently unspecified. - // */ - // // if (hwndOwner != 0) OS.UpdateWindow (hwndOwner); - // - // /* Compute and return the result */ - // if (code != 0) { - // int type = bits & 0x0F; - // if (type == OS.MB_OK) { - // return SWT.OK; - // } - // if (type == OS.MB_OKCANCEL) { - // return code == OS.IDOK ? SWT.OK : SWT.CANCEL; - // } - // if (type == OS.MB_YESNO) { - // return code == OS.IDYES ? SWT.YES : SWT.NO; - // } - // if (type == OS.MB_YESNOCANCEL) { - // if (code == OS.IDYES) { - // return SWT.YES; - // } - // if (code == OS.IDNO) { - // return SWT.NO; - // } - // return SWT.CANCEL; - // } - // if (type == OS.MB_RETRYCANCEL) { - // return code == OS.IDRETRY ? SWT.RETRY : SWT.CANCEL; - // } - // if (type == OS.MB_ABORTRETRYIGNORE) { - // if (code == OS.IDRETRY) { - // return SWT.RETRY; - // } - // if (code == OS.IDABORT) { - // return SWT.ABORT; - // } - // return SWT.IGNORE; - // } - // } - return SWT.CANCEL; - } - - /** - * Sets the dialog's message, which is a description of the purpose for - * which it was opened. This message will be visible on the dialog while it - * is open. - * - * @param string - * the message - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the string is null
  • - *
- */ - public void setMessage(String string) { - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - message = string; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ProgressBar.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ProgressBar.java deleted file mode 100644 index dc80139bfa..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ProgressBar.java +++ /dev/null @@ -1,318 +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 com.trolltech.qt.core.QSize; -import com.trolltech.qt.gui.QProgressBar; -import com.trolltech.qt.gui.QWidget; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Point; - -/** - * Instances of the receiver represent an unselectable user interface object - * that is used to display progress, typically in the form of a bar. - *
- *
Styles:
- *
SMOOTH, HORIZONTAL, VERTICAL, INDETERMINATE
- *
Events:
- *
(none)
- *
- *

- * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified. - *

- *

- * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

- * - * @see ProgressBar - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class ProgressBar extends Control { - static final int DELAY = 100; - int foreground = -1, background = -1; - private int timerID = -1; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#SMOOTH - * @see SWT#HORIZONTAL - * @see SWT#VERTICAL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public ProgressBar(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - QProgressBar progressBar = new QProgressBar(); - return progressBar; - } - - @Override - protected void setupQWidget() { - if ((style & SWT.INDETERMINATE) != 0) { - getQProgressBar().setRange(0, 0); - // Funny: this avoids a JVM crash: EXCEPTION_INT_DIVIDE_BY_ZERO (0xc0000094) - // http://eclipse.compeople.eu/wiki/index.php/Compeople:SWTQtImplementierungsdetails#DIVISION_BY_ZERO - getQProgressBar().setTextVisible(false); - } - // this causes a lot of events, commented for debugging - //startTimer(getQProgressBar()); - super.setupQWidget(); - } - - private QProgressBar getQProgressBar() { - return (QProgressBar) getQWidget(); - } - - static int checkStyle(int style) { - style |= SWT.NO_FOCUS; - return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0); - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - QSize size = getQProgressBar().sizeHint(); - return new Point(size.width(), size.height()); - } - - /** - * Returns the maximum value which the receiver will allow. - * - * @return the maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMaximum() { - checkWidget(); - return getQProgressBar().maximum(); - } - - /** - * Returns the minimum value which the receiver will allow. - * - * @return the minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMinimum() { - checkWidget(); - return getQProgressBar().minimum(); - } - - /** - * Returns the single 'selection' that is the receiver's position. - * - * @return the selection - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelection() { - checkWidget(); - return getQProgressBar().value(); - } - - /** - * Returns the state of the receiver. The value will be one of: - *
    - *
  • {@link SWT#NORMAL}
  • - *
  • {@link SWT#ERROR}
  • - *
  • {@link SWT#PAUSED}
  • - *
- * - * @return the state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public int getState() { - checkWidget(); - return SWT.NORMAL; - } - - @Override - void releaseWidget() { - stopTimer(); - super.releaseWidget(); - } - - void startTimer(QProgressBar progressBar) { - stopTimer(); - // TODO dynamic interval for startTimer - timerID = progressBar.startTimer(DELAY); - } - - void stopTimer() { - if (timerID != -1) { - getQProgressBar().killTimer(timerID); - } - } - - /** - * Sets the maximum value that the receiver will allow. This new value will - * be ignored if it is not greater than the receiver's current minimum - * value. If the new maximum is applied then the receiver's selection value - * will be adjusted if necessary to fall within its new range. - * - * @param value - * the new maximum, which must be greater than the current - * minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - - public void setMaximum(int value) { - checkWidget(); - getQProgressBar().setMaximum(value); - } - - /** - * Sets the minimum value that the receiver will allow. This new value will - * be ignored if it is negative or is not less than the receiver's current - * maximum value. If the new minimum is applied then the receiver's - * selection value will be adjusted if necessary to fall within its new - * range. - * - * @param value - * the new minimum, which must be nonnegative and less than the - * current maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMinimum(int value) { - checkWidget(); - getQProgressBar().setMinimum(value); - } - - /** - * Sets the single 'selection' that is the receiver's position to the - * argument which must be greater than or equal to zero. - * - * @param value - * the new selection (must be zero or greater) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(int value) { - checkWidget(); - getQProgressBar().setValue(value); - } - - /** - * Sets the state of the receiver. The state must be one of these values: - *
    - *
  • {@link SWT#NORMAL}
  • - *
  • {@link SWT#ERROR}
  • - *
  • {@link SWT#PAUSED}
  • - *
- * - * @param state - * the new state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public void setState(int state) { - checkWidget(); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Sash.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Sash.java deleted file mode 100644 index 399d863b45..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Sash.java +++ /dev/null @@ -1,387 +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 com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.QRect; -import com.trolltech.qt.core.Qt.CursorShape; -import com.trolltech.qt.core.Qt.MouseButton; -import com.trolltech.qt.gui.QCursor; -import com.trolltech.qt.gui.QFrame; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QFrame.Shadow; -import com.trolltech.qt.gui.QFrame.Shape; - -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.Point; - -/** - * Instances of the receiver represent a selectable user interface object that - * allows the user to drag a rubber banded outline of the sash within the parent - * control.sw - *
- *
Styles:
- *
HORIZONTAL, VERTICAL, SMOOTH
- *
Events:
- *
Selection
- *
- *

- * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified. - *

- *

- * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

- * - * @see Sash snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class Sash extends Control { - private boolean dragging; - private int startX, startY, lastX, lastY; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#HORIZONTAL - * @see SWT#VERTICAL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Sash(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - state |= THEME_BACKGROUND; - return new QFrame(); - } - - protected QFrame getQFrame() { - return (QFrame) getQWidget(); - } - - @Override - protected void checkAndUpdateBorder() { - if ((style & SWT.BORDER) != 0) { - getQFrame().setFrameShape(Shape.Panel); - getQFrame().setFrameShadow(Shadow.Sunken); - } else { - getQFrame().setFrameShape(Shape.NoFrame); - } - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * When widgetSelected is called, the x, y, width, and height - * fields of the event object are valid. If the receiver is being dragged, - * the event object detail field contains the value SWT.DRAG. - * widgetDefaultSelected is not called. - *

- * - * @param listener - * the listener which should be notified when the control is - * selected by the user - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - static int checkStyle(int style) { - return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0); - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - int border = getBorderWidth(); - int width = border * 2, height = border * 2; - if ((style & SWT.HORIZONTAL) != 0) { - width += DEFAULT_WIDTH; - height += 3; - } else { - width += 3; - height += DEFAULT_HEIGHT; - } - if (wHint != SWT.DEFAULT) { - width = wHint + border * 2; - } - if (hHint != SWT.DEFAULT) { - height = hHint + border * 2; - } - return new Point(width, height); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - @Override - public boolean qtMouseMoveEvent(QObject source, QMouseEvent mouseEvent) { - if (source == getQWidget()) { - return handleMouseMove(mouseEvent); - } - return super.qtMouseMoveEvent(source, mouseEvent); - } - - @Override - public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) { - if (super.qtMouseButtonPressEvent(source, mouseEvent)) { - return true; // cancel; - } - return handleMousePress(mouseEvent); - } - - @Override - public boolean qtMouseButtonReleaseEvent(QObject source, QMouseEvent mouseEvent) { - if (super.qtMouseButtonReleaseEvent(source, mouseEvent)) { - return true; // cancel - } - return handleMouseRelease(mouseEvent); - } - - private boolean handleMousePress(QMouseEvent mouseEvent) { - if (!isLeftMouseButton(mouseEvent)) { - return false; - } - QPoint pt = mouseEvent.globalPos(); - QRect rect = getQWidget().frameGeometry(); - startX = pt.x() - rect.left(); - startY = pt.y() - rect.top(); - lastX = rect.left(); - lastY = rect.top(); - int width = rect.width(); - int height = rect.height(); - - Event event = new Event(); - event.x = lastX; - event.y = lastY; - event.width = width; - event.height = height; - if ((style & SWT.SMOOTH) == 0) { - event.detail = SWT.DRAG; - } - sendEvent(SWT.Selection, event); - if (isDisposed()) { - return true; - } - - /* Draw the banding rectangle */ - if (event.doit) { - dragging = true; - lastX = event.x; - lastY = event.y; - menuShell().bringToTop(); - if (isDisposed()) { - return true; - } - if ((style & SWT.SMOOTH) != 0) { - setBounds(event.x, event.y, width, height, true, true); - // widget could be disposed at this point - } - } - return false; - } - - private boolean isLeftMouseButton(QMouseEvent mouseEvent) { - return MouseButton.LeftButton.equals(mouseEvent.button()) || mouseEvent.buttons().isSet(MouseButton.LeftButton); - } - - private boolean handleMouseRelease(QMouseEvent mouseEvent) { - if (!(dragging && isLeftMouseButton(mouseEvent))) { - return false; - } - - dragging = false; - QRect rect = getQWidget().frameGeometry(); - int width = rect.width(); - int height = rect.height(); - - Event event = new Event(); - event.x = lastX; - event.y = lastY; - event.width = width; - event.height = height; - sendEvent(SWT.Selection, event); - if (isDisposed()) { - return true; - } - if (event.doit) { - if ((style & SWT.SMOOTH) != 0) { - setBounds(event.x, event.y, width, height, true, true); - // widget could be disposed at this point - } - } - return false; - } - - private boolean handleMouseMove(QMouseEvent mouseEvent) { - if (!(dragging && isLeftMouseButton(mouseEvent))) { - return false; - } - - QPoint pt = mouseEvent.globalPos(); - QRect rect = getQWidget().frameGeometry(); - int width = rect.width(); - int height = rect.height(); - QRect clientRect = getQWidget().parentWidget().frameGeometry(); - - int newX = lastX, newY = lastY; - if ((style & SWT.VERTICAL) != 0) { - int clientWidth = clientRect.width(); - newX = Math.min(Math.max(0, pt.x() - startX), clientWidth - width); - } else { - int clientHeight = clientRect.height(); - newY = Math.min(Math.max(0, pt.y() - startY), clientHeight - height); - } - if (newX == lastX && newY == lastY) { - return false; - } - - /* The event must be sent because doit flag is used */ - Event event = new Event(); - event.x = newX; - event.y = newY; - event.width = width; - event.height = height; - if ((style & SWT.SMOOTH) == 0) { - event.detail = SWT.DRAG; - } - sendEvent(SWT.Selection, event); - if (isDisposed()) { - return true; - } - - if (event.doit) { - lastX = event.x; - lastY = event.y; - } - if ((style & SWT.SMOOTH) != 0) { - setBounds(lastX, lastY, width, height, true, true); - // widget could be disposed at this point - } - return false; - } - - @Override - public boolean qtMouseEnterEvent(Object source) { - if (source == getQWidget()) { - if ((style & SWT.HORIZONTAL) != 0) { - getQWidget().setCursor(new QCursor(CursorShape.SizeVerCursor)); - } else { - getQWidget().setCursor(new QCursor(CursorShape.SizeHorCursor)); - } - } - return super.qtMouseEnterEvent(source); - } - - @Override - public boolean qtMouseLeaveEvent(Object source) { - if (source == getQWidget()) { - getQWidget().setCursor(new QCursor(CursorShape.ArrowCursor)); - } - return super.qtMouseLeaveEvent(source); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scale.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scale.java deleted file mode 100644 index b7ee6cb7c0..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scale.java +++ /dev/null @@ -1,494 +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 com.trolltech.qt.core.Qt.Orientation; -import com.trolltech.qt.gui.QAbstractSlider; -import com.trolltech.qt.gui.QSlider; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QSlider.TickPosition; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Point; - -/** - * Instances of the receiver represent a selectable user interface object that - * present a range of continuous numeric values. - *
- *
Styles:
- *
HORIZONTAL, VERTICAL
- *
Events:
- *
Selection
- *
- *

- * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified. - *

- *

- *

- * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

- * - * @see Scale snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Scale extends Control { - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#HORIZONTAL - * @see SWT#VERTICAL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Scale(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - final Orientation orientation = (style & SWT.HORIZONTAL) != 0 ? Orientation.Horizontal : Orientation.Vertical; - return new QSlider(orientation); - } - - @Override - protected void setupQWidget() { - super.setupQWidget(); - setMinimum(0); - setMaximum(100); - setIncrement(1); - setPageIncrement(10); - getQSlider().setTickPosition(TickPosition.TicksBothSides); - } - - QSlider getQSlider() { - return (QSlider) getQWidget(); - } - - @Override - protected void connectSignals() { - getQSlider().actionTriggered.connect(this, "actionTriggered(int)"); //$NON-NLS-1$ - getQSlider().rangeChanged.connect(this, "rangeChanged(int,int)"); //$NON-NLS-1$ - getQSlider().sliderMoved.connect(this, "sliderMoved(int)"); //$NON-NLS-1$ - getQSlider().sliderPressed.connect(this, "sliderPressed()"); //$NON-NLS-1$ - getQSlider().sliderReleased.connect(this, "sliderReleased()"); //$NON-NLS-1$ - getQSlider().valueChanged.connect(this, "valueChanged(int)"); //$NON-NLS-1$ - } - - protected void actionTriggered(int action) { - System.out.println("actionTriggered :" + action + " " + getQSlider().value()); //$NON-NLS-1$//$NON-NLS-2$ - Event event = new Event(); - if (action == QAbstractSlider.SliderAction.SliderToMinimum.value()) { - event.detail = SWT.HOME; - } else if (action == QAbstractSlider.SliderAction.SliderToMaximum.value()) { - event.detail = SWT.END; - } else if (action == QAbstractSlider.SliderAction.SliderSingleStepAdd.value()) { - event.detail = SWT.ARROW_DOWN; - } else if (action == QAbstractSlider.SliderAction.SliderSingleStepSub.value()) { - event.detail = SWT.ARROW_UP; - } else if (action == QAbstractSlider.SliderAction.SliderPageStepAdd.value()) { - event.detail = SWT.PAGE_UP; - } else if (action == QAbstractSlider.SliderAction.SliderPageStepSub.value()) { - event.detail = SWT.PAGE_DOWN; - } else if (action == QAbstractSlider.SliderAction.SliderMove.value()) { - event.detail = SWT.DRAG; - } else { - return; - } - // see actionTrigger signal - getQSlider().setValue(getQSlider().sliderPosition()); - sendEvent(SWT.Selection, event); - } - - // TODO: implement the events - protected void rangeChanged(int min, int max) { - System.out.println("rangeChanged :" + min + ", " + max); //$NON-NLS-1$//$NON-NLS-2$ - } - - protected void sliderMoved(int pos) { - System.out.println("sliderMoved :" + pos); //$NON-NLS-1$ - } - - protected void sliderPressed() { - System.out.println("sliderPressed"); //$NON-NLS-1$ - } - - protected void sliderReleased() { - System.out.println("sliderReleased"); //$NON-NLS-1$ - Event event = new Event(); - event.detail = SWT.NONE; - sendEvent(SWT.Selection, event); - } - - protected void valueChanged(int value) { - System.out.println("valueChanged :" + value); //$NON-NLS-1$ - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the user changes the receiver's value, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * widgetSelected is called when the user changes the - * receiver's value. widgetDefaultSelected is not called. - *

- * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SelectionListener - * @see #removeSelectionListener - */ - 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); - } - - static int checkStyle(int style) { - return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0); - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - int border = getBorderWidth(); - int width = border * 2; - int height = border * 2; - // default size: this is just the two arrows + thumb - Point defaultSize = super.computeSize(wHint, hHint, changed); - if ((style & SWT.HORIZONTAL) != 0) { - width += defaultSize.y * 6; - height += defaultSize.y; - } else { - width += defaultSize.x; - height += defaultSize.x * 6; - } - if (wHint != SWT.DEFAULT) { - width = wHint + border * 2; - } - if (hHint != SWT.DEFAULT) { - height = hHint + border * 2; - } - return new Point(width, height); - } - - // TODO What should happen here? - // int defaultForeground() { - // return display.getSystemColor(SWT.COLOR_LIST_FOREGROUND); - // } - - /** - * Returns the amount that the receiver's value will be modified by when the - * up/down (or right/left) arrows are pressed. - * - * @return the increment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getIncrement() { - checkWidget(); - return getQSlider().singleStep(); - } - - /** - * Returns the maximum value which the receiver will allow. - * - * @return the maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMaximum() { - checkWidget(); - return getQSlider().maximum(); - } - - /** - * Returns the minimum value which the receiver will allow. - * - * @return the minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMinimum() { - checkWidget(); - return getQSlider().minimum(); - } - - /** - * Returns the amount that the receiver's value will be modified by when the - * page increment/decrement areas are selected. - * - * @return the page increment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getPageIncrement() { - checkWidget(); - return getQSlider().pageStep(); - } - - /** - * Returns the 'selection', which is the receiver's position. - * - * @return the selection - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelection() { - checkWidget(); - return getQSlider().value(); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the user changes the receiver's value. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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 amount that the receiver's value will be modified by when the - * up/down (or right/left) arrows are pressed to the argument, which must be - * at least one. - * - * @param increment - * the new increment (must be greater than zero) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setIncrement(int increment) { - checkWidget(); - if (increment < 1) { - return; - } - if (increment > getMaximum() - getMinimum()) { - return; - } - getQSlider().setSingleStep(increment); - } - - /** - * Sets the maximum value that the receiver will allow. This new value will - * be ignored if it is not greater than the receiver's current minimum - * value. If the new maximum is applied then the receiver's selection value - * will be adjusted if necessary to fall within its new range. - * - * @param value - * the new maximum, which must be greater than the current - * minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMaximum(int value) { - checkWidget(); - if (0 <= getMinimum() && getMinimum() < value) { - getQSlider().setMaximum(value); - } - } - - /** - * Sets the minimum value that the receiver will allow. This new value will - * be ignored if it is negative or is not less than the receiver's current - * maximum value. If the new minimum is applied then the receiver's - * selection value will be adjusted if necessary to fall within its new - * range. - * - * @param value - * the new minimum, which must be nonnegative and less than the - * current maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMinimum(int value) { - checkWidget(); - if (0 <= value && value < getMaximum()) { - getQSlider().setMinimum(value); - } - } - - /** - * Sets the amount that the receiver's value will be modified by when the - * page increment/decrement areas are selected to the argument, which must - * be at least one. - * - * @param pageIncrement - * the page increment (must be greater than zero) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setPageIncrement(int pageIncrement) { - checkWidget(); - if (pageIncrement < 1) { - return; - } - if (pageIncrement > getMaximum() - getMinimum()) { - return; - } - getQSlider().setPageStep(pageIncrement); - getQSlider().setTickInterval(pageIncrement); - } - - /** - * Sets the 'selection', which is the receiver's value, to the argument - * which must be greater than or equal to zero. - * - * @param value - * the new selection (must be zero or greater) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(int value) { - checkWidget(); - getQSlider().setValue(value); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ScrollBar.java deleted file mode 100644 index 1b839a5fab..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ScrollBar.java +++ /dev/null @@ -1,876 +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 com.trolltech.qt.gui.QScrollBar; -import com.trolltech.qt.gui.QAbstractSlider.SliderAction; - -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.Point; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class are selectable user interface objects that represent - * a range of positive, numeric values. - *

- * At any given moment, a given scroll bar will have a single 'selection' that - * is considered to be its value, which is constrained to be within the range of - * values the scroll bar represents (that is, between its minimum and - * maximum values). - *

- *

- * Typically, scroll bars will be made up of five areas: - *

    - *
  1. an arrow button for decrementing the value
  2. - *
  3. a page decrement area for decrementing the value by a larger amount
  4. - *
  5. a thumb for modifying the value by mouse dragging
  6. - *
  7. a page increment area for incrementing the value by a larger amount
  8. - *
  9. an arrow button for incrementing the value
  10. - *
- * Based on their style, scroll bars are either HORIZONTAL (which - * have a left facing button for decrementing the value and a right facing - * button for incrementing it) or VERTICAL (which have an upward - * facing button for decrementing the value and a downward facing buttons for - * incrementing it). - *

- *

- * On some platforms, the size of the scroll bar's thumb can be varied relative - * to the magnitude of the range of values it represents (that is, relative to - * the difference between its maximum and minimum values). Typically, this is - * used to indicate some proportional value such as the ratio of the visible - * area of a document to the total amount of space that it would take to display - * it. SWT supports setting the thumb size even if the underlying platform does - * not, but in this case the appearance of the scroll bar will not change. - *

- *

- * Scroll bars are created by specifying either H_SCROLL, - * V_SCROLL or both when creating a Scrollable. They - * are accessed from the Scrollable using - * getHorizontalBar and getVerticalBar. - *

- *

- * Note: Scroll bars are not Controls. On some platforms, scroll bars that - * appear as part of some standard controls such as a text or list have no - * operating system resources and are not children of the control. For this - * reason, scroll bars are treated specially. To create a control that looks - * like a scroll bar but has operating system resources, use Slider - * . - *

- *
- *
Styles:
- *
HORIZONTAL, VERTICAL
- *
Events:
- *
Selection
- *
- *

- * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Slider - * @see Scrollable - * @see Scrollable#getHorizontalBar - * @see Scrollable#getVerticalBar - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class ScrollBar extends Widget { - private Scrollable parent; - private boolean visible = true; - private boolean enabled = true; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#HORIZONTAL - * @see SWT#VERTICAL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - ScrollBar(Scrollable parent, int style) { - super(parent, checkStyle(style)); - this.parent = parent; - createWidget(style); - connectSignals(); - } - - static int checkStyle(int style) { - return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0); - } - - private void createWidget(int style) { - if (!parent.isQScrollArea()) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - - QScrollBar scrollBar = null; - if ((style & SWT.HORIZONTAL) != 0) { - scrollBar = parent.getQScrollArea().horizontalScrollBar(); - } else { - scrollBar = parent.getQScrollArea().verticalScrollBar(); - } - if (scrollBar == null) { - SWT.error(SWT.ERROR_UNSPECIFIED); - } - setQWidget(scrollBar); - scrollBar.setMinimum(0); - scrollBar.setSliderPosition(0); - scrollBar.setTracking(false); - } - - private void connectSignals() { - QScrollBar sb = getQScrollBar(); - sb.sliderMoved.connect(this, "dragging()"); //$NON-NLS-1$ - sb.sliderReleased.connect(this, "dragEnd()"); //$NON-NLS-1$ - sb.actionTriggered.connect(this, "actionTriggered(int)"); //$NON-NLS-1$ - } - - void dragging() { - postSliderEvent(SWT.DRAG); - } - - void dragEnd() { - postSliderEvent(SWT.NONE); - } - - void actionTriggered(int code) { - SliderAction action = SliderAction.resolve(code); - switch (action) { - case SliderSingleStepSub: // button up - postSliderEvent(SWT.ARROW_UP); - break; - case SliderSingleStepAdd: // button down - postSliderEvent(SWT.ARROW_DOWN); - break; - case SliderPageStepSub: // page up - postSliderEvent(SWT.PAGE_UP); - break; - case SliderPageStepAdd: // page down - postSliderEvent(SWT.PAGE_DOWN); - break; - case SliderToMinimum: // at start - postSliderEvent(SWT.HOME); - break; - case SliderToMaximum: // at end - postSliderEvent(SWT.END); - break; - case SliderMove: // at end - postSliderEvent(SWT.DRAG); - break; - default: - System.err.println("unknown action: " + action); //$NON-NLS-1$ - } - } - - QScrollBar getQScrollBar() { - return (QScrollBar) getQWidget(); - } - - private void postSliderEvent(int subType) { - Event event = new Event(); - event.detail = subType; - postEvent(SWT.Selection, event); - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - parent = null; - } - - @Override - void releaseParent() { - super.releaseParent(); - parent.releaseBar(this); - } - - @Override - void destroyWidget() { - parent.destroyScrollBar(style); - } - - /** - * Returns the receiver's parent, which must be a Scrollable. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Scrollable getParent() { - checkWidget(); - return parent; - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the user changes the receiver's value, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * When widgetSelected is called, the event object detail field - * contains one of the following values: SWT.NONE - for the end - * of a drag. SWT.DRAG. SWT.HOME. - * SWT.END. SWT.ARROW_DOWN. - * SWT.ARROW_UP. SWT.PAGE_DOWN. - * SWT.PAGE_UP. widgetDefaultSelected is not - * called. - *

- * - * @param listener - * the listener which should be notified when the user changes - * the receiver's value - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the user changes the receiver's value. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Returns the amount that the receiver's value will be modified by when the - * up/down (or right/left) arrows are pressed. - * - * @return the increment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getIncrement() { - checkWidget(); - return getQScrollBar().singleStep(); - } - - /** - * Sets the amount that the receiver's value will be modified by when the - * up/down (or right/left) arrows are pressed to the argument, which must be - * at least one. - * - * @param value - * the new increment (must be greater than zero) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setIncrement(int value) { - checkWidget(); - if (value < 1) { - return; - } - getQScrollBar().setSingleStep(value); - } - - /** - * Returns the maximum value which the receiver will allow. - * - * @return the maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMaximum() { - checkWidget(); - return getQScrollBar().maximum(); // + getQScrollBar().pageStep(); - } - - /** - * Sets the maximum. If this value is negative or less than or equal to the - * minimum, the value is ignored. If necessary, first the thumb and then the - * selection are adjusted to fit within the new range. - * - * @param value - * the new maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMaximum(int value) { - checkWidget(); - if (value < 0) { - return; - } - QScrollBar scrollBar = getQScrollBar(); - int min = scrollBar.minimum(); - if (value <= min) { - return; - } - - // int maxValue = value - scrollBar.pageStep(); - // if (maxValue < min) { - // scrollBar.setPageStep(value - min); - // maxValue = min; - // } - // - // if (scrollBar.value() > maxValue) { - // scrollBar.setValue(maxValue); - // } - scrollBar.setMaximum(value); - } - - /** - * Returns the minimum value which the receiver will allow. - * - * @return the minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMinimum() { - checkWidget(); - return getQScrollBar().minimum(); - } - - /** - * Sets the minimum value. If this value is negative or greater than or - * equal to the maximum, the value is ignored. If necessary, first the thumb - * and then the selection are adjusted to fit within the new range. - * - * @param value - * the new minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMinimum(int value) { - checkWidget(); - if (value < 0) { - return; - } - QScrollBar scrollBar = getQScrollBar(); - int max = scrollBar.maximum(); - if (value >= max) { - return; - } - // - // if (max + pageStep - value < pageStep) { - // scrollBar.setPageStep(max + pageStep - value); - // scrollBar.setMaximum(value); - // } - // - // if (scrollBar.value() < value) { - // scrollBar.setValue(value); - // } - scrollBar.setMinimum(value); - } - - /** - * Returns the amount that the receiver's value will be modified by when the - * page increment/decrement areas are selected. - * - * @return the page increment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getPageIncrement() { - checkWidget(); - return getQScrollBar().pageStep(); - } - - /** - * Sets the amount that the receiver's value will be modified by when the - * page increment/decrement areas are selected to the argument, which must - * be at least one. - * - * @param value - * the page increment (must be greater than zero) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setPageIncrement(int value) { - checkWidget(); - if (value < 1) { - return; - } - getQScrollBar().setPageStep(value); - } - - /** - * Returns the single 'selection' that is the receiver's value. - * - * @return the selection - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelection() { - checkWidget(); - return getQScrollBar().sliderPosition(); - } - - /** - * Sets the single selection that is the receiver's value to the - * argument which must be greater than or equal to zero. - * - * @param selection - * the new selection (must be zero or greater) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(int selection) { - checkWidget(); - int min = getQScrollBar().minimum(); - if (selection < min) { - selection = min; - } else { - int max = getQScrollBar().maximum(); - if (selection > max) { - selection = max; - } - } - int value = getQScrollBar().value(); - if (value != selection) { - getQScrollBar().setSliderPosition(selection); - } - //System.out.println(this); - } - - /** - * Returns a point describing the receiver's size. The x coordinate of the - * result is the width of the receiver. The y coordinate of the result is - * the height of the receiver. - * - * @return the receiver's size - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Point getSize() { - checkWidget(); - if (!isVisible()) { - parent.updateQLayouts(); - } - return QtSWTConverter.convert(getQWidget().size()); - } - - /** - * Returns the size of the receiver's thumb relative to the difference - * between its maximum and minimum values. - * - * @return the thumb value - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ScrollBar - */ - public int getThumb() { - checkWidget(); - return getQScrollBar().pageStep(); - } - - /** - * Sets the size of the receiver's thumb relative to the difference between - * its maximum and minimum values. This new value will be ignored if it is - * less than one, and will be clamped if it exceeds the receiver's current - * range. - * - * @param value - * the new thumb value, which must be at least one and not larger - * than the size of the current range - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setThumb(int value) { - checkWidget(); - if (value < 1) { - return; - } - if (value < 1) { - return; - } - int pageStep = getQScrollBar().pageStep(); - if (value == pageStep) { - return; - } - - int qMax = getQScrollBar().maximum(); - int range = qMax + pageStep - getQScrollBar().minimum(); - if (value > range) { - value = range; - } - int newQMaximum = qMax - (value - pageStep); - if (getQScrollBar().value() > newQMaximum) { - getQScrollBar().setValue(newQMaximum); - } - - getQScrollBar().setPageStep(value); - - getQScrollBar().setMaximum(newQMaximum); - } - - /** - * Sets the receiver's selection, minimum value, maximum value, thumb, - * increment and page increment all at once. - *

- * Note: This is similar to setting the values individually using the - * appropriate methods, but may be implemented in a more efficient fashion - * on some platforms. - *

- * - * @param selection - * the new selection value - * @param minimum - * the new minimum value - * @param maximum - * the new maximum value - * @param thumb - * the new thumb value - * @param increment - * the new increment value - * @param pageIncrement - * the new pageIncrement value - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setValues(int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) { - checkWidget(); - setSelection(selection); - setMinimum(minimum); - setMaximum(maximum); - setThumb(thumb); - setIncrement(increment); - setPageIncrement(pageIncrement); - } - - /** - * Returns true if the receiver is visible, and - * false otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

- * - * @return the receiver's visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getVisible() { - checkWidget(); - return this.visible; - } - - /** - * Returns true if the receiver is visible and all of the - * receiver's ancestors are visible and false otherwise. - * - * @return the receiver's visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getVisible - */ - public boolean isVisible() { - checkWidget(); - return getQWidget().isVisible() && parent.isVisible(); - } - - /** - * Marks the receiver as visible if the argument is true, and - * marks it invisible otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

- * - * @param visible - * the new visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setVisible(boolean visible) { - checkWidget(); - if (visible == getVisible()) { - return; - } - this.visible = visible; - getQWidget().setVisible(visible); - } - - /** - * Returns true if the receiver is enabled, and - * false otherwise. A disabled control is typically not - * selectable from the user interface and draws with an inactive or "grayed" - * look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #isEnabled - */ - public boolean getEnabled() { - checkWidget(); - return enabled; - } - - /** - * Returns true if the receiver is enabled and all of the - * receiver's ancestors are enabled, and false otherwise. A - * disabled control is typically not selectable from the user interface and - * draws with an inactive or "grayed" look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getEnabled - */ - public boolean isEnabled() { - checkWidget(); - return getQWidget().isEnabled() && parent.isEnabled(); - } - - /** - * Enables the receiver if the argument is true, and disables - * it otherwise. A disabled control is typically not selectable from the - * user interface and draws with an inactive or "grayed" look. - * - * @param enabled - * the new enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setEnabled(boolean enabled) { - checkWidget(); - this.enabled = enabled; - getQWidget().setEnabled(enabled); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder("ScrollBar{"); //$NON-NLS-1$ - sb.append("orient: "); //$NON-NLS-1$ - sb.append(((style & SWT.HORIZONTAL) != 0 ? "HORI" : "VERT")); //$NON-NLS-1$ //$NON-NLS-2$ - sb.append(", selection: "); //$NON-NLS-1$ - sb.append(getSelection()); - sb.append(", minimum: "); //$NON-NLS-1$ - sb.append(getMinimum()); - sb.append(", maximum: "); //$NON-NLS-1$ - sb.append(getMaximum()); - sb.append(", thumb: "); //$NON-NLS-1$ - sb.append(getThumb()); - sb.append(", increment: "); //$NON-NLS-1$ - sb.append(getIncrement()); - sb.append(", pageIncrement: "); //$NON-NLS-1$ - sb.append(getPageIncrement()); - sb.append("}"); //$NON-NLS-1$ - return sb.toString(); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scrollable.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scrollable.java deleted file mode 100644 index a9b7b8738a..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scrollable.java +++ /dev/null @@ -1,430 +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 com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.Qt.FocusPolicy; -import com.trolltech.qt.core.Qt.ScrollBarPolicy; -import com.trolltech.qt.gui.QAbstractScrollArea; -import com.trolltech.qt.gui.QLayout; -import com.trolltech.qt.gui.QScrollArea; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QFrame.Shape; -import com.trolltech.qt.gui.QSizePolicy.Policy; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; -import org.eclipse.swt.internal.qt.StylableScrollArea; - -/** - * This class is the abstract superclass of all classes which represent controls - * that have standard scroll bars. - *
- *
Styles:
- *
H_SCROLL, V_SCROLL
- *
Events: - *
(none)
- *
- *

- * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

- * - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public abstract class Scrollable extends Control { - private ScrollBar horizontalBar; - private ScrollBar verticalBar; - private QWidget masterWidget; - private QWidget contentWidget; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Scrollable() { - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#H_SCROLL - * @see SWT#V_SCROLL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Scrollable(Composite parent, int style) { - super(parent, style); - createScrollBars(style); - } - - @Override - QWidget createQWidget(int style) { - QScrollArea scrollArea = new StylableScrollArea(); - scrollArea.setFrameShape(Shape.NoFrame); - scrollArea.setFocusPolicy(FocusPolicy.TabFocus); - scrollArea.setWidgetResizable(!isScrollingEnabled()); - setQMasterWidget(scrollArea); - - contentWidget = new QWidget(); - contentWidget.setSizePolicy(Policy.MinimumExpanding, Policy.MinimumExpanding); - contentWidget.setProperty("widgetType", "scrollareaContent"); //$NON-NLS-1$//$NON-NLS-2$ - contentWidget.setContentsMargins(0, 0, 0, 0); - contentWidget.resize(0, 0); - - scrollArea.setWidget(contentWidget); - scrollArea.resize(0, 0); - - return contentWidget; - } - - @Override - boolean isQScrollArea() { - return getQMasterWidget() instanceof QAbstractScrollArea; - } - - protected void setQMasterWidget(QWidget masterWidget) { - this.masterWidget = masterWidget; - } - - @Override - protected QWidget getQMasterWidget() { - if (masterWidget != null) { - return masterWidget; - } - return super.getQMasterWidget(); - } - - @Override - protected void updateFocusPolicy() { - super.updateFocusPolicy(); - if ((style & SWT.NO_FOCUS) != 0) { - if (isQScrollArea()) { - getQMasterWidget().setFocusPolicy(FocusPolicy.NoFocus); - } - } - } - - QAbstractScrollArea getQScrollArea() { - return (QAbstractScrollArea) getQMasterWidget(); - } - - private StylableScrollArea getStylableScrollArea() { - return (StylableScrollArea) getQMasterWidget(); - } - - private void createScrollBars(int style) { - if (isQScrollArea()) { - if ((style & SWT.H_SCROLL) != 0) { - setHBarPolicy(true); - if (horizontalBar == null) { - horizontalBar = createScrollBar(SWT.HORIZONTAL); - } - } else { - setHBarPolicy(false); - } - - if ((style & SWT.V_SCROLL) != 0) { - setVBarPolicy(true); - if (verticalBar == null) { - verticalBar = createScrollBar(SWT.VERTICAL); - } - } else { - setVBarPolicy(false); - } - } - } - - protected boolean isScrollingEnabled() { - return (style & SWT.V_SCROLL) != 0 || (style & SWT.H_SCROLL) != 0; - } - - protected void setHBarPolicy(boolean enableScrollbar) { - getQScrollArea().setHorizontalScrollBarPolicy( - enableScrollbar ? ScrollBarPolicy.ScrollBarAsNeeded : ScrollBarPolicy.ScrollBarAlwaysOff); - } - - protected void setVBarPolicy(boolean enableScrollbar) { - getQScrollArea().setVerticalScrollBarPolicy( - enableScrollbar ? ScrollBarPolicy.ScrollBarAsNeeded : ScrollBarPolicy.ScrollBarAlwaysOff); - } - - void destroyScrollBar(int type) { - if ((type & SWT.HORIZONTAL) != 0) { - style &= ~SWT.H_SCROLL; - horizontalBar.dispose(); - horizontalBar = null; - } - if ((type & SWT.VERTICAL) != 0) { - style &= ~SWT.V_SCROLL; - verticalBar.dispose(); - verticalBar = null; - } - } - - @Override - protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) { - super.setBounds(x, y, width, height, move, resize); - if (resize && contentWidget != null && isScrollingEnabled()) { // - Point prefSize = computeSize(SWT.DEFAULT, SWT.DEFAULT); - int newWidth = Math.max(width - getVerticalBarWidth(), prefSize.x); - int newHeight = Math.max(height - getHorizontalBarHeight(), prefSize.y); - QSize sizeHint = contentWidget.sizeHint(); - if (sizeHint.isValid()) { - newWidth = Math.max(newWidth, sizeHint.width()); - newHeight = Math.max(newHeight, sizeHint.height()); - } - contentWidget.resize(newWidth, newHeight); - } - } - - @Override - public Object getData(String key) { - checkWidget(); - if (key == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - - if ("__Qt_gradientStart".equals(key)) { //$NON-NLS-1$ - return Color.qt_new(display, getStylableScrollArea().getGradientStart()); - } else if ("__Qt_gradientEnd".equals(key)) { //$NON-NLS-1$ - return Color.qt_new(display, getStylableScrollArea().getGradientEnd()); - } else if ("__Qt_text".equals(key)) { //$NON-NLS-1$ - return Color.qt_new(display, getStylableScrollArea().getText()); - } else if ("__Qt_border".equals(key)) { //$NON-NLS-1$ - return Color.qt_new(display, getStylableScrollArea().getBorder()); - } - - return super.getData(key); - } - - /** - * Given a desired client area for the receiver (as described by - * the arguments), returns the bounding rectangle which would be required to - * produce that client area. - *

- * In other words, it returns a rectangle such that, if the receiver's - * bounds were set to that rectangle, the area of the receiver which is - * capable of displaying data (that is, not covered by the "trimmings") - * would be the rectangle described by the arguments (relative to the - * receiver's parent). - *

- * - * @param x - * the desired x coordinate of the client area - * @param y - * the desired y coordinate of the client area - * @param width - * the desired width of the client area - * @param height - * the desired height of the client area - * @return the required bounds to produce the given client area - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getClientArea - */ - public Rectangle computeTrim(int x, int y, int width, int height) { - checkWidget(); - int border = getBorderWidth(); - int xn = x - border; - int yn = y - border; - int widthNew = width + 2 * border; - int heightNew = height + 2 * border; - - widthNew += getVerticalBarWidth(); - - heightNew += getHorizontalBarHeight(); - - return new Rectangle(xn, yn, widthNew, heightNew); - } - - private int getVerticalBarWidth() { - ScrollBar bar = getVerticalBar(); - if (bar != null) { - return bar.getSize().x; - } - return 0; - } - - private int getHorizontalBarHeight() { - ScrollBar bar = getHorizontalBar(); - if (bar != null) { - return bar.getSize().y; - } - return 0; - } - - ScrollBar createScrollBar(int type) { - ScrollBar bar = new ScrollBar(this, type); - if ((state & CANVAS) != 0) { - bar.setMaximum(100); - bar.setThumb(10); - } - return bar; - } - - /** - * Returns a rectangle which describes the area of the receiver which is - * capable of displaying data (that is, not covered by the "trimmings"). - * - * @return the client area - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #computeTrim - */ - public Rectangle getClientArea() { - checkWidget(); - if (!isVisible()) { - updateQLayouts(); - } - - Rectangle clientArea = QtSWTConverter.convert(getQWidget().geometry()); - if (clientArea.width < 0) { - clientArea.width = DEFAULT_WIDTH; - } - if (clientArea.height < 0) { - clientArea.height = DEFAULT_HEIGHT; - } - - return clientArea; - } - - void updateQLayouts() { - if (parent != null) { - parent.updateQLayouts(); - } - updateLayoutOfQWidget(); - } - - void updateLayoutOfQWidget() { - QLayout layout = getQWidget().layout(); - if (layout != null) { - layout.activate(); - layout.update(); - } - } - - /** - * Returns the receiver's horizontal scroll bar if it has one, and null if - * it does not. - * - * @return the horizontal scroll bar (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public ScrollBar getHorizontalBar() { - checkWidget(); - return horizontalBar; - } - - /** - * Returns the receiver's vertical scroll bar if it has one, and null if it - * does not. - * - * @return the vertical scroll bar (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public ScrollBar getVerticalBar() { - checkWidget(); - return verticalBar; - } - - @Override - void releaseQWidget() { - masterWidget = null; - contentWidget = null; - super.releaseQWidget(); - } - - void releaseBar(ScrollBar bar) { - if (horizontalBar == bar) { - horizontalBar = null; - } - if (verticalBar == bar) { - verticalBar = null; - } - } - - @Override - void releaseChildren(boolean destroy) { - if (horizontalBar != null) { - horizontalBar.release(false); - horizontalBar = null; - } - if (verticalBar != null) { - verticalBar.release(false); - verticalBar = null; - } - super.releaseChildren(destroy); - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java deleted file mode 100644 index 9011fa14dd..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java +++ /dev/null @@ -1,1510 +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 com.trolltech.qt.core.QObject; -import com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.Qt.FocusPolicy; -import com.trolltech.qt.core.Qt.FocusReason; -import com.trolltech.qt.core.Qt.WindowFlags; -import com.trolltech.qt.core.Qt.WindowModality; -import com.trolltech.qt.core.Qt.WindowState; -import com.trolltech.qt.core.Qt.WindowStates; -import com.trolltech.qt.core.Qt.WindowType; -import com.trolltech.qt.gui.QDialog; -import com.trolltech.qt.gui.QMainWindow; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QScrollArea; -import com.trolltech.qt.gui.QStyle; -import com.trolltech.qt.gui.QVBoxLayout; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QWindowStateChangeEvent; -import com.trolltech.qt.gui.QFrame.Shape; -import com.trolltech.qt.gui.QSizePolicy.Policy; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ShellListener; -import org.eclipse.swt.graphics.Cursor; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.graphics.Region; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class represent the "windows" which the desktop or - * "window manager" is managing. Instances that do not have a parent (that is, - * they are built using the constructor, which takes a Display as - * the argument) are described as top level shells. Instances that do - * have a parent are described as secondary or dialog shells. - *

- * Instances are always displayed in one of the maximized, minimized or normal - * states: - *

    - *
  • - * When an instance is marked as maximized, the window manager will - * typically resize it to fill the entire visible area of the display, and the - * instance is usually put in a state where it can not be resized (even if it - * has style RESIZE) until it is no longer maximized.
  • - *
  • - * When an instance is in the normal state (neither maximized or - * minimized), its appearance is controlled by the style constants which were - * specified when it was created and the restrictions of the window manager (see - * below).
  • - *
  • - * When an instance has been marked as minimized, its contents (client - * area) will usually not be visible, and depending on the window manager, it - * may be "iconified" (that is, replaced on the desktop by a small simplified - * representation of itself), relocated to a distinguished area of the screen, - * or hidden. Combinations of these changes are also possible.
  • - *
- *

- *

- * The modality of an instance may be specified using style bits. The - * modality style bits are used to determine whether input is blocked for other - * shells on the display. The PRIMARY_MODAL style allows an - * instance to block input to its parent. The APPLICATION_MODAL - * style allows an instance to block input to every other shell in the display. - * The SYSTEM_MODAL style allows an instance to block input to all - * shells, including shells belonging to different applications. - *

- *

- * Note: The styles supported by this class are treated as HINTs, since - * the window manager for the desktop on which the instance is visible has - * ultimate control over the appearance and behavior of decorations and - * modality. For example, some window managers only support resizable windows - * and will always assume the RESIZE style, even if it is not set. In addition, - * if a modality style is not supported, it is "upgraded" to a more restrictive - * modality style that is supported. For example, if PRIMARY_MODAL - * is not supported, it would be upgraded to APPLICATION_MODAL. A - * modality style may also be "downgraded" to a less restrictive style. For - * example, most operating systems no longer support SYSTEM_MODAL - * because it can freeze up the desktop, so this is typically downgraded to - * APPLICATION_MODAL. - *

- *
Styles:
- *
BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL
- *
APPLICATION_MODAL, MODELESS, PRIMARY_MODAL, SYSTEM_MODAL
- *
Events:
- *
Activate, Close, Deactivate, Deiconify, Iconify
- *
- * Class SWT provides two "convenience constants" for the most - * commonly required style combinations: - *
- *
SHELL_TRIM
- *
- * the result of combining the constants which are required to produce a typical - * application top level shell: (that is, - * CLOSE | TITLE | MIN | MAX | RESIZE)
- *
DIALOG_TRIM
- *
- * the result of combining the constants which are required to produce a typical - * application dialog shell: (that is, TITLE | CLOSE | BORDER)
- *
- *

- *

- * Note: Only one of the styles APPLICATION_MODAL, MODELESS, PRIMARY_MODAL and - * SYSTEM_MODAL may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Decorations - * @see SWT - * @see Shell snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - */ -public class Shell extends Decorations { - Menu activeMenu; - boolean fullScreen, wasMaximized, modified; - Control lastActive; - private QMainWindow mainWindow; - private QDialog dialogWindow; - private QStyle oldStyle; - - /** - * Constructs a new instance of this class. This is equivalent to calling - * Shell((Display) null). - * - * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- */ - public Shell() { - this((Display) null); - } - - /** - * Constructs a new instance of this class given only the style value - * describing its behavior and appearance. This is equivalent to calling - * Shell((Display) null, style). - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param style - * the style of control to construct - * - * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#BORDER - * @see SWT#CLOSE - * @see SWT#MIN - * @see SWT#MAX - * @see SWT#RESIZE - * @see SWT#TITLE - * @see SWT#TOOL - * @see SWT#NO_TRIM - * @see SWT#SHELL_TRIM - * @see SWT#DIALOG_TRIM - * @see SWT#MODELESS - * @see SWT#PRIMARY_MODAL - * @see SWT#APPLICATION_MODAL - * @see SWT#SYSTEM_MODAL - */ - public Shell(int style) { - this((Display) null, style); - } - - /** - * Constructs a new instance of this class given only the display to create - * it on. It is created with style SWT.SHELL_TRIM. - *

- * Note: Currently, null can be passed in for the display argument. This has - * the effect of creating the shell on the currently active display if there - * is one. If there is no current display, the shell is created on a - * "default" display. Passing in null as the display argument is not - * considered to be good coding style, and may not be supported in a future - * release of SWT. - *

- * - * @param display - * the display to create the shell on - * - * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- */ - public Shell(Display display) { - this(display, SWT.SHELL_TRIM); - } - - /** - * Constructs a new instance of this class given the display to create it on - * and a style value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- *

- * Note: Currently, null can be passed in for the display argument. This has - * the effect of creating the shell on the currently active display if there - * is one. If there is no current display, the shell is created on a - * "default" display. Passing in null as the display argument is not - * considered to be good coding style, and may not be supported in a future - * release of SWT. - *

- * - * @param display - * the display to create the shell on - * @param style - * the style of control to construct - * - * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#BORDER - * @see SWT#CLOSE - * @see SWT#MIN - * @see SWT#MAX - * @see SWT#RESIZE - * @see SWT#TITLE - * @see SWT#TOOL - * @see SWT#NO_TRIM - * @see SWT#SHELL_TRIM - * @see SWT#DIALOG_TRIM - * @see SWT#MODELESS - * @see SWT#PRIMARY_MODAL - * @see SWT#APPLICATION_MODAL - * @see SWT#SYSTEM_MODAL - */ - public Shell(Display display, int style) { - this(display, null, style, false); - } - - Shell(Display display, Shell parent, int style, boolean embedded) { - super(); - checkSubclass(); - if (display == null) { - display = Display.getCurrent(); - } - if (display == null) { - display = Display.getDefault(); - } - if (!display.isValidThread()) { - error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - if (parent != null && parent.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.style = checkStyle(style); - this.parent = parent; - this.display = display; - // if (handle != 0 && !embedded) { - // state |= FOREIGN_HANDLE; - // } - createWidget(parent, style); - } - - /** - * Constructs a new instance of this class given only its parent. It is - * created with style SWT.DIALOG_TRIM. - *

- * Note: Currently, null can be passed in for the parent. This has the - * effect of creating the shell on the currently active display if there is - * one. If there is no current display, the shell is created on a "default" - * display. Passing in null as the parent is not considered to be good - * coding style, and may not be supported in a future release of SWT. - *

- * - * @param parent - * a shell which will be the parent of the new instance - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the parent is disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- */ - public Shell(Shell parent) { - this(parent, SWT.DIALOG_TRIM); - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- *

- * Note: Currently, null can be passed in for the parent. This has the - * effect of creating the shell on the currently active display if there is - * one. If there is no current display, the shell is created on a "default" - * display. Passing in null as the parent is not considered to be good - * coding style, and may not be supported in a future release of SWT. - *

- * - * @param parent - * a shell which will be the parent of the new instance - * @param style - * the style of control to construct - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the parent is disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#BORDER - * @see SWT#CLOSE - * @see SWT#MIN - * @see SWT#MAX - * @see SWT#RESIZE - * @see SWT#TITLE - * @see SWT#NO_TRIM - * @see SWT#SHELL_TRIM - * @see SWT#DIALOG_TRIM - * @see SWT#ON_TOP - * @see SWT#TOOL - * @see SWT#MODELESS - * @see SWT#PRIMARY_MODAL - * @see SWT#APPLICATION_MODAL - * @see SWT#SYSTEM_MODAL - */ - public Shell(Shell parent, int style) { - this(parent != null ? parent.display : null, parent, style, false); - } - - @Override - QWidget createQWidget(int style) { - QScrollArea scrollArea; - if (parent == null) { - // new window - mainWindow = new QMainWindow(null, createWindowFlags(style)); - scrollArea = new QScrollArea(mainWindow); - mainWindow.setCentralWidget(scrollArea); - } else { - // new dialog - dialogWindow = new QDialog(parent.getQWidget(), createWindowFlags(style)); - scrollArea = new QScrollArea(dialogWindow); - - QVBoxLayout layout = new QVBoxLayout(dialogWindow); - layout.addWidget(scrollArea); - layout.setContentsMargins(0, 0, 0, 0); - } - - scrollArea.setFrameShape(Shape.NoFrame); - scrollArea.setContentsMargins(0, 0, 0, 0); - scrollArea.setWidgetResizable(true); - setQMasterWidget(scrollArea); - - QWidget contentWidget = new QWidget(); - contentWidget.setProperty("widgetType", "scrollareaContent"); //$NON-NLS-1$ //$NON-NLS-2$ - contentWidget.setSizePolicy(Policy.MinimumExpanding, Policy.MinimumExpanding); - contentWidget.setContentsMargins(0, 0, 0, 0); - contentWidget.resize(0, 0); - scrollArea.setWidget(contentWidget); - - scrollArea.resize(0, 0); - - int policy = getWindowControl().focusPolicy().value() & ~FocusPolicy.ClickFocus.value(); - getWindowControl().setFocusPolicy(FocusPolicy.resolve(policy)); - - state |= CANVAS; - - return scrollArea.widget(); - } - - private WindowFlags createWindowFlags(int style) { - int flags = parent == null ? WindowType.Window.value() : WindowType.Dialog.value() - | WindowModality.WindowModal.value(); - flags |= WindowType.CustomizeWindowHint.value(); - if ((style & SWT.CLOSE) != 0) { - flags |= WindowType.WindowSystemMenuHint.value() | WindowType.WindowCloseButtonHint.value(); - } - if ((style & SWT.MIN) != 0) { - flags |= WindowType.WindowMinimizeButtonHint.value(); - } - if ((style & SWT.MAX) != 0) { - flags |= WindowType.WindowMaximizeButtonHint.value(); - } - if ((style & SWT.NO_TRIM) != 0) { - flags |= WindowType.FramelessWindowHint.value(); - } - if ((style & SWT.TITLE) != 0) { - flags |= WindowType.WindowTitleHint.value(); - } - if ((style & SWT.ON_TOP) != 0) { - flags |= WindowType.WindowStaysOnTopHint.value(); - } - return new WindowFlags(flags); - } - - @Override - protected void setupQWidget() { - getWindowControl().adjustSize(); - // no setup - } - - @Override - void registerQWidget() { - super.registerQWidget(); - display.addControl(getWindowControl(), this); - } - - @Override - void deregisterQWidget() { - display.removeControl(getWindowControl()); - super.deregisterQWidget(); - } - - @Override - protected QWidget getQMasterWidget() { - return getWindowControl(); - } - - @Override - QWidget getMenuContainer() { - return getWindowControl(); - } - - QDialog getQDialog() { - return dialogWindow; - } - - boolean isDialog() { - return dialogWindow != null; - } - - @Override - public void setStyleSheet(String style) { - if (style == null || style.trim().length() == 0) { - getWindowControl().setStyleSheet(null); - if (oldStyle != null) { - getWindowControl().setStyle(oldStyle); - oldStyle = null; - } - } else { - oldStyle = getWindowControl().style(); - getWindowControl().setStyleSheet(style); - } - updateLayout(); - } - - @Override - public void updateStyleSheet() { - if (null != getWindowControl().style()) { - getWindowControl().setStyle(getWindowControl().style()); - updateLayout(); - } - } - - @Override - protected QWidget getWindowControl() { - return mainWindow != null ? mainWindow : dialogWindow; - } - - /** - * Invokes platform specific functionality to allocate a new shell that is - * embedded. - *

- * IMPORTANT: This method is not part of the public API for - * Shell. It is marked public only so that it can be shared - * within the packages provided by SWT. It is not available on all - * platforms, and should never be called from application code. - *

- * - * @param display - * the display for the shell - * @param qMetrics - * the handle for the shell - * @return a new shell object containing the specified display and handle - */ - public static Shell qt_new(Display display) { - return new Shell(display, null, SWT.NO_TRIM, true); - } - - static int checkStyle(int style) { - style = Decorations.checkStyle(style); - style &= ~SWT.TRANSPARENT; - int mask = SWT.SYSTEM_MODAL | SWT.APPLICATION_MODAL | SWT.PRIMARY_MODAL; - int bits = style & ~mask; - if ((style & SWT.SYSTEM_MODAL) != 0) { - return bits | SWT.SYSTEM_MODAL; - } - if ((style & SWT.APPLICATION_MODAL) != 0) { - return bits | SWT.APPLICATION_MODAL; - } - if ((style & SWT.PRIMARY_MODAL) != 0) { - return bits | SWT.PRIMARY_MODAL; - } - return bits; - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when operations are performed on the receiver, by sending the listener - * one of the messages defined in the ShellListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ShellListener - * @see #removeShellListener - */ - public void addShellListener(ShellListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Close, typedListener); - addListener(SWT.Iconify, typedListener); - addListener(SWT.Deiconify, typedListener); - addListener(SWT.Activate, typedListener); - addListener(SWT.Deactivate, typedListener); - } - - /** - * Requests that the window manager close the receiver in the same way it - * would be closed when the user clicks on the "close box" or performs some - * other platform specific key or mouse combination that indicates the - * window should be removed. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#Close - * @see #dispose - */ - public void close() { - checkWidget(); - closeWidget(); - } - - @Override - void enableWidget(boolean enabled) { - Control oldFocus = display.getFocusControl(); - super.enableWidget(enabled); - if (enabled) { - _update(); - } else { - - // All children were looped through and disabled by QWidget unless - // they - // were explicitly disabled. SWT behavior is not to disable the - // dialog - // Shells so we have to restore their states. - Shell shells[] = getShells(); - for (int i = 0; i < shells.length; ++i) { - if (shells[i].parent == this) { - if (shells[i].getEnabled()) { - shells[i].getQWidget().setEnabled(true); - } - } - } - // Because dialog Shell might have been temporarily disabled the - // focus might - // have been lost and must be restored. - if (oldFocus != null) { - oldFocus.menuShell().restoreFocus(); - } - } - } - - @Override - Control findBackgroundControl() { - return background != null || backgroundImage != null ? this : null; - } - - @Override - Cursor findCursor() { - return cursor; - } - - @Override - Control findThemeControl() { - return null; - } - - void fixShell(Shell newShell, Control control) { - if (this == newShell) { - return; - } - if (control == lastActive) { - setActiveControl(null); - } - } - - /** - * If the receiver is visible, moves it to the top of the drawing order for - * the display on which it was created (so that all other shells on that - * display, which are not the receiver's children will be drawn behind it) - * and forces the window manager to make the shell active. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - * @see Control#moveAbove - * @see Control#setFocus - * @see Control#setVisible - * @see Display#getActiveShell - * @see Decorations#setDefaultButton(Button) - * @see Shell#open - * @see Shell#setActive - */ - public void forceActive() { - checkWidget(); - if (!isVisible()) { - return; - } - bringToTop(); - } - - void forceResize() { - /* Do nothing */ - } - - /** - * Returns the receiver's alpha value. The alpha value is between 0 - * (transparent) and 255 (opaque). - * - * @return the alpha value - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public int getAlpha() { - checkWidget(); - double opacity = getQWidget().windowOpacity(); - return (int) (255 * opacity); - } - - @Override - public Rectangle getBounds() { - checkWidget(); - QPoint pos = getWindowControl().pos(); - QSize size = getWindowControl().size(); - return new Rectangle(pos.x(), pos.y(), size.width(), size.height()); - } - - @Override - public Rectangle getClientArea() { - checkWidget(); - if (!isVisible()) { - updateQLayouts(); - } - - Rectangle clientArea = QtSWTConverter.convert(getQWidget().rect()); - if (clientArea.width < 0) { - clientArea.width = 0; - } - if (clientArea.height < 0) { - clientArea.height = 0; - } - - return clientArea; - } - - /** - * Returns true if the receiver is currently in fullscreen - * state, and false otherwise. - *

- * - * @return the fullscreen state - * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public boolean getFullScreen() { - checkWidget(); - return fullScreen; - } - - /** - * Returns the receiver's input method editor mode. This will be the result - * of bitwise OR'ing together one or more of the following constants defined - * in class SWT: NONE, ROMAN, - * DBCS, PHONETIC, NATIVE, - * ALPHA. - * - * @return the IME mode - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT - */ - public int getImeInputMode() { - checkWidget(); - // TODO how to do it with Qt? - return SWT.NONE; - } - - @Override - public Point getLocation() { - checkWidget(); - if (getWindowControl().isMinimized()) { - return super.getLocation(); - } - return QtSWTConverter.convert(getWindowControl().pos()); - } - - @Override - public boolean getMaximized() { - checkWidget(); - return !fullScreen && super.getMaximized(); - } - - /** - * Returns a point describing the minimum receiver's size. The x coordinate - * of the result is the minimum width of the receiver. The y coordinate of - * the result is the minimum height of the receiver. - * - * @return the receiver's size - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public Point getMinimumSize() { - checkWidget(); - return QtSWTConverter.convert(getWindowControl().minimumSize()); - } - - /** - * Gets the receiver's modified state. - * - * - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.5 - */ - public boolean getModified() { - checkWidget(); - return modified; - } - - /** - * Returns the region that defines the shape of the shell, or null if the - * shell has the default shape. - * - * @return the region that defines the shape of the shell (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - * - */ - @Override - public Region getRegion() { - /* This method is needed for the @since 3.0 Javadoc */ - checkWidget(); - return region; - } - - @Override - public Shell getShell() { - checkWidget(); - return this; - } - - @Override - public Point getSize() { - checkWidget(); - return QtSWTConverter.convert(getWindowControl().size()); - } - - /** - * Returns an array containing all shells which are descendants of the - * receiver. - *

- * - * @return the dialog shells - * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public Shell[] getShells() { - checkWidget(); - int count = 0; - Shell[] shells = display.getShells(); - for (int i = 0; i < shells.length; i++) { - Control shell = shells[i]; - do { - shell = shell.parent; - } while (shell != null && shell != this); - if (shell == this) { - count++; - } - } - int index = 0; - Shell[] result = new Shell[count]; - for (int i = 0; i < shells.length; i++) { - Control shell = shells[i]; - do { - shell = shell.parent; - } while (shell != null && shell != this); - if (shell == this) { - result[index++] = shells[i]; - } - } - return result; - } - - /** - * Returns the instance of the ToolBar object representing the tool bar that can appear on the - * trim of the shell. This will return null if the platform does not support tool bars that - * not part of the content area of the shell, or if the style of the shell does not support a - * tool bar. - *

- * - * @return a ToolBar object representing the window's tool bar or null. - * - * @exception SWTException

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  • - *
- * - * @since 3.7 - */ - public ToolBar getToolBar() { - return null; - } - - @Override - protected Composite findDeferredControl() { - return layoutCount > 0 ? this : null; - } - - // @Override - // public boolean isEnabled() { - // checkWidget(); - // return getEnabled(); - //} - - /** - * Moves the receiver to the top of the drawing order for the display on - * which it was created (so that all other shells on that display, which are - * not the receiver's children will be drawn behind it), marks it visible, - * sets the focus and asks the window manager to make the shell active. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Control#moveAbove - * @see Control#setFocus - * @see Control#setVisible - * @see Display#getActiveShell - * @see Decorations#setDefaultButton(Button) - * @see Shell#setActive - * @see Shell#forceActive - */ - public void open() { - checkWidget(); - updateLayout(); - setVisible(true); - bringToTop(); - if (isDisposed()) { - return; - } - if (!restoreFocus() && !traverseGroup(true)) { - setFocus(FocusReason.OtherFocusReason); - } - } - - @Override - public boolean print(GC gc) { - checkWidget(); - if (gc == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (gc.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - //TODO - return false; - } - - @Override - void releaseChildren(boolean destroy) { - Shell[] shells = getShells(); - for (int i = 0; i < shells.length; i++) { - Shell shell = shells[i]; - if (shell != null && !shell.isDisposed()) { - shell.release(false); - } - } - super.releaseChildren(destroy); - } - - @Override - void releaseParent() { - /* Do nothing */ - } - - @Override - void releaseQWidget() { - getWindowControl().close(); - super.releaseQWidget(); - mainWindow = null; - dialogWindow = null; - } - - @Override - void releaseWidget() { - super.releaseWidget(); - lastActive = null; - } - - @Override - void removeMenu(Menu menu) { - super.removeMenu(menu); - if (menu == activeMenu) { - activeMenu = null; - } - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when operations are performed on the receiver. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ShellListener - * @see #addShellListener - */ - public void removeShellListener(ShellListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Close, listener); - eventTable.unhook(SWT.Iconify, listener); - eventTable.unhook(SWT.Deiconify, listener); - eventTable.unhook(SWT.Activate, listener); - eventTable.unhook(SWT.Deactivate, listener); - } - - /** - * If the receiver is visible, moves it to the top of the drawing order for - * the display on which it was created (so that all other shells on that - * display, which are not the receiver's children will be drawn behind it) - * and asks the window manager to make the shell active - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - * @see Control#moveAbove - * @see Control#setFocus - * @see Control#setVisible - * @see Display#getActiveShell - * @see Decorations#setDefaultButton(Button) - * @see Shell#open - * @see Shell#setActive - */ - public void setActive() { - checkWidget(); - if (!isVisible()) { - return; - } - bringToTop(); - // widget could be disposed at this point - } - - void setActiveControl(Control control) { - if (control != null && control.isDisposed()) { - control = null; - } - if (lastActive != null && lastActive.isDisposed()) { - lastActive = null; - } - if (lastActive == control) { - return; - } - - /* - * Compute the list of controls to be activated and deactivated by - * finding the first common parent control. - */ - Control[] activate = control == null ? new Control[0] : control.getPath(); - Control[] deactivate = lastActive == null ? new Control[0] : lastActive.getPath(); - lastActive = control; - int index = 0, length = Math.min(activate.length, deactivate.length); - while (index < length) { - if (activate[index] != deactivate[index]) { - break; - } - index++; - } - - /* - * It is possible (but unlikely), that application code could have - * destroyed some of the widgets. If this happens, keep processing those - * widgets that are not disposed. - */ - for (int i = deactivate.length - 1; i >= index; --i) { - if (!deactivate[i].isDisposed()) { - deactivate[i].sendEvent(SWT.Deactivate); - } - } - for (int i = activate.length - 1; i >= index; --i) { - if (!activate[i].isDisposed()) { - activate[i].sendEvent(SWT.Activate); - } - } - } - - /** - * Sets the receiver's alpha value which must be between 0 (transparent) and - * 255 (opaque). - *

- * This operation requires the operating system's advanced widgets subsystem - * which may not be available on some platforms. - *

- * - * @param alpha - * the alpha value - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public void setAlpha(int alpha) { - checkWidget(); - if (alpha < 0 || alpha > 255) { - return; - } - getQWidget().setWindowOpacity((double) alpha / 255); - } - - @Override - protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) { - if (fullScreen) { - setFullScreen(false); - } - - Rectangle geometry = QtSWTConverter.convert(getWindowControl().frameGeometry()); - if (move) { - int oldX = geometry.x; - int oldY = geometry.y; - boolean moved = oldX != x || oldY != y; - if (moved) { - getWindowControl().move(x, y); - } - } - - if (resize) { - int oldW = geometry.width; - int oldH = geometry.height; - boolean resized = oldW != width || oldH != height; - - if (resized) { - if ((style & SWT.RESIZE) == 0) { - unlockSize(); - } - - getWindowControl().resize(width, height); - - if ((style & SWT.RESIZE) == 0) { - getWindowControl().setFixedSize(Math.max(0, width), Math.max(0, height)); - } - } - } - } - - @Override - public void setEnabled(boolean enabled) { - checkWidget(); - if (super.getEnabled() == enabled) { - return; - } - super.setEnabled(enabled); - if (enabled && getWindowControl().isActiveWindow()) { - if (!restoreFocus()) { - traverseGroup(true); - } - } - } - - /** - * Sets the full screen state of the receiver. If the argument is - * true causes the receiver to switch to the full screen state, - * and if the argument is false and the receiver was previously - * switched into full screen state, causes the receiver to switch back to - * either the maximmized or normal states. - *

- * Note: The result of intermixing calls to setFullScreen(true), setMaximized(true) and setMinimized(true) - * will vary by platform. Typically, the behavior will match the platform - * user's expectations, but not always. This should be avoided if possible. - *

- * - * @param fullScreen - * the new fullscreen state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public void setFullScreen(boolean fullScreen) { - checkWidget(); - if (this.fullScreen == fullScreen) { - return; - } - this.fullScreen = fullScreen; - if (fullScreen) { - getWindowControl().showFullScreen(); - } else { - getWindowControl().showNormal(); - } - } - - /** - * Sets the input method editor mode to the argument which should be the - * result of bitwise OR'ing together one or more of the following constants - * defined in class SWT: NONE, ROMAN, - * DBCS, PHONETIC, NATIVE, - * ALPHA. - * - * @param mode - * the new IME mode - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT - */ - public void setImeInputMode(int mode) { - checkWidget(); - // TODO - } - - /** - * Sets the receiver's minimum size to the size specified by the arguments. - * If the new minimum size is larger than the current size of the receiver, - * the receiver is resized to the new minimum size. - * - * @param width - * the new minimum width for the receiver - * @param height - * the new minimum height for the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setMinimumSize(int width, int height) { - checkWidget(); - getQWidget().setMinimumSize(width, height); - } - - /** - * Sets the receiver's minimum size to the size specified by the argument. - * If the new minimum size is larger than the current size of the receiver, - * the receiver is resized to the new minimum size. - * - * @param size - * the new minimum size for the receiver - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the point is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setMinimumSize(Point size) { - checkWidget(); - if (size == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setMinimumSize(size.x, size.y); - } - - /** - * Sets the receiver's modified state as specified by the argument. - * - * @param modified - * the new modified state for the receiver - * - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.5 - */ - public void setModified(boolean modified) { - checkWidget(); - this.modified = modified; - } - - /** - * Sets the shape of the shell to the region specified by the argument. When - * the argument is null, the default shape of the shell is restored. The - * shell must be created with the style SWT.NO_TRIM in order to specify a - * region. - * - * @param region - * the region that defines the shape of the shell (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the region has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - * - */ - @Override - public void setRegion(Region region) { - checkWidget(); - if ((style & SWT.NO_TRIM) == 0) { - return; - } - super.setRegion(region); - } - - @Override - public void setVisible(boolean visible) { - checkWidget(); - int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL; - if ((style & mask) != 0) { - if (visible) { - display.setModalShell(this); - if ((style & (SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL)) != 0) { - display.setModalDialog(null); - } - Control control = display.getFocusControl(); - if (control != null && !control.isActive()) { - bringToTop(); - if (isDisposed()) { - return; - } - } - getWindowControl().setWindowModality(getModalityFromStyle()); - QWidget mouseGrabber = QWidget.mouseGrabber(); - if (mouseGrabber != null) { - mouseGrabber.releaseMouse(); - } - } else { - display.clearModal(this); - } - } else { - updateModal(); - } - - _setVisible(getWindowControl(), visible); - } - - private WindowModality getModalityFromStyle() { - if ((style & SWT.SYSTEM_MODAL) != 0) { - return WindowModality.ApplicationModal; - } - if ((style & SWT.APPLICATION_MODAL) != 0) { - return WindowModality.ApplicationModal; - } - if ((style & SWT.PRIMARY_MODAL) != 0) { - return WindowModality.ApplicationModal; - } - return WindowModality.NonModal; - } - - @Override - boolean traverseEscape() { - if (parent == null) { - return false; - } - if (!isVisible() || !isEnabled()) { - return false; - } - close(); - return true; - } - - void updateModal() { - } - - @Override - public boolean qtCloseEvent() { - return closeWidget(); - } - - @Override - public boolean qtWindowStateChangeEvent(QObject source, QWindowStateChangeEvent event) { - if (source != getWindowControl()) { - return false; - } - WindowStates oldState = event.oldState(); - WindowStates newState = getWindowControl().windowState(); - if (oldState.isSet(WindowState.WindowMinimized) && !newState.isSet(WindowState.WindowMinimized)) { - sendEvent(SWT.Deiconify); - return false; - } - if (!oldState.isSet(WindowState.WindowMinimized) && newState.isSet(WindowState.WindowMinimized)) { - sendEvent(SWT.Iconify); - menuShell().saveFocus(); - return false; - } - return false; - } - - @Override - public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) { - if (source == getQWidget()) { - QWidget clickTarget = getQWidget().childAt(mouseEvent.x(), mouseEvent.y()); - if (clickTarget != null && clickTarget != getQWidget()) { - Widget swtControl = display.findControl(clickTarget); - if (swtControl instanceof Control) { - setActiveControl((Control) swtControl); - } - } - } - return false; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Slider.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Slider.java deleted file mode 100644 index b85060a66c..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Slider.java +++ /dev/null @@ -1,632 +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 com.trolltech.qt.core.Qt.FocusPolicy; -import com.trolltech.qt.core.Qt.Orientation; -import com.trolltech.qt.gui.QAbstractSlider; -import com.trolltech.qt.gui.QScrollBar; -import com.trolltech.qt.gui.QWidget; - -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.Point; - -/** - * Instances of this class are selectable user interface objects that represent - * a range of positive, numeric values. - *

- * At any given moment, a given slider will have a single 'selection' that is - * considered to be its value, which is constrained to be within the range of - * values the slider represents (that is, between its minimum and - * maximum values). - *

- *

- * Typically, sliders will be made up of five areas: - *

    - *
  1. an arrow button for decrementing the value
  2. - *
  3. a page decrement area for decrementing the value by a larger amount
  4. - *
  5. a thumb for modifying the value by mouse dragging
  6. - *
  7. a page increment area for incrementing the value by a larger amount
  8. - *
  9. an arrow button for incrementing the value
  10. - *
- * Based on their style, sliders are either HORIZONTAL (which have - * a left facing button for decrementing the value and a right facing button for - * incrementing it) or VERTICAL (which have an upward facing button - * for decrementing the value and a downward facing buttons for incrementing - * it). - *

- *

- * On some platforms, the size of the slider's thumb can be varied relative to - * the magnitude of the range of values it represents (that is, relative to the - * difference between its maximum and minimum values). Typically, this is used - * to indicate some proportional value such as the ratio of the visible area of - * a document to the total amount of space that it would take to display it. SWT - * supports setting the thumb size even if the underlying platform does not, but - * in this case the appearance of the slider will not change. - *

- *
- *
Styles:
- *
HORIZONTAL, VERTICAL
- *
Events:
- *
Selection
- *
- *

- * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see ScrollBar - * @see Slider - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class Slider extends Control { - - private int thumb; // TODO Not supported by Qt? - private int maximum; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#HORIZONTAL - * @see SWT#VERTICAL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Slider(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected void connectSignals() { - getQScrollBar().actionTriggered.connect(this, "actionTriggered(int)"); //$NON-NLS-1$ - getQScrollBar().rangeChanged.connect(this, "rangeChanged(int,int)"); //$NON-NLS-1$ - getQScrollBar().sliderMoved.connect(this, "sliderMoved(int)"); //$NON-NLS-1$ - getQScrollBar().sliderPressed.connect(this, "sliderPressed()"); //$NON-NLS-1$ - getQScrollBar().sliderReleased.connect(this, "sliderReleased()"); //$NON-NLS-1$ - getQScrollBar().valueChanged.connect(this, "valueChanged(int)"); //$NON-NLS-1$ - } - - protected void actionTriggered(int action) { - System.out.println("actionTriggered :" + action + " " + getQScrollBar().value()); //$NON-NLS-1$//$NON-NLS-2$ - Event event = new Event(); - if (action == QAbstractSlider.SliderAction.SliderToMinimum.value()) { - event.detail = SWT.HOME; - } else if (action == QAbstractSlider.SliderAction.SliderToMaximum.value()) { - event.detail = SWT.END; - } else if (action == QAbstractSlider.SliderAction.SliderSingleStepAdd.value()) { - event.detail = SWT.ARROW_DOWN; - } else if (action == QAbstractSlider.SliderAction.SliderSingleStepSub.value()) { - event.detail = SWT.ARROW_UP; - } else if (action == QAbstractSlider.SliderAction.SliderPageStepAdd.value()) { - event.detail = SWT.PAGE_UP; - } else if (action == QAbstractSlider.SliderAction.SliderPageStepSub.value()) { - event.detail = SWT.PAGE_DOWN; - } else if (action == QAbstractSlider.SliderAction.SliderMove.value()) { - event.detail = SWT.DRAG; - } else { - return; - } - // see actionTrigger signal - getQScrollBar().setValue(getQScrollBar().sliderPosition()); - sendEvent(SWT.Selection, event); - } - - protected void rangeChanged(int min, int max) { - System.out.println("rangeChanged :" + min + ", " + max); //$NON-NLS-1$ //$NON-NLS-2$ - } - - protected void sliderMoved(int pos) { - System.out.println("sliderMoved :" + pos); //$NON-NLS-1$ - } - - protected void sliderPressed() { - System.out.println("sliderPressed"); //$NON-NLS-1$ - } - - protected void sliderReleased() { - System.out.println("sliderReleased"); //$NON-NLS-1$ - Event event = new Event(); - event.detail = SWT.NONE; - sendEvent(SWT.Selection, event); - } - - protected void valueChanged(int value) { - System.out.println("valueChanged :" + value); //$NON-NLS-1$ - } - - @Override - protected QWidget createQWidget(int style) { - final Orientation orientation = (style & SWT.HORIZONTAL) != 0 ? Orientation.Horizontal : Orientation.Vertical; - return new QScrollBar(orientation); - } - - @Override - protected void setupQWidget() { - super.setupQWidget(); - getQScrollBar().setFocusPolicy(FocusPolicy.WheelFocus); - setThumb(10); - setMinimum(0); - setMaximum(100); - setIncrement(1); - setPageIncrement(10); - } - - QAbstractSlider getQScrollBar() { - return (QAbstractSlider) getQWidget(); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the user changes the receiver's value, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * When widgetSelected is called, the event object detail field - * contains one of the following values: SWT.NONE - for the end - * of a drag. SWT.DRAG. SWT.HOME. - * SWT.END. SWT.ARROW_DOWN. - * SWT.ARROW_UP. SWT.PAGE_DOWN. - * SWT.PAGE_UP. widgetDefaultSelected is not - * called. - *

- * - * @param listener - * the listener which should be notified when the user changes - * the receiver's value - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - static int checkStyle(int style) { - return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0); - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - int border = getBorderWidth(); - int width = border * 2; - int height = border * 2; - // default size: this is just the two arrows + thumb - Point defaultSize = super.computeSize(wHint, hHint, changed); - if ((style & SWT.HORIZONTAL) != 0) { - width += defaultSize.y * 10; - height += defaultSize.y; - } else { - width += defaultSize.x; - height += defaultSize.x * 10; - } - if (wHint != SWT.DEFAULT) { - width = wHint + border * 2; - } - if (hHint != SWT.DEFAULT) { - height = hHint + border * 2; - } - return new Point(width, height); - } - - // TODO Is this ok? - - // int defaultBackground() { - // return OS.GetSysColor(OS.COLOR_SCROLLBAR); - // } - // - // int defaultForeground() { - // return OS.GetSysColor(OS.COLOR_BTNFACE); - // } - - /** - * Returns the amount that the receiver's value will be modified by when the - * up/down (or right/left) arrows are pressed. - * - * @return the increment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getIncrement() { - checkWidget(); - return getQScrollBar().singleStep(); - } - - /** - * Returns the maximum value which the receiver will allow. - * - * @return the maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMaximum() { - checkWidget(); - return maximum; - } - - /** - * Returns the minimum value which the receiver will allow. - * - * @return the minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMinimum() { - checkWidget(); - return getQScrollBar().minimum(); - } - - /** - * Returns the amount that the receiver's value will be modified by when the - * page increment/decrement areas are selected. - * - * @return the page increment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getPageIncrement() { - checkWidget(); - return getQScrollBar().pageStep(); - } - - /** - * Returns the 'selection', which is the receiver's value. - * - * @return the selection - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelection() { - checkWidget(); - return getQScrollBar().value(); - } - - /** - * Returns the size of the receiver's thumb relative to the difference - * between its maximum and minimum values. - * - * @return the thumb value - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getThumb() { - checkWidget(); - return thumb; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the user changes the receiver's value. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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 amount that the receiver's value will be modified by when the - * up/down (or right/left) arrows are pressed to the argument, which must be - * at least one. - * - * @param value - * the new increment (must be greater than zero) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setIncrement(int value) { - checkWidget(); - if (value < 1) { - return; - } - getQScrollBar().setSingleStep(value); - } - - /** - * Sets the maximum. If this value is negative or less than or equal to the - * minimum, the value is ignored. If necessary, first the thumb and then the - * selection are adjusted to fit within the new range. - * - * @param value - * the new maximum, which must be greater than the current - * minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMaximum(int value) { - checkWidget(); - if (value < 0 || value <= getQScrollBar().minimum()) { - return; - } - maximum = value; - getQScrollBar().setMaximum(maximum - thumb); - } - - /** - * Sets the minimum value. If this value is negative or greater than or - * equal to the maximum, the value is ignored. If necessary, first the thumb - * and then the selection are adjusted to fit within the new range. - * - * @param value - * the new minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMinimum(int value) { - checkWidget(); - if (value < 0 || value >= getQScrollBar().maximum()) { - return; - } - getQScrollBar().setMinimum(value); - } - - /** - * Sets the amount that the receiver's value will be modified by when the - * page increment/decrement areas are selected to the argument, which must - * be at least one. - * - * @param value - * the page increment (must be greater than zero) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setPageIncrement(int value) { - checkWidget(); - if (value < 1) { - return; - } - getQScrollBar().setPageStep(value); - } - - /** - * Sets the 'selection', which is the receiver's value, to the argument - * which must be greater than or equal to zero. - * - * @param value - * the new selection (must be zero or greater) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(int value) { - checkWidget(); - getQScrollBar().setValue(value); - } - - /** - * Sets the size of the receiver's thumb relative to the difference between - * its maximum and minimum values. This new value will be ignored if it is - * less than one, and will be clamped if it exceeds the receiver's current - * range. - * - * @param value - * the new thumb value, which must be at least one and not larger - * than the size of the current range - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setThumb(int value) { - checkWidget(); - if (value < 1) { - return; - } - this.thumb = value; - setMaximum(maximum); // adjust the maximum which depends on the thumb - } - - /** - * Sets the receiver's selection, minimum value, maximum value, thumb, - * increment and page increment all at once. - *

- * Note: This is similar to setting the values individually using the - * appropriate methods, but may be implemented in a more efficient fashion - * on some platforms. - *

- * - * @param selection - * the new selection value - * @param minimum - * the new minimum value - * @param maximum - * the new maximum value - * @param thumb - * the new thumb value - * @param increment - * the new increment value - * @param pageIncrement - * the new pageIncrement value - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setValues(int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) { - checkWidget(); - if (minimum < 0) { - return; - } - if (maximum < 0) { - return; - } - if (thumb < 1) { - return; - } - if (increment < 1) { - return; - } - if (pageIncrement < 1) { - return; - } - setMinimum(minimum); - setMaximum(maximum); - setThumb(thumb); - setSelection(selection); - setIncrement(increment); - setPageIncrement(pageIncrement); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Spinner.java deleted file mode 100644 index 19c26a6a6e..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Spinner.java +++ /dev/null @@ -1,948 +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 com.trolltech.qt.core.QSize; -import com.trolltech.qt.gui.QApplication; -import com.trolltech.qt.gui.QDoubleSpinBox; -import com.trolltech.qt.gui.QWidget; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.events.VerifyListener; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class are selectable user interface objects that allow the - * user to enter and modify numeric values. - *

- * Note that although this class is a subclass of Composite, it - * does not make sense to add children to it, or set a layout on it. - *

- *

- *

- *
Styles:
- *
READ_ONLY, WRAP
- *
Events:
- *
Selection, Modify, Verify
- *
- *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Spinner - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * - * @since 3.1 - * @noextend This class is not intended to be subclassed by clients. - */ -public class Spinner extends Composite { - boolean ignoreModify; - int pageIncrement, digits; - int selection = 0; - - /** - * the operating system limit for the number of characters that the text - * field in an instance of this class can hold - * - * @since 3.4 - */ - public static final int LIMIT; - - /* - * These values can be different on different platforms. Therefore they are - * not initialized in the declaration to stop the compiler from inlining. - */ - static { - //TODO: 3 is just an imaginary value. see bug 161 - LIMIT = 3; - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#READ_ONLY - * @see SWT#WRAP - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Spinner(Composite parent, int style) { - super(parent, checkStyle(style)); - - // setting default values of the SWT widget: - ((QDoubleSpinBox) getQWidget()).setDecimals(0); - ((QDoubleSpinBox) getQWidget()).setMaximum(100); - - ((QDoubleSpinBox) getQWidget()).setSingleStep(getIncrement() / Math.pow(10, this.digits)); - } - - @Override - protected QWidget createQWidget(int style) { - state &= ~(CANVAS | THEME_BACKGROUND); - QWidget spinner = new QDoubleSpinBox(); - connectSignals(spinner); - return spinner; - } - - static int checkStyle(int style) { - /* - * 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); - } - } - - private void connectSignals(QWidget spinner) { - ((QDoubleSpinBox) spinner).valueChanged.connect(this, "valueChanged()"); //$NON-NLS-1$ - //TODO: connection for selection and verify event is missing, but there's not suitable event in QDoubleSpinBox (bug 159) - } - - protected void valueChanged() { - Event event = new Event(); - sendEvent(SWT.Modify, event); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver's text is modified, by sending it one of the messages - * defined in the ModifyListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ModifyListener - * @see #removeModifyListener - */ - public void addModifyListener(ModifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Modify, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * widgetSelected is not called for texts. - * widgetDefaultSelected is typically called when ENTER is - * pressed in a single-line text. - *

- * - * @param listener - * the listener which should be notified when the control is - * selected by the user - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver's text is verified, by sending it one of the messages - * defined in the VerifyListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see VerifyListener - * @see #removeVerifyListener - */ - void addVerifyListener(VerifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Verify, typedListener); - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - QSize size = ((QDoubleSpinBox) getQWidget()).sizeHint(); - return new Point(size.width(), size.height()); - } - - @Override - public Rectangle computeTrim(int x, int y, int width, int height) { - checkWidget(); - return super.computeTrim(x, y, width, height); - } - - /** - * Copies the selected text. - *

- * The current selection is copied to the clipboard. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void copy() { - checkWidget(); - QApplication.clipboard().setText(((QDoubleSpinBox) getQWidget()).text()); - } - - /** - * Cuts the selected text. - *

- * The current selection is first copied to the clipboard and then deleted - * from the widget. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void cut() { - checkWidget(); - if ((style & SWT.READ_ONLY) != 0) { - return; - } - QApplication.clipboard().setText(((QDoubleSpinBox) getQWidget()).text()); - ((QDoubleSpinBox) getQWidget()).setValue(0); - this.selection = 0; - } - - @Override - void enableWidget(boolean enabled) { - super.enableWidget(enabled); - } - - @Override - void deregisterQWidget() { - super.deregisterQWidget(); - } - - @Override - boolean hasFocus() { - return getQWidget().hasFocus(); - } - - /** - * Returns the number of decimal places used by the receiver. - * - * @return the digits - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getDigits() { - checkWidget(); - return digits; - } - - String getDecimalSeparator() { - // TODO check locale - return "."; //$NON-NLS-1$ - } - - /** - * Returns the amount that the receiver's value will be modified by when the - * up/down arrows are pressed. - * - * @return the increment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getIncrement() { - checkWidget(); - double step = ((QDoubleSpinBox) getQWidget()).singleStep(); - int qstep = (int) (step * Math.pow(10, this.digits)); - return qstep; - } - - /** - * Returns the maximum value which the receiver will allow. - * - * @return the maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMaximum() { - checkWidget(); - return (int) (((QDoubleSpinBox) getQWidget()).maximum() * Math.pow(10, this.digits)); - } - - /** - * Returns the minimum value which the receiver will allow. - * - * @return the minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getMinimum() { - checkWidget(); - return (int) (((QDoubleSpinBox) getQWidget()).minimum() * Math.pow(10, this.digits)); - } - - /** - * Returns the amount that the receiver's position will be modified by when - * the page up/down keys are pressed. - * - * @return the page increment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getPageIncrement() { - checkWidget(); - return (int) ((QDoubleSpinBox) getQWidget()).singleStep(); - } - - /** - * Returns the selection, which is the receiver's position. - * - * @return the selection - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelection() { - checkWidget(); - int qselection = (int) (((QDoubleSpinBox) getQWidget()).value() * Math.pow(10, this.digits)); - this.selection = qselection; - return qselection; - } - - int getSelectionText(boolean[] parseFail) { - // TODO - return -1; - } - - /** - * Returns a string containing a copy of the contents of the receiver's text - * field, or an empty string if there are no contents. - * - * @return the receiver's text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public String getText() { - checkWidget(); - return ((QDoubleSpinBox) getQWidget()).text(); - } - - /** - * Returns the maximum number of characters that the receiver's text field - * is capable of holding. If this has not been changed by - * setTextLimit(), it will be the constant - * Spinner.LIMIT. - * - * @return the text limit - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #LIMIT - * - * @since 3.4 - */ - public int getTextLimit() { - checkWidget(); - //TODO: not sure about this... - int maxChars = String.valueOf(getMaximum()).trim().length(); - int minChars = String.valueOf(getMinimum()).trim().length(); - return maxChars > minChars ? maxChars : minChars; - } - - /** - * Pastes text from clipboard. - *

- * The selected text is deleted from the widget and new text inserted from - * the clipboard. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void paste() { - boolean isNumber = true; - double pasteNumber; - - checkWidget(); - if ((style & SWT.READ_ONLY) != 0) { - return; - } - String pasteText = QApplication.clipboard().text(); - - try { - pasteNumber = Double.parseDouble(pasteText); - } catch (NumberFormatException e) { - isNumber = false; - return; // it's not a valid number, so just return and don't paste anything - } - if (isNumber && pasteNumber <= getMaximum() && pasteNumber >= getMinimum()) { - this.selection = Integer.valueOf(QApplication.clipboard().text()); - ((QDoubleSpinBox) getQWidget()).setValue(pasteNumber); - } - } - - @Override - void registerQWidget() { - super.registerQWidget(); - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the receiver's text is modified. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ModifyListener - * @see #addModifyListener - */ - public void removeModifyListener(ModifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Modify, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is verified. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see VerifyListener - * @see #addVerifyListener - */ - void removeVerifyListener(VerifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Verify, listener); - } - - /** - * Sets the number of decimal places used by the receiver. - *

- * The digit setting is used to allow for floating point values in the - * receiver. For example, to set the selection to a floating point value of - * 1.37 call setDigits() with a value of 2 and setSelection() with a value - * of 137. Similarly, if getDigits() has a value of 2 and getSelection() - * returns 137 this should be interpreted as 1.37. This applies to all - * numeric APIs. - *

- * - * @param value - * the new digits (must be greater than or equal to zero) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the value is less than - * zero
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setDigits(int value) { - checkWidget(); - if (value < 0) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (value == this.digits) { - return; - } - - this.digits = value; - ((QDoubleSpinBox) getQWidget()).setDecimals(value); - ((QDoubleSpinBox) getQWidget()).setValue(selection / Math.pow(10, value)); - } - - /** - * Sets the amount that the receiver's value will be modified by when the - * up/down arrows are pressed to the argument, which must be at least one. - * - * @param value - * the new increment (must be greater than zero) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setIncrement(int value) { - checkWidget(); - if (value < 1) { - return; - } - ((QDoubleSpinBox) getQWidget()).setSingleStep(value / Math.pow(10, this.digits)); - } - - /** - * Sets the maximum value that the receiver will allow. This new value will - * be ignored if it is not greater than the receiver's current minimum - * value. If the new maximum is applied then the receiver's selection value - * will be adjusted if necessary to fall within its new range. - * - * @param value - * the new maximum, which must be greater than the current - * minimum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMaximum(int value) { - checkWidget(); - ((QDoubleSpinBox) getQWidget()).setMaximum(value / Math.pow(10, this.digits)); - } - - /** - * Sets the minimum value that the receiver will allow. This new value will - * be ignored if it is not less than the receiver's current maximum value. - * If the new minimum is applied then the receiver's selection value will be - * adjusted if necessary to fall within its new range. - * - * @param value - * the new minimum, which must be less than the current maximum - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMinimum(int value) { - checkWidget(); - ((QDoubleSpinBox) getQWidget()).setMinimum(value / Math.pow(10, this.digits)); - } - - /** - * Sets the amount that the receiver's position will be modified by when the - * page up/down keys are pressed to the argument, which must be at least - * one. - * - * @param value - * the page increment (must be greater than zero) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setPageIncrement(int value) { - checkWidget(); - if (value < 1) { - return; - } - pageIncrement = value; // TODO: see bug 160 - } - - /** - * Sets the selection, which is the receiver's position, to the - * argument. If the argument is not within the range specified by minimum - * and maximum, it will be adjusted to fall within this range. - * - * @param value - * the new selection (must be zero or greater) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(int value) { - checkWidget(); - this.selection = value; - ((QDoubleSpinBox) getQWidget()).setDecimals(this.digits); - ((QDoubleSpinBox) getQWidget()).setValue(value / Math.pow(10, digits)); - - } - - /** - * Sets the maximum number of characters that the receiver's text field is - * capable of holding to be the argument. - *

- * To reset this value to the default, use - * setTextLimit(Spinner.LIMIT). Specifying a limit value larger - * than Spinner.LIMIT sets the receiver's limit to - * Spinner.LIMIT. - *

- * - * @param limit - * new text limit - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_CANNOT_BE_ZERO - if the limit is zero
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #LIMIT - * - * @since 3.4 - */ - public void setTextLimit(int limit) { - checkWidget(); - if (limit == 0) { - error(SWT.ERROR_CANNOT_BE_ZERO); - } - - if (limit < 0 || limit > LIMIT) { - limit = LIMIT; - } - - //TODO setting the text limit to the QDoubleSpinBox - } - - /** - * Sets the receiver's selection, minimum value, maximum value, digits, - * increment and page increment all at once. - *

- * Note: This is similar to setting the values individually using the - * appropriate methods, but may be implemented in a more efficient fashion - * on some platforms. - *

- * - * @param selection - * the new selection value - * @param minimum - * the new minimum value - * @param maximum - * the new maximum value - * @param digits - * the new digits value - * @param increment - * the new increment value - * @param pageIncrement - * the new pageIncrement value - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setValues(int selection, int minimum, int maximum, int digits, int increment, int pageIncrement) { - checkWidget(); - if (maximum <= minimum) { - return; - } - if (digits < 0) { - return; - } - if (increment < 1) { - return; - } - if (pageIncrement < 1) { - return; - } - this.selection = Math.min(Math.max(minimum, selection), maximum); - ((QDoubleSpinBox) getQWidget()).setValue(this.selection); - setIncrement(increment); - this.pageIncrement = pageIncrement; - this.digits = digits; - } - - String verifyText(String string, int start, int end, Event keyEvent) { - // Event event = new Event(); - // event.text = string; - // event.start = start; - // event.end = end; - // if (keyEvent != null) { - // event.character = keyEvent.character; - // event.keyCode = keyEvent.keyCode; - // event.stateMask = keyEvent.stateMask; - // } - // int index = 0; - // if (digits > 0) { - // String decimalSeparator = getDecimalSeparator(); - // index = string.indexOf(decimalSeparator); - // if (index != -1) { - // string = string.substring(0, index) + string.substring(index + 1); - // } - // index = 0; - // } - // if (string.length() > 0) { - // int[] min = new int[1]; - // OS.SendMessage(hwndUpDown, OS.UDM_GETRANGE32, min, null); - // if (min[0] < 0 && string.charAt(0) == '-') - // index++; - // } - // while (index < string.length()) { - // if (!Character.isDigit(string.charAt(index))) - // break; - // index++; - // } - // event.doit = index == string.length(); - // if ( !OS.IsUnicode && OS.IsDBLocale ) { - // event.start = mbcsToWcsPos( start ); - // event.end = mbcsToWcsPos( end ); - // } - // sendEvent(SWT.Verify, event); - // if (!event.doit || isDisposed()) - return null; - // return event.text; - } - -} 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. - *

- * The item children that may be added to instances of this class must be of - * type TabItem. Control children are created and then - * set into a tab item using TabItem#setControl. - *

- *

- * Note that although this class is a subclass of Composite, it - * does not make sense to set a layout on it. - *

- *

- *

- *
Styles:
- *
TOP, BOTTOM
- *
Events:
- *
Selection
- *
- *

- * Note: Only one of the styles TOP and BOTTOM may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see TabFolder, - * TabItem snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class TabFolder extends Composite { - private java.util.List items; - private java.util.List tabWidgets; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @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(4); - tabWidgets = new ArrayList(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 SelectionListener interface. - *

- * When widgetSelected is called, the item field of the event - * object is valid. widgetDefaultSelected is not called. - *

- * - * @param listener - * the listener which should be notified when the user changes - * the receiver's selection - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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 - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the point is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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 - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getItemCount() { - checkWidget(); - return getQTabWidget().count(); - } - - /** - * Returns an array of TabItems which are the items in the - * receiver. - *

- * 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. - *

- * - * @return the items in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - 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 TabItems that are currently selected in - * the receiver. An empty array indicates that no items are selected. - *

- * Note: This is not the actual structure used by the receiver to maintain - * its selection, so modifying the array will not affect the receiver. - *

- * - * @return an array representing the selection - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - 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 - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the items array is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - 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 - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - 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; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabItem.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabItem.java deleted file mode 100644 index e6a3286797..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabItem.java +++ /dev/null @@ -1,389 +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 org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class represent a selectable user interface object - * corresponding to a tab for a page in a tab folder. - *
- *
Styles:
- *
(none)
- *
Events:
- *
(none)
- *
- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see TabFolder, - * TabItem snippets - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class TabItem extends Item { - TabFolder parent; - Control control; - private String toolTipText; - - /** - * Constructs a new instance of this class given its parent (which must be a - * TabFolder) and a style value describing its behavior and - * appearance. The item is added to the end of the items maintained by its - * parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TabItem(TabFolder parent, int style) { - super(parent, style); - this.parent = parent; - parent.createItem(this, parent.getItemCount()); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * TabFolder), a style value describing its behavior and - * appearance, and the index at which to place it in the items maintained by - * its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - * @param index - * the zero-relative index to store the receiver in its parent - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the parent (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TabItem(TabFolder parent, int style, int index) { - super(parent, style); - this.parent = parent; - parent.createItem(this, index); - } - - void _setText(int index, String string) { - parent.getQTabWidget().setTabText(index, string); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - @Override - void destroyWidget() { - parent.destroyItem(this); - releaseQWidget(); - } - - /** - * Returns the control that is used to fill the client area of the tab - * folder when the user selects the tab item. If no control has been set, - * return null. - *

- * - * @return the control - * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public Control getControl() { - checkWidget(); - return control; - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent. - * - * @return the receiver's bounding rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public Rectangle getBounds() { - checkWidget(); - int index = parent.indexOf(this); - if (index == -1 || control == null) { - return new Rectangle(0, 0, 0, 0); - } - return control.getBounds(); - } - - /** - * Returns the receiver's parent, which must be a TabFolder. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TabFolder getParent() { - checkWidget(); - return parent; - } - - /** - * Returns the receiver's tool tip text, or null if it has not been set. - * - * @return the receiver's tool tip text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getToolTipText() { - checkWidget(); - return toolTipText; - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - parent = null; - } - - @Override - void releaseParent() { - super.releaseParent(); - int index = parent.indexOf(this); - if (index == parent.getSelectionIndex()) { - if (control != null) { - control.setVisible(false); - } - } - } - - @Override - void releaseWidget() { - super.releaseWidget(); - control = null; - } - - /** - * Sets the control that is used to fill the client area of the tab folder - * when the user selects the tab item. - *

- * - * @param control - * the new control (or null) - * - * @exception IllegalArgumentException - *

    - *
  • ERROR_INVALID_ARGUMENT - if the control has been - * disposed
  • ERROR_INVALID_PARENT - if the control is - * not in the same widget tree
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public void setControl(Control control) { - checkWidget(); - if (control != null) { - if (control.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (control.parent != parent) { - error(SWT.ERROR_INVALID_PARENT); - } - } - if (this.control != null && this.control.isDisposed()) { - this.control = null; - } - Control oldControl = this.control, newControl = control; - this.control = control; - parent.updateItem(this, oldControl); - int index = parent.indexOf(this), selectionIndex = parent.getSelectionIndex(); - if (index != selectionIndex) { - if (newControl != null) { - if (selectionIndex != -1) { - Control selectedControl = parent.getItem(selectionIndex).getControl(); - if (selectedControl == newControl) { - return; - } - } - return; - } - } - } - - @Override - public void setImage(Image image) { - checkWidget(); - int index = parent.indexOf(this); - if (index == -1) { - return; - } - super.setImage(image); - // TODO - } - - /** - * Sets the receiver's text. The string may include the mnemonic character. - *

- *

- * Mnemonics are indicated by an '&' that causes the next character to - * be the mnemonic. When the user presses a key sequence that matches the - * mnemonic, a selection event occurs. On most platforms, the mnemonic - * appears underlined but may be emphasised in a platform specific manner. - * The mnemonic indicator character '&' can be escaped by doubling it in - * the string, causing a single '&' to be displayed. - *

- * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - */ - @Override - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (string.equals(text)) { - return; - } - int index = parent.indexOf(this); - if (index == -1) { - return; - } - super.setText(string); - _setText(index, string); - } - - /** - * Sets the receiver's tool tip text to the argument, which may be null - * indicating that the default tool tip for the control will be shown. For a - * control that has a default tool tip, such as the Tree control on Windows, - * setting the tool tip text to an empty string replaces the default, - * causing no tool tip text to be shown. - *

- * The mnemonic indicator (character '&') is not displayed in a tool - * tip. To display a single '&' in the tool tip, the character '&' - * can be escaped by doubling it in the string. - *

- * - * @param string - * the new tool tip text (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setToolTipText(String string) { - checkWidget(); - toolTipText = string; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Table.java deleted file mode 100644 index 4783422fed..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Table.java +++ /dev/null @@ -1,2561 +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 static com.trolltech.qt.core.Qt.ItemDataRole.*; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import com.trolltech.qt.core.QModelIndex; -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.Qt; -import com.trolltech.qt.core.Qt.AlignmentFlag; -import com.trolltech.qt.core.Qt.DropActions; -import com.trolltech.qt.core.Qt.ItemFlag; -import com.trolltech.qt.core.Qt.ItemFlags; -import com.trolltech.qt.core.Qt.Orientation; -import com.trolltech.qt.core.Qt.ScrollBarPolicy; -import com.trolltech.qt.core.Qt.SortOrder; -import com.trolltech.qt.gui.QAbstractTableModel; -import com.trolltech.qt.gui.QBrush; -import com.trolltech.qt.gui.QDragEnterEvent; -import com.trolltech.qt.gui.QDragLeaveEvent; -import com.trolltech.qt.gui.QDragMoveEvent; -import com.trolltech.qt.gui.QDropEvent; -import com.trolltech.qt.gui.QHeaderView; -import com.trolltech.qt.gui.QItemSelection; -import com.trolltech.qt.gui.QTableView; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QAbstractItemView.DragDropMode; -import com.trolltech.qt.gui.QAbstractItemView.EditTrigger; -import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior; -import com.trolltech.qt.gui.QAbstractItemView.SelectionMode; -import com.trolltech.qt.gui.QHeaderView.ResizeMode; -import com.trolltech.qt.gui.QItemSelectionModel.SelectionFlag; - -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.Color; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; -import org.eclipse.swt.internal.qt.SignalConnector; - -/** - * Instances of this class implement a selectable user interface object that - * displays a list of images and strings and issues notification when selected. - *

- * The item children that may be added to instances of this class must be of - * type TableItem. - *

- *

- * Style VIRTUAL is used to create a Table whose - * TableItems are to be populated by the client on an on-demand - * basis instead of up-front. This can provide significant performance - * improvements for tables that are very large or for which - * TableItem population is expensive (for example, retrieving - * values from an external source). - *

- *

- * Here is an example of using a Table with style - * VIRTUAL:

- *  final Table table = new Table (parent, SWT.VIRTUAL | SWT.BORDER);
- *  table.setItemCount (1000000);
- *  table.addListener (SWT.SetData, new Listener () {
- *      public void handleEvent (Event event) {
- *          TableItem item = (TableItem) event.item;
- *          int index = table.indexOf (item);
- *          item.setText ("Item " + index);
- *          System.out.println (item.getText ());
- *      }
- *  });
- * 
- *

- *

- * Note that although this class is a subclass of Composite, it - * does not normally make sense to add Control children to it, or - * set a layout on it, unless implementing something like a cell editor. - *

- *

- *

- *
Styles:
- *
SINGLE, MULTI, CHECK, FULL_SELECTION, HIDE_SELECTION, VIRTUAL, NO_SCROLL
- *
Events:
- *
Selection, DefaultSelection, SetData, MeasureItem, EraseItem, PaintItem
- *
- *

- *

- * Note: Only one of the styles SINGLE, and MULTI may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Table, TableItem, - * TableColumn snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class Table extends Composite { - // aka rows, contains the cells/data - TableColumn sortColumn; - private int sortDirection; - private TableModel model; - - private SignalConnector itemSelectionChanged; - private static final int DEFAULT_ITEMHIGHT = 14; - private int itemHeight = DEFAULT_ITEMHIGHT; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#SINGLE - * @see SWT#MULTI - * @see SWT#CHECK - * @see SWT#FULL_SELECTION - * @see SWT#HIDE_SELECTION - * @see SWT#VIRTUAL - * @see SWT#NO_SCROLL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Table(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - state &= ~(CANVAS | THEME_BACKGROUND); - - QTableView table = new MyQTableWidget(); - model = new TableModel(isVirtual()); - table.setModel(model); - - table.verticalHeader().hide(); - table.horizontalHeader().hide(); - table.setEditTriggers(EditTrigger.NoEditTriggers); - table.setShowGrid(false); - table.setWordWrap(false); - table.setHorizontalScrollBarPolicy(ScrollBarPolicy.ScrollBarAsNeeded); - table.setVerticalScrollBarPolicy(ScrollBarPolicy.ScrollBarAsNeeded); - table.horizontalHeader().setResizeMode(ResizeMode.Interactive); - table.horizontalHeader().setStretchLastSection(true); - table.horizontalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft); - table.horizontalHeader().setContentsMargins(0, 0, 0, 0); - if ((style & SWT.MULTI) != 0) { - table.setSelectionMode(SelectionMode.ExtendedSelection); - } else { - table.setSelectionMode(SelectionMode.SingleSelection); - } - table.setSelectionBehavior(SelectionBehavior.SelectRows); - setQMasterWidget(table); - return table.viewport(); - } - - @Override - protected void connectSignals() { - itemSelectionChanged = new SignalConnector(getQTableWidget().selectionModel().selectionChanged, this, - "qtItemSelectionChangedEvent()").connect(); //$NON-NLS-1$ - } - - protected void qtItemSelectionChangedEvent() { - int selectionIndex = getSelectionIndex(); - Event event = new Event(); - event.type = SWT.Selection; - if (selectionIndex != -1) { - event.item = getItem(selectionIndex); - } - sendEvent(SWT.Selection, event, true); - } - - protected void selectionEvent(QItemSelection selected, QItemSelection deselected) { - sendEvent(SWT.Selection); - } - - public QTableView getQTableWidget() { - return (QTableView) getQMasterWidget(); - } - - static int checkStyle(int style) { - if ((style & SWT.NO_SCROLL) == 0) { - style |= SWT.H_SCROLL | SWT.V_SCROLL; - } - return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0); - } - - @Override - protected void updateAutoFillBackground() { - // nothing - } - - @Override - protected void updateBackground() { - super.updateBackground(); - } - - @Override - void updateBackgroundImage() { - //super.updateBackgroundImage(); - } - - @Override - protected Color getDefaultBackgroundColor() { - return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND); - } - - @Override - public void setDragEnabled(boolean enabled) { - getQTableWidget().setDragEnabled(enabled); - } - - @Override - public void setAcceptDrops(boolean accept) { - super.setAcceptDrops(accept); - getQTableWidget().setDragDropMode(DragDropMode.DragDrop); - getQTableWidget().setDropIndicatorShown(true); - } - - void addItem(TableItem item, int row) { - model.addItem(item, row, false); - } - - void removeRow(TableItem row) { - model.removeRow(row); - } - - void addColumn(TableColumn column, int index) { - model.addColumn(column, index); - } - - void removeColumn(TableColumn column) { - model.removeColumn(column); - } - - void rowChanged(TableItem row) { - model.rowChanged(row); - } - - void cellChanged(TableItem row, int column) { - model.cellChanged(row, column); - } - - void columnChanged(TableColumn column) { - model.columnChanged(column); - } - - Rectangle visualRect(TableItem row, int column) { - return QtSWTConverter.convert(getQTableWidget().visualRect(model.index(indexOf(row), column))); - } - - /** - * 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 SelectionListener interface. - *

- * When widgetSelected is called, the item field of the event - * object is valid. If the receiver has the SWT.CHECK style and - * the check selection changes, the event object detail field contains the - * value SWT.CHECK. widgetDefaultSelected is - * typically called when an item is double-clicked. The item field of the - * event object is valid for default selection, but the detail field is not - * used. - *

- * - * @param listener - * the listener which should be notified when the user changes - * the receiver's selection - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - boolean checkData(TableItem item, boolean redraw) { - if ((style & SWT.VIRTUAL) == 0) { - return true; - } - - if (!item.cached) { - item.cached = true; - Event event = new Event(); - event.item = item; - event.index = indexOf(item); - sendEvent(SWT.SetData, event); - // widget could be disposed at this point - if (isDisposed() || item.isDisposed()) { - return false; - } - } - return true; - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - /** - * Clears the item at the given zero-relative index in the receiver. The - * text, icon and other attributes of the item are set to the default value. - * If the table was created with the SWT.VIRTUAL style, these - * attributes are requested again as needed. - * - * @param index - * the index of the item to clear - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#VIRTUAL - * @see SWT#SetData - * - * @since 3.0 - */ - public void clear(int index) { - checkWidget(); - validateItemIndex(index); - model.getRow(index).clear(); - } - - /** - * Removes the items from the receiver which are between the given - * zero-relative start and end indices (inclusive). The text, icon and other - * attributes of the items are set to their default values. If the table was - * created with the SWT.VIRTUAL style, these attributes are - * requested again as needed. - * - * @param start - * the start index of the item to clear - * @param end - * the end index of the item to clear - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if either the start or end are - * not between 0 and the number of elements in the list minus - * 1 (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#VIRTUAL - * @see SWT#SetData - * - * @since 3.0 - */ - public void clear(int start, int end) { - checkWidget(); - if (start > end) { - return; - } - int count = model.rowCount(); - if (!(0 <= start && start <= end && end < count)) { - error(SWT.ERROR_INVALID_RANGE); - } - if (start == 0 && end == count - 1) { - clearAll(); - } - for (int index = start; index < end; index++) { - model.getRow(index).clear(); - } - } - - /** - * Clears the items at the given zero-relative indices in the receiver. The - * text, icon and other attributes of the items are set to their default - * values. If the table was created with the SWT.VIRTUAL style, - * these attributes are requested again as needed. - * - * @param indices - * the array of indices of the items - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
  • ERROR_NULL_ARGUMENT - if the indices array is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#VIRTUAL - * @see SWT#SetData - * - * @since 3.0 - */ - public void clear(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (indices.length == 0) { - return; - } - int count = model.rowCount(); - for (int i = 0; i < indices.length; i++) { - if (!(0 <= indices[i] && indices[i] < count)) { - error(SWT.ERROR_INVALID_RANGE); - } - } - for (int index : indices) { - model.getRow(index).clear(); - } - } - - /** - * Clears all the items in the receiver. The text, icon and other attributes - * of the items are set to their default values. If the table was created - * with the SWT.VIRTUAL style, these attributes are requested - * again as needed. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#VIRTUAL - * @see SWT#SetData - * - * @since 3.0 - */ - public void clearAll() { - checkWidget(); - model.clearAllItems(); - //getQTableWidget().clearContents(); - } - - @Override - public void pack() { - // getQTableWidget().resizeColumnsToContents(); - // getQTableWidget().resizeRowsToContents(); - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - QSize size = getQTableWidget().sizeHint(); - - if (getItemCount() > 0) { - int width = 0; - int height = 0; - - // Checkbox column - if ((style & SWT.CHECK) != 0 || (style & SWT.RADIO) != 0) { - width += getQTableWidget().columnWidth(0); - } - - if (getColumnCount() > 0) { - for (int i = 0; i < getColumnCount(); i++) { - // if ( getColumn( i ).useFixedWidth ) { - // width += getQTableWidget().columnWidth( i ); - // } else { - width += getColumn(i).getPreferredColumnWidth(i); - // } - } - } else { // list mode width += - getQTableWidget().sizeHintForColumn(1); - } - - int borderWidth = getBorderWidth(); - width += 2 * borderWidth; - height += 2 * borderWidth; - height += getHeaderHeight(); - int items = getItemCount(); - height += items * _getItemHeight(); - size.setWidth(width); - size.setHeight(height); - } - - return QtSWTConverter.convert(size); - } - - /** - * Deselects the items at the given zero-relative indices in the receiver. - * If the item at the given zero-relative index in the receiver is selected, - * it is deselected. If the item at the index was not selected, it remains - * deselected. Indices that are out of range and duplicate indices are - * ignored. - * - * @param indices - * the array of indices for the items to deselect - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the set of indices is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void deselect(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (indices.length == 0) { - return; - } - for (int index : indices) { - _select(index, false); - } - } - - /** - * Deselects the item at the given zero-relative index in the receiver. If - * the item at the index was already deselected, it remains deselected. - * Indices that are out of range are ignored. - * - * @param index - * the index of the item to deselect - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void deselect(int index) { - checkWidget(); - _select(index, false); - } - - /** - * Deselects the items at the given zero-relative indices in the receiver. - * If the item at the given zero-relative index in the receiver is selected, - * it is deselected. If the item at the index was not selected, it remains - * deselected. The range of the indices is inclusive. Indices that are out - * of range are ignored. - * - * @param start - * the start index of the items to deselect - * @param end - * the end index of the items to deselect - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void deselect(int start, int end) { - checkWidget(); - _select(start, end, false); - } - - /** - * Deselects all selected items in the receiver. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void deselectAll() { - checkWidget(); - itemSelectionChanged.runDisconnected(new Runnable() { - public void run() { - getQTableWidget().clearSelection(); - } - }); - } - - /** - * Returns the column at the given, zero-relative index in the receiver. - * Throws an exception if the index is out of range. Columns are returned in - * the order that they were created. If no TableColumns were - * created by the programmer, this method will throw - * ERROR_INVALID_RANGE despite the fact that a single column of - * data may be visible in the table. This occurs when the programmer uses - * the table like a list, adding items but never creating a column. - * - * @param index - * the index of the column to return - * @return the column at the given index - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#getColumnOrder() - * @see Table#setColumnOrder(int[]) - * @see TableColumn#getMoveable() - * @see TableColumn#setMoveable(boolean) - * @see SWT#Move - */ - public TableColumn getColumn(int index) { - checkWidget(); - return model.getColumn(index); - } - - /** - * Returns the number of columns contained in the receiver. If no - * TableColumns were created by the programmer, this value is - * zero, despite the fact that visually, one column of items may be visible. - * This occurs when the programmer uses the table like a list, adding items - * but never creating a column. - * - * @return the number of columns - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getColumnCount() { - checkWidget(); - return model.columnCount(); - } - - /** - * Returns an array of zero-relative integers that map the creation order of - * the receiver's items to the order in which they are currently being - * displayed. - *

- * Specifically, the indices of the returned array represent the current - * visual order of the items, and the contents of the array represent the - * creation order of the items. - *

- *

- * 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. - *

- * - * @return the current visual order of the receiver's items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#setColumnOrder(int[]) - * @see TableColumn#getMoveable() - * @see TableColumn#setMoveable(boolean) - * @see SWT#Move - * - * @since 3.1 - */ - public int[] getColumnOrder() { - checkWidget(); - if (model.columnCount() == 0) { - return new int[0]; - } - return _getColumnOrder(); - } - - private int[] _getColumnOrder() { - int columnCount = model.columnCount(); - int[] order = new int[columnCount]; - QHeaderView header = getQTableWidget().horizontalHeader(); - for (int i = 0; i < columnCount; i++) { - order[i] = header.visualIndex(i); - } - return order; - } - - /** - * Returns an array of TableColumns which are the columns in - * the receiver. Columns are returned in the order that they were created. - * If no TableColumns were created by the programmer, the array - * is empty, despite the fact that visually, one column of items may be - * visible. This occurs when the programmer uses the table like a list, - * adding items but never creating a column. - *

- * 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. - *

- * - * @return the items in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#getColumnOrder() - * @see Table#setColumnOrder(int[]) - * @see TableColumn#getMoveable() - * @see TableColumn#setMoveable(boolean) - * @see SWT#Move - */ - public TableColumn[] getColumns() { - checkWidget(); - return model.getColumns(); - } - - /** - * Returns the width in pixels of a grid line. - * - * @return the width of a grid line in pixels - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getGridLineWidth() { - checkWidget(); - return getQTableWidget().showGrid() ? 1 : 0; - } - - /** - * Returns the height of the receiver's header - * - * @return the height of the header or zero if the header is not visible - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - */ - public int getHeaderHeight() { - checkWidget(); - if (getQTableWidget().horizontalHeader().isVisible()) { - return getQTableWidget().horizontalHeader().height(); - } - return 0; - } - - /** - * Returns true if the receiver's header is visible, and - * false otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

- * - * @return the receiver's header's visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getHeaderVisible() { - checkWidget(); - return !getQTableWidget().horizontalHeader().isHidden(); - } - - /** - * 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 - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TableItem getItem(int index) { - checkWidget(); - validateItemIndex(index); - return model.getRow(index); - } - - void validateItemIndex(int index) { - if (!(0 <= index && index < model.rowCount())) { - error(SWT.ERROR_INVALID_RANGE); - } - } - - /** - * Returns the 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. - *

- * The item that is returned represents an item that could be selected by - * the user. For example, if selection only occurs in items in the first - * column, then null is returned if the point is outside of the item. Note - * that the SWT.FULL_SELECTION style hint, which specifies the selection - * policy, determines the extent of the selection. - *

- * - * @param point - * the point used to locate the item - * @return the item at the given point, or null if the point is not in a - * selectable item - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the point is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TableItem getItem(Point point) { - checkWidget(); - if (point == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int row = getQTableWidget().rowAt(point.y); - if (row < 0) { - return null; - } - return model.getRow(row); - } - - /** - * Returns the number of items contained in the receiver. - * - * @return the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getItemCount() { - checkWidget(); - return model.rowCount(); - } - - /** - * Returns the height of the area which would be used to display - * one of the items in the receiver. - * - * @return the height of one item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getItemHeight() { - checkWidget(); - return _getItemHeight(); - } - - int _getItemHeight() { - int itemHeight = 0; - if (model.rowCount() > 0) { - itemHeight = getQTableWidget().rowHeight(0); - } else { - // getQTableWidget().insertRow(0); - // itemHeight = getQTableWidget().rowHeight(0); - // getQTableWidget().removeRow(0); - } - return itemHeight; - } - - /** - * Returns a (possibly empty) array of TableItems which are the - * items in the receiver. - *

- * 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. - *

- * - * @return the items in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TableItem[] getItems() { - checkWidget(); - return model.getRows(); - } - - /** - * Returns true if the receiver's lines are visible, and - * false otherwise. Note that some platforms draw grid lines - * while others may draw alternating row colors. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

- * - * @return the visibility state of the lines - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getLinesVisible() { - checkWidget(); - return getQTableWidget().showGrid(); - } - - /** - * Returns an array of TableItems that are currently selected - * in the receiver. The order of the items is unspecified. An empty array - * indicates that no items are selected. - *

- * Note: This is not the actual structure used by the receiver to maintain - * its selection, so modifying the array will not affect the receiver. - *

- * - * @return an array representing the selection - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TableItem[] getSelection() { - checkWidget(); - List selection = getQTableWidget().selectionModel().selectedRows(); - - /* - * This is an insert sort for sorting items according to their rows. In - * SWT/Win32 the selection is returned sorted that way. - */ - for (int i = 0; i < selection.size(); i++) { - QModelIndex selectedItem = selection.get(i); - int j = i; - while (j > 0 && selection.get(j - 1).row() > selectedItem.row()) { - selection.set(j, selection.get(j - 1)); - j = j - 1; - } - selection.set(j, selectedItem); - } - - TableItem items[] = new TableItem[selection.size()]; - int i = 0; - for (QModelIndex index : selection) { - items[i++] = model.getRow(index.row()); - } - return items; - } - - /** - * Returns the number of selected items contained in the receiver. - * - * @return the number of selected items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelectionCount() { - checkWidget(); - return getQTableWidget().selectionModel().selectedRows().size(); - } - - /** - * 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 - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelectionIndex() { - checkWidget(); - if (model.rowCount() == 0) { - return -1; - } - // if (getQTableWidget().selectionModel().hasSelection()) { - List selectedRows = getQTableWidget().selectionModel().selectedRows(); - if (selectedRows.size() > 0) { - return selectedRows.get(0).row(); - } - // } - return -1; - } - - /** - * Returns the zero-relative indices of the items which are currently - * selected in the receiver. The order of the indices is unspecified. The - * array is empty if no items are selected. - *

- * Note: This is not the actual structure used by the receiver to maintain - * its selection, so modifying the array will not affect the receiver. - *

- * - * @return the array of indices of the selected items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int[] getSelectionIndices() { - checkWidget(); - List selectedIndices = getQTableWidget().selectionModel().selectedRows(); - int[] result = new int[selectedIndices.size()]; - int i = 0; - for (QModelIndex index : selectedIndices) { - result[i++] = index.row(); - } - return result; - } - - /** - * Returns the column which shows the sort indicator for the receiver. The - * value may be null if no column shows the sort indicator. - * - * @return the sort indicator - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #setSortColumn(TableColumn) - * - * @since 3.2 - */ - public TableColumn getSortColumn() { - checkWidget(); - return sortColumn; - } - - /** - * Returns the direction of the sort indicator for the receiver. The value - * will be one of UP, DOWN or NONE. - * - * @return the sort direction - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #setSortDirection(int) - * - * @since 3.2 - */ - public int getSortDirection() { - checkWidget(); - return sortDirection; - } - - /** - * Returns the zero-relative index of the item which is currently at the top - * of the receiver. This index can change when items are scrolled or new - * items are added or removed. - * - * @return the index of the top item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getTopIndex() { - checkWidget(); - return getQTableWidget().rowAt(1); - } - - /** - * Searches the receiver's list starting at the first column (index 0) until - * a column is found that is equal to the argument, and returns the index of - * that column. If no column is found, returns -1. - * - * @param column - * the search column - * @return the index of the column - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the column is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int indexOf(TableColumn column) { - checkWidget(); - if (column == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return model.indexOf(column); - } - - /** - * 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int indexOf(TableItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return model.indexOf(item); - } - - boolean isCustomToolTip() { - return hooks(SWT.MeasureItem); - } - - /** - * Returns true if the item is selected, and false - * otherwise. Indices out of range are ignored. - * - * @param index - * the index of the item - * @return the selection state of the item at the index - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean isSelected(int index) { - checkWidget(); - validateItemIndex(index); - return model.getRow(index).isSelected(); - } - - @Override - void releaseChildren(boolean destroy) { - model.release(); - super.releaseChildren(destroy); - } - - /** - * Removes the items from the receiver's list at the given zero-relative - * indices. - * - * @param indices - * the array of indices of the items - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
  • ERROR_NULL_ARGUMENT - if the indices array is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void remove(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (indices.length == 0) { - return; - } - model.removeItems(indices); - } - - /** - * Removes the item from the receiver at the given zero-relative index. - * - * @param index - * the index for the item - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void remove(int index) { - checkWidget(); - validateItemIndex(index); - model.removeRowItem(index); - } - - /** - * Removes the items from the receiver which are between the given - * zero-relative start and end indices (inclusive). - * - * @param start - * the start of the range - * @param end - * the end of the range - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if either the start or end are - * not between 0 and the number of elements in the list minus - * 1 (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void remove(int start, int end) { - checkWidget(); - if (start > end) { - return; - } - int count = model.rowCount(); - if (!(0 <= start && start <= end && end < count)) { - error(SWT.ERROR_INVALID_RANGE); - } - if (start == 0 && end == count - 1) { - removeAll(); - } else { - for (int index = end; index >= start; index--) { - model.removeRowItem(index); - } - } - } - - /** - * Removes all of the items from the receiver. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void removeAll() { - checkWidget(); - model.releaseItems(); - // getQTableWidget().clearContents(); - // getQTableWidget().setRowCount(0); - } - - /** - * 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SelectionListener - * @see #addSelectionListener(SelectionListener) - */ - 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); - } - - /** - * Selects the items at the given zero-relative indices in the receiver. The - * current selection is not cleared before the new items are selected. - *

- * If the item at a given index is not selected, it is selected. If the item - * at a given index was already selected, it remains selected. Indices that - * are out of range and duplicate indices are ignored. If the receiver is - * single-select and multiple indices are specified, then all indices are - * ignored. - *

- * - * @param indices - * the array of indices for the items to select - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the array of indices is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#setSelection(int[]) - */ - public void select(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int length = indices.length; - if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) { - return; - } - for (int index : indices) { - _select(index, true); - } - } - - /** - * Selects the item at the given zero-relative index in the receiver. If the - * item at the index was already selected, it remains selected. Indices that - * are out of range are ignored. - * - * @param index - * the index of the item to select - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void select(int index) { - checkWidget(); - _select(index, true); - } - - void _select(int index, boolean selected) { - if (index < 0 || index >= model.rowCount()) { - return; - } - getQTableWidget().selectionModel().select(model.index(index, 0), - SelectionFlag.createQFlags(SelectionFlag.Select, SelectionFlag.Rows)); - model.getRow(index).setSelected(selected); - } - - /** - * Selects the items in the range specified by the given zero-relative - * indices in the receiver. The range of indices is inclusive. The current - * selection is not cleared before the new items are selected. - *

- * If an item in the given range is not selected, it is selected. If an item - * in the given range was already selected, it remains selected. Indices - * that are out of range are ignored and no items will be selected if start - * is greater than end. If the receiver is single-select and there is more - * than one item in the given range, then all indices are ignored. - *

- * - * @param start - * the start of the range - * @param end - * the end of the range - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#setSelection(int,int) - */ - public void select(int start, int end) { - checkWidget(); - _select(start, end, true); - } - - void _select(int start, int end, boolean selected) { - if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) { - return; - } - int count = model.rowCount(); - if (count == 0 || start >= count) { - return; - } - start = Math.max(0, start); - end = Math.min(end, count - 1); - if (start == 0 && end == count - 1) { - if (selected) { - selectAll(); - } else { - deselectAll(); - } - } else { - for (int index = start; index < end; index++) { - _select(index, selected); - } - } - } - - /** - * Selects all of the items in the receiver. - *

- * If the receiver is single-select, do nothing. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void selectAll() { - checkWidget(); - if ((style & SWT.SINGLE) != 0) { - return; - } - getQTableWidget().selectAll(); - } - - /** - * Sets the order that the items in the receiver should be displayed in to - * the given argument which is described in terms of the zero-relative - * ordering of when the items were added. - * - * @param order - * the new order to display the items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item order is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item order is not the - * same length as the number of items
  • - *
- * - * @see Table#getColumnOrder() - * @see TableColumn#getMoveable() - * @see TableColumn#setMoveable(boolean) - * @see SWT#Move - * - * @since 3.1 - */ - public void setColumnOrder(int[] order) { - checkWidget(); - if (validateColumnOrder(order)) { - int columnCount = getColumnCount(); - QHeaderView header = getQTableWidget().horizontalHeader(); - for (int i = 0; i < columnCount; i++) { - int visualIndex = header.visualIndex(i); - header.moveSection(visualIndex, order[i]); - } - } - } - - private boolean validateColumnOrder(int[] order) { - if (order == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int columnCount = model.columnCount(); - if (columnCount == 0) { - if (order.length != 0) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - return false; - } - if (order.length != columnCount) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - int[] oldOrder = _getColumnOrder(); - - boolean reorder = false; - boolean[] seen = new boolean[columnCount]; - for (int i = 0; i < order.length; i++) { - int index = order[i]; - if (index < 0 || index >= columnCount) { - error(SWT.ERROR_INVALID_RANGE); - } - if (seen[index]) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - seen[index] = true; - if (index != oldOrder[i]) { - reorder = true; - } - } - return reorder; - } - - /** - * Marks the receiver's header as visible if the argument is - * true, and marks it invisible otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

- * - * @param show - * the new visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setHeaderVisible(boolean show) { - checkWidget(); - if (show) { - getQTableWidget().horizontalHeader().show(); - } else { - getQTableWidget().horizontalHeader().hide(); - } - } - - /** - * Sets the number of items contained in the receiver. - * - * @param count - * the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public void setItemCount(int count) { - checkWidget(); - model.setItemCount(count); - } - - /** - * @return true if Table was created with SWT.VIRTUAL style - */ - boolean isVirtual() { - return (style & SWT.VIRTUAL) != 0; - } - - /** - * Sets the height of the area which would be used to display one - * of the items in the table. - * - * @param itemHeight - * the height of one item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - /* public */void setItemHeight(int itemHeight) { - checkWidget(); - if (itemHeight < -1) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - this.itemHeight = itemHeight; - int rows = model.rowCount(); - for (int row = 0; row < rows; row++) { - getQTableWidget().setRowHeight(row, itemHeight); - } - } - - /** - * Marks the receiver's lines as visible if the argument is - * true, and marks it invisible otherwise. Note that some - * platforms draw grid lines while others may draw alternating row colors. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

- * - * @param show - * the new visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setLinesVisible(boolean show) { - checkWidget(); - getQTableWidget().setShowGrid(show); - } - - /** - * Selects the items at the given zero-relative indices in the receiver. The - * current selection is cleared before the new items are selected. - *

- * Indices that are out of range and duplicate indices are ignored. If the - * receiver is single-select and multiple indices are specified, then all - * indices are ignored. - *

- * - * @param indices - * the indices of the items to select - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the array of indices is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#deselectAll() - * @see Table#select(int[]) - */ - public void setSelection(int[] indices) { - checkWidget(); - if (indices == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - deselectAll(); - int length = indices.length; - if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) { - return; - } - select(indices); - showSelection(); - } - - /** - * Sets the receiver's selection to the given item. The current selection is - * cleared before the new item is selected. - *

- * If the item is not in the receiver, then it is ignored. - *

- * - * @param item - * the item to select - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setSelection(TableItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setSelection(new TableItem[] { item }); - } - - /** - * Sets the receiver's selection to be the given array of items. The current - * selection is cleared before the new items are selected. - *

- * Items that are not in the receiver are ignored. If the receiver is - * single-select and multiple items are specified, then all items are - * ignored. - *

- * - * @param items - * the array of items - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the array of items is null
  • - *
  • ERROR_INVALID_ARGUMENT - if one of the items has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#deselectAll() - * @see Table#select(int[]) - * @see Table#setSelection(int[]) - */ - public void setSelection(TableItem[] items) { - checkWidget(); - if (items == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - deselectAll(); - int length = items.length; - if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) { - return; - } - for (int i = length - 1; i >= 0; --i) { - int index = indexOf(items[i]); - if (index != -1) { - select(index); - } - } - showSelection(); - } - - /** - * Selects the item at the given zero-relative index in the receiver. The - * current selection is first cleared, then the new item is selected. - * - * @param index - * the index of the item to select - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#deselectAll() - * @see Table#select(int) - */ - public void setSelection(int index) { - checkWidget(); - deselectAll(); - select(index); - showSelection(); - } - - /** - * Selects the items in the range specified by the given zero-relative - * indices in the receiver. The range of indices is inclusive. The current - * selection is cleared before the new items are selected. - *

- * Indices that are out of range are ignored and no items will be selected - * if start is greater than end. If the receiver is single-select and there - * is more than one item in the given range, then all indices are ignored. - *

- * - * @param start - * the start index of the items to select - * @param end - * the end index of the items to select - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#deselectAll() - * @see Table#select(int,int) - */ - public void setSelection(int start, int end) { - checkWidget(); - deselectAll(); - if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) { - return; - } - int count = model.rowCount(); - if (count == 0 || start >= count) { - return; - } - start = Math.max(0, start); - end = Math.min(end, count - 1); - select(start, end); - showSelection(); - } - - /** - * Sets the column used by the sort indicator for the receiver. A null value - * will clear the sort indicator. The current sort column is cleared before - * the new column is set. - * - * @param column - * the column used by the sort indicator or null - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the column is disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setSortColumn(TableColumn column) { - checkWidget(); - if (column != null && column.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - sortColumn = column; - if (sortColumn != null && sortDirection != SWT.NONE) { - getQTableWidget().sortByColumn(column.getColumn(), getSortOrder()); - } - } - - private SortOrder getSortOrder() { - if ((sortDirection & SWT.UP) != 0) { - return SortOrder.AscendingOrder; - } - return SortOrder.DescendingOrder; - } - - /** - * Sets the direction of the sort indicator for the receiver. The value can - * be one of UP, DOWN or NONE. - * - * @param direction - * the direction of the sort indicator - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setSortDirection(int direction) { - checkWidget(); - if ((direction & (SWT.UP | SWT.DOWN)) == 0 && direction != SWT.NONE) { - return; - } - sortDirection = direction; - if (sortColumn != null && !sortColumn.isDisposed()) { - getQTableWidget().sortByColumn(sortColumn.getColumn(), getSortOrder()); - } - } - - /** - * Sets the zero-relative index of the item which is currently at the top of - * the receiver. This index can change when items are scrolled or new items - * are added and removed. - * - * @param index - * the index of the top item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setTopIndex(int index) { - checkWidget(); - if (!(0 <= index && index < model.rowCount())) { - return; - } - // int currentColumn = getQTableWidget().currentColumn(); - // QTableWidgetItem item = model.getItem(index).getCellItem(currentColumn); - // getQTableWidget().scrollToItem(item, ScrollHint.PositionAtTop); - } - - /** - * Shows the column. If the column is already showing in the receiver, this - * method simply returns. Otherwise, the columns are scrolled until the - * column is visible. - * - * @param column - * the column to be shown - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the column is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the column has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public void showColumn(TableColumn column) { - checkWidget(); - if (column == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (column.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (column.getParent() != this) { - return; - } - if (model.rowCount() == 0) { - return; - } - QModelIndex index = getQTableWidget().currentIndex(); - getQTableWidget().scrollTo(model.index(index.row(), model.indexOf(column))); - } - - /** - * Shows the item. If the item is already showing in the receiver, this - * method simply returns. Otherwise, the items are scrolled until the item - * is visible. - * - * @param item - * the item to be shown - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#showSelection() - */ - public void showItem(TableItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - int index = indexOf(item); - if (index != -1) { - showItem(index, 0); - } - } - - void showItem(int row, int col) { - getQTableWidget().scrollTo(model.index(row, col)); - } - - /** - * Shows the selection. If the selection is already showing in the receiver, - * this method simply returns. Otherwise, the items are scrolled until the - * selection is visible. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#showItem(TableItem) - */ - public void showSelection() { - checkWidget(); - getQTableWidget().scrollTo(getQTableWidget().selectionModel().currentIndex()); - } - - void update(boolean all) { - getQTableWidget().update(); - } - - private final class MyQTableWidget extends QTableView { - - @Override - protected void startDrag(DropActions supportedActions) { - // System.out.println("MyQTreeWidget.startDrag: " + supportedActions); - } - - @Override - protected void dropEvent(QDropEvent event) { - sendDropEvent(event); - } - - @Override - protected void dragMoveEvent(QDragMoveEvent event) { - sendDragMoveEvent(event); - } - - @Override - protected void dragEnterEvent(QDragEnterEvent event) { - sendDragEnterEvent(event); - } - - @Override - protected void dragLeaveEvent(QDragLeaveEvent event) { - sendDragLeaveEvent(event); - } - - } - - final class TableModel extends QAbstractTableModel { - private ArrayList rows; - private List columns; - private final boolean virtual; - - TableModel(boolean virtual) { - this.virtual = virtual; - init(); - } - - public void init() { - rows = new ArrayList(4); - columns = new ArrayList(4); - } - - @Override - public Object data(QModelIndex index, int role) { - int row = index.row(); - int column = index.column(); - TableItem rowItem = getRow(row); - switch (role) { - case DisplayRole: - return rowItem.getText(column); - case CheckStateRole: - if ((style & SWT.CHECK) != 0 && column == 0) { - return rowItem.getChecked(); - } - break; - case DecorationRole: - Image img = rowItem.getImage(column); - if (img != null) { - return img.getQPixmap(); - } - break; - case BackgroundRole: { - Color color = rowItem.getBackground(column); - if (color != null) { - return new QBrush(color.getColor()); - } - break; - } - case ForegroundRole: { - Color color = rowItem.getForeground(column); - if (color != null) { - return new QBrush(color.getColor()); - } - break; - } - } - return null; - } - - @Override - public boolean setData(QModelIndex index, Object value, int role) { - if (role == CheckStateRole) { - getRow(index.row()).setChecked(((Boolean) value).booleanValue()); - dataChanged.emit(index, index); - return true; - } - return super.setData(index, value, role); - } - - @Override - public ItemFlags flags(QModelIndex index) { - int column = index.column(); - if ((style & SWT.CHECK) != 0 && column == 0) { - return new ItemFlags(new ItemFlag[] { ItemFlag.ItemIsSelectable, ItemFlag.ItemIsEditable, - ItemFlag.ItemIsEnabled, ItemFlag.ItemIsUserCheckable }); - } - return super.flags(index); - } - - @Override - public int rowCount(QModelIndex index) { - return rows.size(); - } - - void setItemCount(int count) { - count = Math.max(0, count); - if (count < rows.size()) { - beginRemoveRows(null, rows.size(), count - 1); - for (int i = rows.size() - 1; i >= count; i--) { - TableItem row = rows.remove(i); - row.release(false); - } - endRemoveRows(); - } else { - beginInsertRows(null, rows.size(), count - 1); - rows.ensureCapacity(count); - boolean virtual = isVirtual(); - for (int i = rows.size(); i < count; i++) { - if (virtual) { - rows.add(null); - } else { - rows.add(new TableItem(Table.this, SWT.NONE, i)); - } - } - endInsertRows(); - } - } - - TableItem getRow(int index) { - TableItem item = rows.get(index); - if (item != null) { - return item; - } - if (!virtual) { - return null; - } - item = new TableItem(Table.this, SWT.NONE, index, false); - addItem(item, index, true); - return item; - } - - public TableItem[] getRows() { - TableItem[] out = new TableItem[rows.size()]; - if (virtual) { - int count = out.length; - for (int i = 0; i < count; i++) { - out[i] = getRow(i); - } - } else { - rows.toArray(out); - } - return out; - } - - int indexOf(TableItem row) { - return rows.indexOf(row); - } - - void addItem(TableItem rowItem, int row, boolean update) { - beginInsertRows(null, row, row); - // if we add items then we need an first column to hold them - if (columns.size() == 0) { - new TableColumn(Table.this, SWT.NONE); - } - if (update) { - rows.set(row, rowItem); - } else { - if (row == rows.size()) { - rows.add(rowItem); - } else { - rows.add(row, rowItem); - } - } - endInsertRows(); - getQTableWidget().setRowHeight(row, itemHeight); - } - - void cellChanged(TableItem rowItem, int column) { - int row = indexOf(rowItem); - QModelIndex index = index(row, column); - dataChanged.emit(index, index); - } - - void rowChanged(TableItem rowItem) { - int row = indexOf(rowItem); - dataChanged.emit(index(row, 0), index(row, columns.size() - 1)); - } - - void removeRow(TableItem row) { - removeRowItem(rows.indexOf(row)); - } - - void removeRowItem(int index) { - if (index != -1) { - beginRemoveRows(null, index, index); - TableItem item = rows.remove(index); - if (item != null && !item.isDisposed()) { - item.release(false); - } - endRemoveRows(); - } - } - - void removeItems(int[] indices) { - int[] newIndices = new int[indices.length]; - System.arraycopy(indices, 0, newIndices, 0, indices.length); - Arrays.sort(newIndices); - for (int i = indices.length - 1; i >= 0; i--) { - validateItemIndex(indices[i]); - removeRowItem(indices[i]); - } - } - - void clearAllItems() { - for (TableItem item : rows) { - if (item != null) { - item.clear(); - } - } - } - - @Override - public int columnCount(QModelIndex index) { - return columns.size(); - } - - TableColumn getColumn(int index) { - validateColumnIndex(index); - return columns.get(index); - } - - int indexOf(TableColumn column) { - return columns.indexOf(column); - } - - private void validateColumnIndex(int index) { - if (!(0 <= index && index < columnCount())) { - error(SWT.ERROR_INVALID_RANGE); - } - } - - void addColumn(TableColumn column, int index) { - if (!(0 <= index && index <= columnCount())) { - error(SWT.ERROR_INVALID_RANGE); - } - beginInsertColumns(null, index, index); - if (index == columns.size()) { - columns.add(column); - } else { - columns.add(index, column); - } - int columnCount = columns.size(); - for (TableItem item : rows) { - if (item != null) { - item.addColumn(index, columnCount); - } - } - endInsertColumns(); - } - - void removeColumn(TableColumn column) { - int index = columns.indexOf(column); - if (index == -1) { - return; - } - beginRemoveColumns(null, index, index); - int columnCount = columnCount(); - columns.remove(column); - for (TableItem item : rows) { - if (item != null) { - item.removeColumn(index, columnCount); - } - } - endRemoveColumns(); - } - - TableColumn[] getColumns() { - TableColumn[] out = new TableColumn[columns.size()]; - return columns.toArray(out); - } - - void release() { - releaseItems(); - releaseColumns(); - } - - private void releaseItems() { - beginRemoveRows(null, 0, rows.size() - 1); - for (TableItem item : rows) { - if (item != null && !item.isDisposed()) { - item.release(false); - } - } - rows.clear(); - endRemoveRows(); - } - - private void releaseColumns() { - beginRemoveColumns(null, 0, columns.size() - 1); - for (TableColumn column : columns) { - if (!column.isDisposed()) { - column.release(false); - } - } - columns.clear(); - endRemoveColumns(); - } - - @Override - public Object headerData(int index, Orientation orientation, int role) { - if (index >= columns.size()) { - return null; - } - switch (role) { - case DisplayRole: - return columnText(index); - case ToolTipRole: - return columnTooltip(index); - case TextAlignmentRole: - return columnAlignment(index); - } - return null; - } - - private Object columnAlignment(int index) { - int alignment = columns.get(index).getAlignment(); - switch (alignment) { - case SWT.LEFT: - return AlignmentFlag.AlignLeft; - case SWT.CENTER: - return AlignmentFlag.AlignCenter; - case SWT.RIGHT: - return AlignmentFlag.AlignRight; - } - return null; - } - - private Object columnText(int index) { - return columns.get(index).getText(); - } - - private Object columnTooltip(int index) { - return columns.get(index).getToolTipText(); - } - - void columnChanged(TableColumn column) { - int index = indexOf(column); - columnChanged(index, index); - } - - void columnChanged(int from, int to) { - headerDataChanged.emit(Orientation.Horizontal, from, to); - } - - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableColumn.java deleted file mode 100644 index 84e2e3da83..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableColumn.java +++ /dev/null @@ -1,664 +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 com.trolltech.qt.gui.QTableView; -import com.trolltech.qt.gui.QHeaderView.ResizeMode; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ControlListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Image; - -/** - * Instances of this class represent a column in a table widget. - *

- *

- *
Styles:
- *
LEFT, RIGHT, CENTER
- *
Events:
- *
Move, Resize, Selection
- *
- *

- *

- * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Table, TableItem, - * TableColumn snippets - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class TableColumn extends Item { - private Table parent; - private boolean resizable, moveable; - private String tooltip; - - /** - * Constructs a new instance of this class given its parent (which must be a - * Table) and a style value describing its behavior and - * appearance. The item is added to the end of the items maintained by its - * parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#LEFT - * @see SWT#RIGHT - * @see SWT#CENTER - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TableColumn(Table parent, int style) { - this(parent, style, parent.getColumnCount()); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Table), a style value describing its behavior and - * appearance, and the index at which to place it in the items maintained by - * its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- *

- * Note that due to a restriction on some platforms, the first column is - * always left aligned. - *

- * - * @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 - * @param index - * the zero-relative index to store the receiver in its parent - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the parent (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#LEFT - * @see SWT#RIGHT - * @see SWT#CENTER - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TableColumn(Table parent, int style, int index) { - super(parent, checkStyle(style)); - resizable = true; - this.parent = parent; - parent.addColumn(this, index); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is moved or resized, by sending it one of the messages - * defined in the ControlListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ControlListener - * @see #removeControlListener - */ - public void addControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Resize, typedListener); - addListener(SWT.Move, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * widgetSelected is called when the column header is selected. - * widgetDefaultSelected is not called. - *

- * - * @param listener - * the listener which should be notified when the control is - * selected by the user - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - static int checkStyle(int style) { - return checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - QTableView getQTableView() { - return parent.getQTableWidget(); - } - - int getColumn() { - return parent.indexOf(this); - } - - @Override - void destroyWidget() { - parent.removeColumn(this); - releaseQWidget(); - } - - /** - * Returns a value which describes the position of the text or image in the - * receiver. The value will be one of LEFT, RIGHT - * or CENTER. - * - * @return the alignment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getAlignment() { - checkWidget(); - if ((style & SWT.LEFT) != 0) { - return SWT.LEFT; - } - if ((style & SWT.CENTER) != 0) { - return SWT.CENTER; - } - if ((style & SWT.RIGHT) != 0) { - return SWT.RIGHT; - } - return SWT.LEFT; - } - - @Override - String getNameText() { - return getText(); - } - - /** - * Returns the receiver's parent, which must be a Table. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Table getParent() { - checkWidget(); - return parent; - } - - /** - * Gets the moveable attribute. A column that is not moveable cannot be - * reordered by the user by dragging the header but may be reordered by the - * programmer. - * - * @return the moveable attribute - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#getColumnOrder() - * @see Table#setColumnOrder(int[]) - * @see TableColumn#setMoveable(boolean) - * @see SWT#Move - * - * @since 3.1 - */ - public boolean getMoveable() { - checkWidget(); - return moveable; - } - - /** - * Gets the resizable attribute. A column that is not resizable cannot be - * dragged by the user but may be resized by the programmer. - * - * @return the resizable attribute - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getResizable() { - checkWidget(); - return resizable; - } - - protected int getPreferredColumnWidth(int index) { - if (index != -1) { - int width = getQTableView().sizeHintForColumn(index); - if (parent.getHeaderVisible()) { - width = Math.max(width, getQTableView().horizontalHeader().sectionSizeHint(index)); - } - return width; - } - return 0; - } - - /** - * Returns the receiver's tool tip text, or null if it has not been set. - * - * @return the receiver's tool tip text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public String getToolTipText() { - checkWidget(); - return this.tooltip; - } - - /** - * Gets the width of the receiver. - * - * @return the width - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getWidth() { - checkWidget(); - int index = getColumn(); - if (index == -1) { - return 0; - } - return getQTableView().columnWidth(index); - } - - /** - * Causes the receiver to be resized to its preferred size. For a composite, - * this involves computing the preferred size from its layout, if there is - * one. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - */ - public void pack() { - checkWidget(); - getQTableView().resizeColumnToContents(getColumn()); - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - parent = null; - } - - @Override - void releaseParent() { - super.releaseParent(); - if (parent.sortColumn == this) { - parent.sortColumn = null; - } - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is moved or resized. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ControlListener - * @see #addControlListener - */ - public void removeControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Move, listener); - eventTable.unhook(SWT.Resize, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Controls how text and images will be displayed in the receiver. The - * argument should be one of LEFT, RIGHT or - * CENTER. - *

- * Note that due to a restriction on some platforms, the first column is - * always left aligned. - *

- * - * @param alignment - * the new alignment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setAlignment(int alignment) { - checkWidget(); - if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) { - return; - } - style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER); - style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER); - parent.columnChanged(this); - } - - @Override - public void setImage(Image image) { - checkWidget(); - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - super.setImage(image); - parent.columnChanged(this); - } - - /** - * Sets the moveable attribute. A column that is moveable can be reordered - * by the user by dragging the header. A column that is not moveable cannot - * be dragged by the user but may be reordered by the programmer. - * - * @param moveable - * the moveable attribute - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Table#setColumnOrder(int[]) - * @see Table#getColumnOrder() - * @see TableColumn#getMoveable() - * @see SWT#Move - * - * @since 3.1 - */ - public void setMoveable(boolean moveable) { - checkWidget(); - this.moveable = moveable; - // TODO how to it for single column? - getQTableView().horizontalHeader().setMovable(moveable); - } - - /** - * Sets the resizable attribute. A column that is resizable can be resized - * by the user dragging the edge of the header. A column that is not - * resizable cannot be dragged by the user but may be resized by the - * programmer. - * - * @param resizable - * the resize attribute - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setResizable(boolean resizable) { - checkWidget(); - this.resizable = resizable; - ResizeMode resizeMode = resizable ? ResizeMode.Interactive : ResizeMode.Fixed; - int col = getColumn(); - if (col != -1) { - getQTableView().horizontalHeader().setResizeMode(col, resizeMode); - } - } - - @Override - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (string.equals(text)) { - return; - } - super.setText(string); - parent.columnChanged(this); - } - - /** - * Sets the receiver's tool tip text to the argument, which may be null - * indicating that the default tool tip for the control will be shown. For a - * control that has a default tool tip, such as the Tree control on Windows, - * setting the tool tip text to an empty string replaces the default, - * causing no tool tip text to be shown. - *

- * The mnemonic indicator (character '&') is not displayed in a tool - * tip. To display a single '&' in the tool tip, the character '&' - * can be escaped by doubling it in the string. - *

- * - * @param string - * the new tool tip text (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setToolTipText(String string) { - checkWidget(); - this.tooltip = string; - parent.columnChanged(this); - } - - /** - * Sets the width of the receiver. - * - * @param width - * the new width - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setWidth(int width) { - checkWidget(); - if (width < 0) { - return; - } - int index = getColumn(); - if (index == -1) { - return; - } - getQTableView().setColumnWidth(index, width); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableItem.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableItem.java deleted file mode 100644 index fc27cd11a4..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableItem.java +++ /dev/null @@ -1,1441 +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 com.trolltech.qt.core.Qt.FocusPolicy; -import com.trolltech.qt.gui.QRadioButton; -import com.trolltech.qt.gui.QTableView; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class represent a selectable user interface object that - * represents an item in a table. - *
- *
Styles:
- *
(none)
- *
Events:
- *
(none)
- *
- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Table, TableItem, - * TableColumn snippets - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class TableItem extends Item { - Table parent; - String[] strings; - Image[] images; - Font font; - Font[] cellFont; - boolean checked, grayed, cached; - int imageIndent; - Color background; - Color foreground; - int[] cellBackground, cellForeground; - private QRadioButton radioButton; - private boolean selected; - - /** - * Constructs a new instance of this class given its parent (which must be a - * Table) and a style value describing its behavior and - * appearance. The item is added to the end of the items maintained by its - * parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TableItem(Table parent, int style) { - this(parent, style, checkNull(parent).getItemCount(), true); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Table), a style value describing its behavior and - * appearance, and the index at which to place it in the items maintained by - * its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - * @param index - * the zero-relative index to store the receiver in its parent - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the parent (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TableItem(Table parent, int style, int index) { - this(parent, style, index, true); - } - - TableItem(Table parent, int style, int index, boolean create) { - super(parent, style); - this.parent = parent; - if (create) { - parent.addItem(this, index); - updateCheckAndRadioPropertyForRow(index); - } - setText(index, "");//$NON-NLS-1$ - } - - private void updateCheckAndRadioPropertyForRow(int row) { - if (radioButton == null && (parent.style & SWT.RADIO) != 0 && (parent.style & SWT.SINGLE) != 0) { - //TODO - radioButton = new QRadioButton(); - radioButton.released.connect(this, "radioButtonClickEvent()");//$NON-NLS-1$ - radioButton.setFocusPolicy(FocusPolicy.NoFocus); - //getQTableWidget().setCellWidget(row, 0, radioButton); - } - } - - protected void radioButtonClickEvent() { - sendEvent(SWT.Selection); - } - - static Table checkNull(Table control) { - if (control == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - return control; - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - QTableView getQTableWidget() { - return parent.getQTableWidget(); - } - - // int getRow() { - // return parent.indexOf(this); - // } - - void clear() { - text = "";//$NON-NLS-1$ - image = null; - font = null; - strings = null; - images = null; - imageIndent = 0; - checked = grayed = false; - if (background != null) { - background.dispose(); - background = null; - } - if (foreground != null) { - foreground.dispose(); - foreground = null; - } - cellFont = null; - cellBackground = cellForeground = null; - if (parent.isVirtual()) { - cached = false; - } - } - - @Override - void destroyWidget() { - parent.removeRow(this); - releaseQWidget(); - } - - /** - * Returns the receiver's background color. - * - * @return the background color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - */ - public Color getBackground() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - if (background == null) { - return parent.getBackground(); - } - return background; - } - - /** - * Returns the background color at the given column index in the receiver. - * - * @param index - * the column index - * @return the background color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public Color getBackground(int index) { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return getBackground(); - } - int pixel = cellBackground != null ? cellBackground[index] : -1; - return pixel == -1 ? getBackground() : Color.qt_new(display, pixel); - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent. - * - * @return the receiver's bounding rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public Rectangle getBounds() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - return getBounds(0); - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent at a column in the table. - * - * @param column - * the index that specifies the column - * @return the receiver's bounding column rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Rectangle getBounds(int column) { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - - if (column < 0 || column >= parent.getItemCount()) { - return new Rectangle(0, 0, 0, 0); - } - return parent.visualRect(this, column); - } - - /** - * Returns true if the receiver is checked, and false - * otherwise. When the parent does not have the CHECK style, - * return false. - * - * @return the checked state of the checkbox - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getChecked() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - if ((parent.style & SWT.CHECK) == 0) { - return false; - } - return checked; - } - - /** - * Returns the font that the receiver will use to paint textual information - * for this item. - * - * @return the receiver's font - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public Font getFont() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - return font != null ? font : parent.getFont(); - } - - /** - * Returns the font that the receiver will use to paint textual information - * for the specified cell in this item. - * - * @param index - * the column index - * @return the receiver's font - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public Font getFont(int index) { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return getFont(); - } - if (cellFont == null || cellFont[index] == null) { - return getFont(); - } - return cellFont[index]; - } - - /** - * Returns the foreground color that the receiver will use to draw. - * - * @return the receiver's foreground color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - */ - public Color getForeground() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - if (foreground == null) { - return parent.getForeground(); - } - return foreground; - } - - /** - * - * Returns the foreground color at the given column index in the receiver. - * - * @param index - * the column index - * @return the foreground color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public Color getForeground(int index) { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return getForeground(); - } - int pixel = cellForeground != null ? cellForeground[index] : -1; - return pixel == -1 ? getForeground() : Color.qt_new(display, pixel); - } - - /** - * Returns true if the receiver is grayed, and false otherwise. - * When the parent does not have the CHECK style, return false. - * - * @return the grayed state of the checkbox - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getGrayed() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - if ((parent.style & SWT.CHECK) == 0) { - return false; - } - return grayed; - } - - @Override - public Image getImage() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - return super.getImage(); - } - - /** - * Returns the image stored at the given column index in the receiver, or - * null if the image has not been set or if the column does not exist. - * - * @param index - * the column index - * @return the image stored at the given column index in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Image getImage(int index) { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - if (index == 0) { - return getImage(); - } - if (images != null) { - if (0 <= index && index < images.length) { - return images[index]; - } - } - return null; - } - - /** - * Returns a rectangle describing the size and location relative to its - * parent of an image at a column in the table. An empty rectangle is - * returned if index exceeds the index of the table's last column. - * - * @param index - * the index that specifies the column - * @return the receiver's bounding image rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Rectangle getImageBounds(int index) { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - //TODO - return getBounds(index); - } - - /** - * Gets the image indent. - * - * @return the indent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getImageIndent() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - return imageIndent; - } - - @Override - String getNameText() { - if ((parent.style & SWT.VIRTUAL) != 0) { - if (!cached) { - return "*virtual*"; //$NON-NLS-1$ - } - } - return super.getNameText(); - } - - /** - * Returns the receiver's parent, which must be a Table. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Table getParent() { - checkWidget(); - return parent; - } - - @Override - public String getText() { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - return super.getText(); - } - - /** - * Returns the text stored at the given column index in the receiver, or - * empty string if the text has not been set. - * - * @param index - * the column index - * @return the text stored at the given column index in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getText(int index) { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - if (index == 0) { - return getText(); - } - if (strings != null) { - if (0 <= index && index < strings.length) { - String string = strings[index]; - return string != null ? string : "";//$NON-NLS-1$ - } - } - return "";//$NON-NLS-1$ - } - - /** - * Returns a rectangle describing the size and location relative to its - * parent of the text at a column in the table. An empty rectangle is - * returned if index exceeds the index of the table's last column. - * - * @param index - * the index that specifies the column - * @return the receiver's bounding text rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.3 - */ - public Rectangle getTextBounds(int index) { - checkWidget(); - if (!parent.checkData(this, true)) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - //TODO - return getBounds(index); - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - radioButton = null; - parent = null; - } - - @Override - void releaseWidget() { - super.releaseWidget(); - strings = null; - images = null; - cellFont = null; - cellBackground = cellForeground = null; - } - - /** - * Sets the receiver's background color to the color specified by the - * argument, or to the default system color for the item if the argument is - * null. - * - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - */ - public void setBackground(Color color) { - checkWidget(); - if (color != null && color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - Color oldColor = background; - if (color == null) { - background = null; - } else { - if (color.equals(background)) { - return; - } - background = color; - } - if (oldColor != null) { - oldColor.dispose(); - } - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - - parent.rowChanged(this); - } - - /** - * Sets the background color at the given column index in the receiver to - * the color specified by the argument, or to the default system color for - * the item if the argument is null. - * - * @param index - * the column index - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public void setBackground(int index, Color color) { - checkWidget(); - if (color != null && color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - int pixel = -1; - if (color != null) { - pixel = color.getPixel(); - } - if (cellBackground == null) { - cellBackground = new int[count]; - for (int i = 0; i < count; i++) { - cellBackground[i] = -1; - } - } - if (cellBackground[index] == pixel) { - return; - } - cellBackground[index] = pixel; - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - parent.cellChanged(this, index); - // QBrush brush = new QBrush(QtSWTConverter.convert(color)); - // getCellItem(index).setBackground(brush); - } - - /** - * Sets the checked state of the checkbox for this item. This state change - * only applies if the Table was created with the SWT.CHECK style. - * - * @param checked - * the new checked state of the checkbox - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setChecked(boolean checked) { - checkWidget(); - if ((parent.style & SWT.CHECK) == 0) { - return; - } - if (this.checked == checked) { - return; - } - setChecked(checked, false); - } - - void setChecked(boolean checked, boolean notify) { - this.checked = checked; - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - if (notify) { - Event event = new Event(); - event.item = this; - event.detail = SWT.CHECK; - parent.postEvent(SWT.Selection, event); - } - parent.cellChanged(this, 0); - // CheckState state = checked ? CheckState.Checked : CheckState.Unchecked; - // getCellItem(0).setData(ItemDataRole.CheckStateRole, state); - } - - /** - * Sets the font that the receiver will use to paint textual information for - * this item to the font specified by the argument, or to the default font - * for that kind of control if the argument is null. - * - * @param font - * the new font (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public void setFont(Font font) { - checkWidget(); - if (font != null && font.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - Font oldFont = this.font; - if (oldFont == font) { - return; - } - this.font = font; - if (oldFont != null && oldFont.equals(font)) { - return; - } - if (font != null) { - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - } - parent.rowChanged(this); - // int row = getRow(); - // int columnCount = parent.getColumnCount(); - // for (int col = 0; col < columnCount; col++) { - // getCellItem(row, col).setFont(font.getQFont()); - // } - } - - /** - * Sets the font that the receiver will use to paint textual information for - * the specified cell in this item to the font specified by the argument, or - * to the default font for that kind of control if the argument is null. - * - * @param index - * the column index - * @param font - * the new font (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public void setFont(int index, Font font) { - checkWidget(); - if (font != null && font.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - if (cellFont == null) { - if (font == null) { - return; - } - cellFont = new Font[count]; - } - Font oldFont = cellFont[index]; - if (oldFont == font) { - return; - } - cellFont[index] = font; - if (oldFont != null && oldFont.equals(font)) { - return; - } - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - parent.cellChanged(this, index); - //getCellItem(index).setFont(font.getQFont()); - } - - /** - * Sets the receiver's foreground color to the color specified by the - * argument, or to the default system color for the item if the argument is - * null. - * - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - */ - public void setForeground(Color color) { - checkWidget(); - if (color != null && color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - Color oldColor = foreground; - if (color == null) { - foreground = null; - } else { - if (color.equals(foreground)) { - return; - } - foreground = color; - } - if (oldColor != null) { - oldColor.dispose(); - } - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - parent.rowChanged(this); - // int row = getRow(); - // int columnCount = parent.getColumnCount(); - // QBrush brush = null; - // if (foreground != null) { - // brush = new QBrush(foreground.getColor()); - // } - // for (int col = 0; col < columnCount; col++) { - // getCellItem(row, col).setForeground(brush); - // } - } - - /** - * Sets the foreground color at the given column index in the receiver to - * the color specified by the argument, or to the default system color for - * the item if the argument is null. - * - * @param index - * the column index - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public void setForeground(int index, Color color) { - checkWidget(); - if (color != null && color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - int pixel = -1; - if (color != null) { - pixel = color.getPixel(); - } - if (cellForeground == null) { - cellForeground = new int[count]; - for (int i = 0; i < count; i++) { - cellForeground[i] = -1; - } - } - if (cellForeground[index] == pixel) { - return; - } - cellForeground[index] = pixel; - if (parent.isVirtual()) { - cached = true; - } - parent.cellChanged(this, index); - //getCellItem(index).setForeground(new QBrush(QtSWTConverter.convert(color))); - } - - /** - * Sets the grayed state of the checkbox for this item. This state change - * only applies if the Table was created with the SWT.CHECK style. - * - * @param grayed - * the new grayed state of the checkbox; - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setGrayed(boolean grayed) { - checkWidget(); - if ((parent.style & SWT.CHECK) == 0) { - return; - } - if (this.grayed == grayed) { - return; - } - this.grayed = grayed; - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - parent.cellChanged(this, 0); - //getCellItem(0).setCheckState(CheckState.PartiallyChecked); - } - - /** - * Sets the image for multiple columns in the table. - * - * @param images - * the array of new images - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the array of images is null
  • - *
  • ERROR_INVALID_ARGUMENT - if one of the images has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setImage(Image[] images) { - checkWidget(); - if (images == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - for (int i = 0; i < images.length; i++) { - setImage(i, images[i]); - } - } - - /** - * Sets the receiver's image at a column. - * - * @param index - * the column index - * @param image - * the new image - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setImage(int index, Image image) { - checkWidget(); - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (index == 0) { - if (image != null && image.isIcon()) { - if (image.equals(this.image)) { - return; - } - } - super.setImage(image); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - if (images == null && index != 0) { - images = new Image[count]; - images[0] = image; - } - if (images != null) { - if (image != null && image.isIcon()) { - if (image.equals(images[index])) { - return; - } - } - images[index] = image; - } - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - parent.cellChanged(this, index); - //getCellItem(index).setIcon(image.getQIcon()); - } - - @Override - public void setImage(Image image) { - checkWidget(); - setImage(0, image); - } - - /** - * Sets the indent of the first column's image, expressed in terms of the - * image's width. - * - * @param indent - * the new indent - * - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @deprecated this functionality is not supported on most platforms - */ - @Deprecated - public void setImageIndent(int indent) { - checkWidget(); - //TODO - // if ( indent < 0 ) - // return; - // if ( imageIndent == indent ) - // return; - // imageIndent = indent; - // if ( ( parent.style & SWT.VIRTUAL ) != 0 ) { - // cached = true; - // } else { - // } - } - - /** - * Sets the text for multiple columns in the table. - * - * @param strings - * the array of new strings - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setText(String[] strings) { - checkWidget(); - if (strings == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - for (int i = 0; i < strings.length; i++) { - String string = strings[i]; - if (string != null) { - setText(i, string); - } - } - } - - /** - * Sets the receiver's text at a column - * - * @param index - * the column index - * @param string - * the new text - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setText(int index, String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (index == 0) { - if (string.equals(text)) { - return; - } - super.setText(string); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - if (strings == null && index != 0) { - strings = new String[count]; - strings[0] = text; - } - if (strings != null) { - if (string.equals(strings[index])) { - return; - } - strings[index] = string; - } - if (parent.isVirtual()) { - cached = true; - } - parent.cellChanged(this, index); - //getCellItem(index).setText(string); - } - - @Override - public void setText(String string) { - checkWidget(); - setText(0, string); - } - - void addColumn(int index, int columnCount) { - String[] strings = this.strings; - if (strings != null) { - String[] temp = new String[columnCount + 1]; - System.arraycopy(strings, 0, temp, 0, index); - System.arraycopy(strings, index, temp, index + 1, columnCount - index); - strings = temp; - } - Image[] images = this.images; - if (images != null) { - Image[] temp = new Image[columnCount + 1]; - System.arraycopy(images, 0, temp, 0, index); - System.arraycopy(images, index, temp, index + 1, columnCount - index); - this.images = temp; - } - if (index == 0) { - if (columnCount != 0) { - if (strings == null) { - this.strings = new String[columnCount + 1]; - this.strings[1] = text; - } - text = ""; //$NON-NLS-1$ - if (images == null) { - images = new Image[columnCount + 1]; - images[1] = image; - } - image = null; - } - } - if (cellBackground != null) { - int[] cellBackground = this.cellBackground; - int[] temp = new int[columnCount + 1]; - System.arraycopy(cellBackground, 0, temp, 0, index); - System.arraycopy(cellBackground, index, temp, index + 1, columnCount - index); - temp[index] = -1; - this.cellBackground = temp; - } - if (cellForeground != null) { - int[] cellForeground = this.cellForeground; - int[] temp = new int[columnCount + 1]; - System.arraycopy(cellForeground, 0, temp, 0, index); - System.arraycopy(cellForeground, index, temp, index + 1, columnCount - index); - temp[index] = -1; - this.cellForeground = temp; - } - if (cellFont != null) { - Font[] cellFont = this.cellFont; - Font[] temp = new Font[columnCount + 1]; - System.arraycopy(cellFont, 0, temp, 0, index); - System.arraycopy(cellFont, index, temp, index + 1, columnCount - index); - this.cellFont = temp; - } - } - - void removeColumn(int index, int columnCount) { - if (columnCount == 0) { - strings = null; - images = null; - cellBackground = null; - cellForeground = null; - cellFont = null; - } else { - if (strings != null) { - String[] strings = this.strings; - if (index == 0) { - text = strings[1] != null ? strings[1] : ""; //$NON-NLS-1$ - } - String[] temp = new String[columnCount]; - System.arraycopy(strings, 0, temp, 0, index); - System.arraycopy(strings, index + 1, temp, index, columnCount - index); - this.strings = temp; - } else { - if (index == 0) { - text = ""; //$NON-NLS-1$ - } - } - if (images != null) { - Image[] images = this.images; - if (index == 0) { - image = images[1]; - } - Image[] temp = new Image[columnCount]; - System.arraycopy(images, 0, temp, 0, index); - System.arraycopy(images, index + 1, temp, index, columnCount - index); - this.images = temp; - } else { - if (index == 0) { - image = null; - } - } - if (cellBackground != null) { - int[] cellBackground = this.cellBackground; - int[] temp = new int[columnCount]; - System.arraycopy(cellBackground, 0, temp, 0, index); - System.arraycopy(cellBackground, index + 1, temp, index, columnCount - index); - this.cellBackground = temp; - } - if (cellForeground != null) { - int[] cellForeground = this.cellForeground; - int[] temp = new int[columnCount]; - System.arraycopy(cellForeground, 0, temp, 0, index); - System.arraycopy(cellForeground, index + 1, temp, index, columnCount - index); - this.cellForeground = temp; - } - if (cellFont != null) { - Font[] cellFont = this.cellFont; - Font[] temp = new Font[columnCount]; - System.arraycopy(cellFont, 0, temp, 0, index); - System.arraycopy(cellFont, index + 1, temp, index, columnCount - index); - this.cellFont = temp; - } - } - - } - - void setSelected(boolean selected) { - this.selected = selected; - // int columns = parent.getColumnCount(); - parent.cellChanged(this, 0); - // int row = getRow(); - // for (int col = 0; col < columns; col++) { - // //getCellItem(row, col).setSelected(selected); - // } - if ((parent.style & SWT.SINGLE) != 0 && (parent.style & SWT.RADIO) != 0) { - radioButton.setChecked(selected); - } - } - - public boolean isSelected() { - return selected; - - // int columns = parent.getColumnCount(); - // int row = getRow(); - // for (int col = 0; col < columns; col++) { - // //TODO - // // if (getCellItem(row, col).isSelected()) { - // // return true; - // // } - // } - // return false; - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Text.java deleted file mode 100644 index c456792f05..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Text.java +++ /dev/null @@ -1,1875 +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 com.trolltech.qt.core.QPoint; -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.Qt.LayoutDirection; -import com.trolltech.qt.gui.QAbstractScrollArea; -import com.trolltech.qt.gui.QContentsMargins; -import com.trolltech.qt.gui.QFontMetrics; -import com.trolltech.qt.gui.QLineEdit; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QScrollBar; -import com.trolltech.qt.gui.QSizePolicy; -import com.trolltech.qt.gui.QStyle; -import com.trolltech.qt.gui.QTextBlock; -import com.trolltech.qt.gui.QTextCursor; -import com.trolltech.qt.gui.QTextDocument; -import com.trolltech.qt.gui.QTextEdit; -import com.trolltech.qt.gui.QTextLayout; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QFrame.Shape; -import com.trolltech.qt.gui.QLineEdit.EchoMode; -import com.trolltech.qt.gui.QTextCursor.MoveMode; -import com.trolltech.qt.gui.QTextCursor.MoveOperation; -import com.trolltech.qt.gui.QTextEdit.LineWrapMode; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.events.VerifyListener; -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 are selectable user interface objects that allow the - * user to enter and modify text. Text controls can be either single or - * multi-line. When a text control is created with a border, the operating - * system includes a platform specific inset around the contents of the control. - * When created without a border, an effort is made to remove the inset such - * that the preferred size of the control is the same size as the contents. - *

- *

- *
Styles:
- *
CENTER, ICON_CANCEL, ICON_SEARCH, LEFT, MULTI, PASSWORD, SEARCH, SINGLE, - * RIGHT, READ_ONLY, WRAP
- *
Events:
- *
DefaultSelection, Modify, Verify
- *
- *

- * Note: Only one of the styles MULTI and SINGLE may be specified, and only one - * of the styles LEFT, CENTER, and RIGHT may be specified. - *

- *

- * Note: The styles ICON_CANCEL and ICON_SEARCH are hints used in combination - * with SEARCH. When the platform supports the hint, the text control shows - * these icons. When an icon is selected, a default selection event is sent with - * the detail field set to one of ICON_CANCEL or ICON_SEARCH. Normally, - * application code does not need to check the detail. In the case of - * ICON_CANCEL, the text is cleared before the default selection event is sent - * causing the application to search for an empty string. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Text snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class Text extends Scrollable { - private static final int minimumLineSpacing = 14; - private static final int verticalMargin = 1; - private static final int horizontalMargin = 2; - - int tabs = 8; - int oldStart, oldEnd; - boolean doubleClick, ignoreModify, ignoreVerify, ignoreCharacter; - private int textLimit; - /** - * The maximum number of characters that can be entered into a text widget. - *

- * Note that this value is platform dependent, based upon the native widget - * implementation. - *

- */ - public static final int LIMIT; - - /** - * The delimiter used by multi-line text widgets. When text is queried and - * from the widget, it will be delimited using this delimiter. - */ - public static final String DELIMITER; - - /* - * These values can be different on different platforms. Therefore they are - * not initialized in the declaration to stop the compiler from inlining. - */ - static { - // LIMIT is the default maxlength of the QLineEdit - LIMIT = new QLineEdit().maxLength(); - DELIMITER = "\n";//$NON-NLS-1$ - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#SINGLE - * @see SWT#MULTI - * @see SWT#READ_ONLY - * @see SWT#WRAP - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Text(Composite parent, int style) { - super(parent, checkStyle(style)); - setTabStops(tabs); - } - - boolean isSingleLineEdit() { - return (style & SWT.MULTI) == 0; - } - - @Override - protected QWidget createQWidget(int style) { - doubleClick = true; - if (isSingleLineEdit()) { - return createQLineEdit(style); - } - return createQTextEdit(style); - } - - QLineEdit createQLineEdit(int style) { - QLineEdit lineEdit = new QLineEdit(); - if ((style & SWT.READ_ONLY) != 0) { - lineEdit.setReadOnly(true); - } - if ((style & SWT.PASSWORD) != 0) { - lineEdit.setEchoMode(EchoMode.Password); - } - lineEdit.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum); - lineEdit.setContentsMargins(0, 0, 0, 0); - - connectQLineEditSignals(lineEdit); - - lineEdit.setFrame(false); - - return lineEdit; - } - - QWidget createQTextEdit(int style) { - QTextEdit textEdit = new MyQTextEdit(); - if ((style & SWT.READ_ONLY) != 0) { - textEdit.setReadOnly(true); - } - if ((style & SWT.WRAP) != 0) { - textEdit.setLineWrapMode(LineWrapMode.WidgetWidth); - } else { - textEdit.setLineWrapMode(LineWrapMode.NoWrap); - } - connectQTextEditSignals(textEdit); - - textEdit.setFrameShape(Shape.NoFrame); - textEdit.setLineWidth(0); - - return textEdit; - } - - @Override - protected void checkAndUpdateBorder(QWidget control) { - if (isSingleLineEdit()) { - if ((style & SWT.BORDER) != 0) { - getQLineEdit().setFrame(true); - } - } else { - super.checkAndUpdateBorder(control); - } - } - - protected void connectQLineEditSignals(QLineEdit lineEdit) { - lineEdit.textChanged.connect(this, "textChangeEvent(String)"); //$NON-NLS-1$ - } - - protected void connectQTextEditSignals(QTextEdit textEdit) { - textEdit.textChanged.connect(this, "textChangeEvent()"); //$NON-NLS-1$ - } - - protected void textChangeEvent() { - textChangeEvent(null); - } - - protected void textChangeEvent(String text) { - Event event = new Event(); - event.data = text; - sendEvent(SWT.Modify, event); - } - - @Override - void registerQWidget() { - super.registerQWidget(); - if (!isSingleLineEdit()) { - display.addControl(getQTextEdit().viewport(), this); - } - } - - @Override - void deregisterQWidget() { - if (!isSingleLineEdit()) { - display.removeControl(getQTextEdit().viewport()); - } - super.deregisterQWidget(); - } - - private QLineEdit getQLineEdit() { - return (QLineEdit) getQWidget(); - } - - private QTextEdit getQTextEdit() { - return (QTextEdit) getQWidget(); - } - - @Override - QAbstractScrollArea getQScrollArea() { - if (!isSingleLineEdit()) { - return getQTextEdit(); - } - return null; - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver's text is modified, by sending it one of the messages - * defined in the ModifyListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ModifyListener - * @see #removeModifyListener - */ - public void addModifyListener(ModifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Modify, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * widgetSelected is not called for texts. - * widgetDefaultSelected is typically called when ENTER is - * pressed in a single-line text, or when ENTER is pressed in a search text. - * If the receiver has the SWT.SEARCH | SWT.CANCEL style and - * the user cancels the search, the event object detail field contains the - * value SWT.CANCEL. - *

- * - * @param listener - * the listener which should be notified when the control is - * selected by the user - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver's text is verified, by sending it one of the messages - * defined in the VerifyListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see VerifyListener - * @see #removeVerifyListener - */ - public void addVerifyListener(VerifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Verify, typedListener); - } - - /** - * Appends a string. - *

- * The new text is appended to the text at the end of the widget. - *

- * - * @param string - * the string to be appended - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the string is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void append(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - string = Display.withCrLf(string); - if (isSingleLineEdit()) { - getQLineEdit().setText(getQLineEdit().text() + string); - } else { - getQTextEdit().append(string); - } - } - - static int checkStyle(int style) { - if ((style & SWT.SEARCH) != 0) { - style |= SWT.SINGLE | SWT.BORDER; - style &= ~SWT.PASSWORD; - style &= ~SWT.ICON_CANCEL; - /* - * NOTE: ICON_CANCEL has the same value as H_SCROLL and ICON_SEARCH - * has the same value as V_SCROLL so they are cleared because - * SWT.SINGLE is set. - */ - } - if ((style & SWT.SINGLE) != 0 && (style & SWT.MULTI) != 0) { - style &= ~SWT.MULTI; - } - style = checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0); - if ((style & SWT.SINGLE) != 0) { - style &= ~(SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP); - } - if ((style & SWT.WRAP) != 0) { - style |= SWT.MULTI; - style &= ~SWT.H_SCROLL; - } - if ((style & SWT.MULTI) != 0) { - style &= ~SWT.PASSWORD; - } - if ((style & (SWT.SINGLE | SWT.MULTI)) != 0) { - return style; - } - if ((style & (SWT.H_SCROLL | SWT.V_SCROLL)) != 0) { - return style | SWT.MULTI; - } - return style | SWT.SINGLE; - } - - /** - * Clears the selection. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void clearSelection() { - checkWidget(); - if (isSingleLineEdit()) { - getQLineEdit().setCursorPosition(getQLineEdit().cursorPosition()); - } else { - getQTextEdit().textCursor().clearSelection(); - } - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - - if (wHint != SWT.DEFAULT && wHint < 0) { - wHint = SWT.DEFAULT; - } - if (hHint != SWT.DEFAULT && hHint < 0) { - hHint = SWT.DEFAULT; - } - - Point preferredSize; - if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) { - preferredSize = new Point(wHint, hHint); - } else if (isSingleLineEdit()) { - if (wHint == SWT.DEFAULT && hHint == SWT.DEFAULT) { - preferredSize = getPreferredSingleLineClientAreaSize(); - } else if (hHint == SWT.DEFAULT) { - preferredSize = new Point(wHint, getPreferredSingleLineClientAreaSize().y); - } else { - preferredSize = new Point(getPreferredSingleLineClientAreaSize().x, hHint); - } - } else { - if (wHint == SWT.DEFAULT && hHint == SWT.DEFAULT) { - preferredSize = getPreferredClientAreaSize(-1); - } else if (hHint == SWT.DEFAULT) { - preferredSize = new Point(wHint, getPreferredClientAreaSize(wHint).y); - } else { - preferredSize = new Point(getPreferredClientAreaSize(hHint).y, hHint); - } - } - - Rectangle trim = computeTrim(0, 0, preferredSize.x, preferredSize.y); - - return new Point(trim.width, trim.height); - } - - private Point getPreferredSingleLineClientAreaSize() { - QFontMetrics fm = new QFontMetrics(getQLineEdit().font()); - QContentsMargins margins = getQLineEdit().getContentsMargins(); - int left = margins.left; - int top = margins.top; - int right = margins.right; - int bottom = margins.bottom; - int h = Math.max(fm.lineSpacing(), minimumLineSpacing) + 2 * verticalMargin + top + bottom; - int w = fm.width(getQLineEdit().text()) + 2 * horizontalMargin + left + right; - Point size = new Point(w, h); - if (size == null) { - return new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT); - } - if (size.x < 0) { - size.x = DEFAULT_WIDTH; - } - if (size.y < 0) { - size.y = DEFAULT_HEIGHT; - } - return size; - } - - private Point getPreferredClientAreaSize(int wHint) { - QTextDocument doc = getQTextEdit().document(); - Point size = null; - if (doc != null) { - double oldTextWidth = doc.textWidth(); - if (wHint >= 0) { - doc.setTextWidth(wHint); - } else { - doc.adjustSize(); - } - QSize preferredSize = doc.size().toSize(); - doc.setTextWidth(oldTextWidth); - size = new Point(preferredSize.width(), preferredSize.height()); - } - - if (size == null) { - return new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT); - } - if (size.x < 0) { - size.x = DEFAULT_WIDTH; - } - if (size.y < 0) { - size.y = DEFAULT_HEIGHT; - } - return size; - } - - @Override - public Rectangle computeTrim(int x, int y, int width, int height) { - checkWidget(); - if (isSingleLineEdit()) { - if ((style & SWT.BORDER) != 0) { - int border = 0; - QStyle style = getQWidget().style(); - if (style != null) { - border = style.pixelMetric(QStyle.PixelMetric.PM_DefaultFrameWidth); - } - x -= border; - y -= border; - width += 2 * border; - height += 2 * border; - } - return new Rectangle(x, y, width, height); - } - return super.computeTrim(x, y, width, height); - } - - /** - * Copies the selected text. - *

- * The current selection is copied to the clipboard. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void copy() { - checkWidget(); - if (isSingleLineEdit()) { - getQLineEdit().copy(); - } else { - getQTextEdit().copy(); - } - } - - /** - * Cuts the selected text. - *

- * The current selection is first copied to the clipboard and then deleted - * from the widget. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void cut() { - checkWidget(); - if (isSingleLineEdit()) { - getQLineEdit().cut(); - } else { - getQTextEdit().cut(); - } - } - - /** - * Returns the line number of the caret. - *

- * The line number of the caret is returned. - *

- * - * @return the line number - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getCaretLineNumber() { - checkWidget(); - if (!isSingleLineEdit()) { - int lineNumber = 0; - QTextCursor textCursor = getQTextEdit().textCursor(); - QTextBlock textBlock = textCursor.block(); - QTextLayout textLayout = textBlock.layout(); - if (textLayout != null) { - lineNumber = textLayout.lineForTextPosition(textCursor.position() - textBlock.position()).lineNumber(); - } - lineNumber += getNumberOfPrecedingTextLines(textBlock); - return lineNumber; - } - return 0; - } - - private int getNumberOfPrecedingTextLines(QTextBlock textBlock) { - int lineCount = 0; - while (textBlock.isValid()) { - QTextLayout textLayout = textBlock.layout(); - if (textLayout != null) { - int lines = textLayout.lineCount(); - lineCount += lines > 0 ? lines : 1; - } - textBlock = textBlock.previous(); - } - return lineCount; - } - - /** - * Returns a point describing the receiver's location relative to its parent - * (or its display if its parent is null). - *

- * The location of the caret is returned. - *

- * - * @return a point, the location of the caret - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Point getCaretLocation() { - checkWidget(); - if (isSingleLineEdit()) { - return new Point(0, 0); - } - return QtSWTConverter.convertPosition(getQTextEdit().cursorRect()); - } - - /** - * Returns the character position of the caret. - *

- * Indexing is zero based. - *

- * - * @return the position of the caret - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getCaretPosition() { - checkWidget(); - if (isSingleLineEdit()) { - return getQLineEdit().cursorPosition(); - } - return getQTextEdit().textCursor().position(); - } - - /** - * Returns the number of characters. - * - * @return number of characters in the widget - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getCharCount() { - checkWidget(); - if (isSingleLineEdit()) { - return getText().length(); - - } - QTextCursor cursor = getQTextEdit().textCursor(); - int oldPosition = cursor.position(); - cursor.movePosition(MoveOperation.End); - int count = cursor.position(); - cursor.setPosition(oldPosition); - return count; - } - - /** - * Returns the double click enabled flag. - *

- * The double click flag enables or disables the default action of the text - * widget when the user double clicks. - *

- * - * @return whether or not double click is enabled - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getDoubleClickEnabled() { - checkWidget(); - return doubleClick; - } - - /** - * Returns the echo character. - *

- * The echo character is the character that is displayed when the user - * enters text or the text is changed by the programmer. - *

- * - * @return the echo character - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #setEchoChar - */ - public char getEchoChar() { - checkWidget(); - if (isSingleLineEdit()) { - if ((style & SWT.PASSWORD) != 0) { - return '*'; - } - } - return '\0'; - } - - /** - * Returns the editable state. - * - * @return whether or not the receiver is editable - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getEditable() { - checkWidget(); - if (isSingleLineEdit()) { - return !getQLineEdit().isReadOnly(); - } - return !getQTextEdit().isReadOnly(); - } - - /** - * Returns the number of lines. - * - * @return the number of lines in the widget - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getLineCount() { - checkWidget(); - if (isSingleLineEdit()) { - return 1; - } - QTextDocument textDocument = getQTextEdit().document(); - if (textDocument != null) { - return getNumberOfPrecedingTextLines(textDocument.end()); - } - return 0; - } - - /** - * Returns the line delimiter. - * - * @return a string that is the line delimiter - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #DELIMITER - */ - public String getLineDelimiter() { - checkWidget(); - return DELIMITER; - } - - /** - * Returns the height of a line. - * - * @return the height of a row of text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getLineHeight() { - checkWidget(); - if (isSingleLineEdit()) { - return getQLineEdit().fontMetrics().lineSpacing(); - } - QTextLayout textLayout = getQTextEdit().textCursor().block().layout(); - if (textLayout != null) { - return (int) Math.round(textLayout.lineAt(0).height()); - } - return 0; - } - - /** - * Returns the orientation of the receiver, which will be one of the - * constants SWT.LEFT_TO_RIGHT or - * SWT.RIGHT_TO_LEFT. - * - * @return the orientation style - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.1.2 - */ - public int getOrientation() { - checkWidget(); - return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT); - } - - /** - * Returns the widget message. The message text is displayed as a hint for - * the user, indicating the purpose of the field. - *

- * Typically this is used in conjunction with SWT.SEARCH. - *

- * - * @return the widget message - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.3 - */ - public String getMessage() { - checkWidget(); - return getQWidget().whatsThis(); - } - - /** - * Returns the character position at the given point in the receiver or -1 - * if no such position exists. The point is in the coordinate system of the - * receiver. - *

- * Indexing is zero based. - *

- * - * @return the position of the caret - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.3 - */ - // TODO - Javadoc - // /* public */int getPosition( Point point ) { - // checkWidget(); - // if ( point == null ) - // error( SWT.ERROR_NULL_ARGUMENT ); - // int /* long */lParam = OS.MAKELPARAM( point.x, point.y ); - // int position = OS.LOWORD( OS.SendMessage( handle, OS.EM_CHARFROMPOS, 0, - // lParam ) ); - // if ( !OS.IsUnicode && OS.IsDBLocale ) - // position = mbcsToWcsPos( position ); - // return position; - // } - - /** - * Returns a Point whose x coordinate is the character position - * representing the start of the selected text, and whose y coordinate is - * the character position representing the end of the selection. An "empty" - * selection is indicated by the x and y coordinates having the same value. - *

- * Indexing is zero based. The range of a selection is from 0..N where N is - * the number of characters in the widget. - *

- * - * @return a point representing the selection start and end - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Point getSelection() { - checkWidget(); - if (isSingleLineEdit()) { - int selectionStart = getQLineEdit().selectionStart(); - if (selectionStart == -1) { - int cursorPos = getQLineEdit().cursorPosition(); - return new Point(cursorPos, cursorPos); - } - return new Point(selectionStart, selectionStart + getQLineEdit().selectedText().length()); - } - int start = getQTextEdit().textCursor().selectionStart(); - int end = getQTextEdit().textCursor().selectionStart(); - return new Point(Math.min(start, end), Math.max(start, end)); - } - - /** - * Returns the number of selected characters. - * - * @return the number of selected characters. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelectionCount() { - checkWidget(); - Point selection = getSelection(); - return Math.abs(selection.y - selection.x); - } - - /** - * Gets the selected text, or an empty string if there is no current - * selection. - * - * @return the selected text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getSelectionText() { - checkWidget(); - if (isSingleLineEdit()) { - return getQLineEdit().selectedText(); - } - return getQTextEdit().textCursor().selectedText(); - } - - /** - * Returns the number of tabs. - *

- * Tab stop spacing is specified in terms of the space (' ') character. The - * width of a single tab stop is the pixel width of the spaces. - *

- * - * @return the number of tab characters - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getTabs() { - checkWidget(); - return tabs; - } - - /** - * Returns the widget text. - *

- * The text for a text widget is the characters in the widget, or an empty - * string if this has never been set. - *

- * - * @return the widget text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getText() { - checkWidget(); - if (isSingleLineEdit()) { - return getQLineEdit().text(); - } - return getQTextEdit().toPlainText(); - } - - /** - * Returns a range of text. Returns an empty string if the start of the - * range is greater than the end. - *

- * Indexing is zero based. The range of a selection is from 0..N-1 where N - * is the number of characters in the widget. - *

- * - * @param start - * the start of the range - * @param end - * the end of the range - * @return the range of text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getText(int start, int end) { - checkWidget(); - if (start > end || end < 0) { - return "";//$NON-NLS-1$ - } - - String text = getText(); - if (text != null) { - if (start >= text.length()) { - text = "";//$NON-NLS-1$ - } else { - start = Math.max(0, start); - end = Math.min(end, text.length() - 1); - text = text.substring(start, end + 1); - } - } - return text; - } - - /** - * Returns the maximum number of characters that the receiver is capable of - * holding. - *

- * If this has not been changed by setTextLimit(), it will be - * the constant Text.LIMIT. - *

- * - * @return the text limit - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #LIMIT - */ - public int getTextLimit() { - checkWidget(); - if (isSingleLineEdit()) { - return getQLineEdit().maxLength(); - } - return textLimit > 0 ? textLimit : LIMIT; - } - - /** - * Returns the zero-relative index of the line which is currently at the top - * of the receiver. - *

- * This index can change when lines are scrolled or new lines are added or - * removed. - *

- * - * @return the index of the top line - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getTopIndex() { - checkWidget(); - if (isSingleLineEdit()) { - return 0; - } - QScrollBar scrollBar = getQTextEdit().verticalScrollBar(); - int index = 0; - if (scrollBar != null) { - int top = scrollBar.value(); - QTextCursor textCursor = getQTextEdit().cursorForPosition(new QPoint(0, 0)); - QTextBlock topBlock = textCursor.block(); - QTextLayout layout = topBlock.layout(); - if (layout != null && layout.position().y() < top) { - int layoutPos = (int) Math.round(layout.position().y()); - for (int i = 0; i < layout.lineCount() - && layoutPos + layout.lineAt(i).rect().bottom() <= top + layout.lineAt(i).rect().height() / 2; ++i) { - ++index; - } - } - index += getNumberOfPrecedingTextLines(topBlock); - } - return 0; - } - - /** - * Returns the top pixel. - *

- * The top pixel is the pixel position of the line that is currently at the - * top of the widget. On some platforms, a text widget can be scrolled by - * pixels instead of lines so that a partial line is displayed at the top of - * the widget. - *

- *

- * The top pixel changes when the widget is scrolled. The top pixel does not - * include the widget trimming. - *

- * - * @return the pixel position of the top line - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getTopPixel() { - checkWidget(); - if (isSingleLineEdit()) { - return 0; - } - return getQTextEdit().verticalScrollBar().value(); - } - - /** - * Inserts a string. - *

- * The old selection is replaced with the new text. - *

- * - * @param string - * the string - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the string is - * null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void insert(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - string = Display.withCrLf(string); - getQLineEdit().insert(string); - } - - /** - * Pastes text from clipboard. - *

- * The selected text is deleted from the widget and new text inserted from - * the clipboard. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void paste() { - checkWidget(); - if (isSingleLineEdit()) { - getQLineEdit().paste(); - } else { - getQTextEdit().paste(); - } - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the receiver's text is modified. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ModifyListener - * @see #addModifyListener - */ - public void removeModifyListener(ModifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Modify, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is verified. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see VerifyListener - * @see #addVerifyListener - */ - public void removeVerifyListener(VerifyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Verify, listener); - } - - /** - * Selects all the text in the receiver. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void selectAll() { - checkWidget(); - if (isSingleLineEdit()) { - getQLineEdit().selectAll(); - } else { - QTextCursor textCursor = getQTextEdit().textCursor(); - textCursor.select(QTextCursor.SelectionType.Document); - getQTextEdit().setTextCursor(textCursor); - } - } - - /** - * Sets the double click enabled flag. - *

- * The double click flag enables or disables the default action of the text - * widget when the user double clicks. - *

- *

- * Note: This operation is a hint and is not supported on platforms that do - * not have this concept. - *

- * - * @param doubleClick - * the new double click flag - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setDoubleClickEnabled(boolean doubleClick) { - checkWidget(); - this.doubleClick = doubleClick; - } - - /** - * Sets the echo character. - *

- * The echo character is the character that is displayed when the user - * enters text or the text is changed by the programmer. Setting the echo - * character to '\0' clears the echo character and redraws the original - * text. If for any reason the echo character is invalid, or if the platform - * does not allow modification of the echo character, the default echo - * character for the platform is used. - *

- * - * @param echo - * the new echo character - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setEchoChar(char echo) { - checkWidget(); - if (isSingleLineEdit()) { - if (echo == '\0') { - getQLineEdit().setEchoMode(EchoMode.Normal); - } else { - getQLineEdit().setEchoMode(EchoMode.Password); - } - } - } - - /** - * Sets the editable state. - * - * @param editable - * the new editable state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setEditable(boolean editable) { - checkWidget(); - if (isSingleLineEdit()) { - getQLineEdit().setReadOnly(!editable); - } else { - getQTextEdit().setReadOnly(!editable); - } - } - - @Override - public void setFont(Font font) { - checkWidget(); - super.setFont(font); - setTabStops(tabs); - } - - /** - * Sets the widget message. The message text is displayed as a hint for the - * user, indicating the purpose of the field. - *

- * Typically this is used in conjunction with SWT.SEARCH. - *

- * - * @param message - * the new message - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the message is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.3 - */ - public void setMessage(String message) { - checkWidget(); - getQWidget().setWhatsThis(message); - } - - /** - * Sets the orientation of the receiver, which must be one of the constants - * SWT.LEFT_TO_RIGHT or SWT.RIGHT_TO_LEFT. - *

- * Note: This operation is a hint and is not supported on platforms that do - * not have this concept. - *

- * - * @param orientation - * new orientation style - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.1.2 - */ - public void setOrientation(int orientation) { - checkWidget(); - int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT; - if ((orientation & flags) == 0 || (orientation & flags) == flags) { - return; - } - - style &= ~flags; - style |= orientation & flags; - - LayoutDirection direction = LayoutDirection.LeftToRight; - if (orientation == SWT.RIGHT_TO_LEFT) { - direction = LayoutDirection.RightToLeft; - } - getQWidget().setLayoutDirection(direction); - } - - /** - * Sets the selection. - *

- * Indexing is zero based. The range of a selection is from 0..N where N is - * the number of characters in the widget. - *

- *

- * Text selections are specified in terms of caret positions. In a text - * widget that contains N characters, there are N+1 caret positions, ranging - * from 0..N. This differs from other functions that address character - * position such as getText () that use the regular array indexing rules. - *

- * - * @param start - * new caret position - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(int start) { - checkWidget(); - setSelection(start, start); - } - - /** - * Sets the selection to the range specified by the given start and end - * indices. - *

- * Indexing is zero based. The range of a selection is from 0..N where N is - * the number of characters in the widget. - *

- *

- * Text selections are specified in terms of caret positions. In a text - * widget that contains N characters, there are N+1 caret positions, ranging - * from 0..N. This differs from other functions that address character - * position such as getText () that use the usual array indexing rules. - *

- * - * @param start - * the start of the range - * @param end - * the end of the range - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(int start, int end) { - checkWidget(); - int length = getCharCount(); - start = Math.min(Math.max(0, start), length); - end = Math.min(Math.max(0, end), length); - - if (isSingleLineEdit()) { - getQLineEdit().setSelection(start, end - start); - } else { - setCursorPosition(start, true); - setCursorPosition(end, false); - } - - } - - private void setCursorPosition(int pos, boolean moveAnchor) { - QTextCursor textCursor = getQTextEdit().textCursor(); - textCursor.setPosition(pos, moveAnchor ? MoveMode.MoveAnchor : MoveMode.KeepAnchor); - getQTextEdit().setTextCursor(textCursor); - } - - /** - * Sets the selection to the range specified by the given point, where the x - * coordinate represents the start index and the y coordinate represents the - * end index. - *

- * Indexing is zero based. The range of a selection is from 0..N where N is - * the number of characters in the widget. - *

- *

- * Text selections are specified in terms of caret positions. In a text - * widget that contains N characters, there are N+1 caret positions, ranging - * from 0..N. This differs from other functions that address character - * position such as getText () that use the usual array indexing rules. - *

- * - * @param selection - * the point - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the point is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(Point selection) { - checkWidget(); - if (selection == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setSelection(selection.x, selection.y); - } - - /** - * Sets the number of tabs. - *

- * Tab stop spacing is specified in terms of the space (' ') character. The - * width of a single tab stop is the pixel width of the spaces. - *

- * - * @param tabs - * the number of tabs - * - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setTabs(int tabs) { - checkWidget(); - if (tabs < 0) { - return; - } - this.tabs = tabs; - setTabStops(this.tabs); - } - - void setTabStops(int tabs) { - if (!isSingleLineEdit()) { - getQTextEdit().setTabStopWidth(getQTextEdit().fontMetrics().width(" ") * tabs);//$NON-NLS-1$ - } - } - - /** - * Sets the contents of the receiver to the given string. If the receiver - * has style SINGLE and the argument contains multiple lines of text, the - * result of this operation is undefined and may vary from platform to - * platform. - * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the string is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - string = Display.withCrLf(string); - if (isSingleLineEdit()) { - getQLineEdit().setText(string); - } else { - getQTextEdit().setText(string); - } - } - - /** - * Sets the maximum number of characters that the receiver is capable of - * holding to be the argument. - *

- * Instead of trying to set the text limit to zero, consider creating a - * read-only text widget. - *

- *

- * To reset this value to the default, use - * setTextLimit(Text.LIMIT). Specifying a limit value larger - * than Text.LIMIT sets the receiver's limit to - * Text.LIMIT. - *

- * - * @param limit - * new text limit - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_CANNOT_BE_ZERO - if the limit is zero
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #LIMIT - */ - public void setTextLimit(int limit) { - checkWidget(); - if (limit == 0) { - error(SWT.ERROR_CANNOT_BE_ZERO); - } - - if (limit < 0 || limit > LIMIT) { - limit = LIMIT; - } - - if (isSingleLineEdit()) { - getQLineEdit().setMaxLength(limit); - } else { - textLimit = limit; - if (getCharCount() > limit) { - getQTextEdit().setPlainText(getText().substring(0, limit)); - } - } - } - - /** - * Sets the zero-relative index of the line which is currently at the top of - * the receiver. This index can change when lines are scrolled or new lines - * are added and removed. - * - * @param index - * the index of the top item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setTopIndex(int index) { - checkWidget(); - if (!isSingleLineEdit()) { - index = Math.min(Math.max(index, 0), getLineCount() - 1); - QScrollBar scrollBar = getQTextEdit().verticalScrollBar(); - QTextDocument textDocument = getQTextEdit().document(); - if (scrollBar != null && textDocument != null) { - if (index == 0) { - scrollBar.setValue(0); - } else { - QTextBlock textBlock = textDocument.begin(); - int lineCount = 0; - while (textBlock.isValid()) { - QTextLayout layout = textBlock.layout(); - if (layout != null) { - int oldLineCount = lineCount; - int lines = layout.lineCount(); - lineCount += lines > 0 ? lines : 1; - if (index < lineCount) { - int linePosition = (int) Math.round(layout.position().y() - + layout.lineAt(index - oldLineCount).y()); - scrollBar.setValue(linePosition); - break; - } - } - textBlock = textBlock.next(); - } - } - } - } - } - - /** - * Shows the selection. - *

- * If the selection is already showing in the receiver, this method simply - * returns. Otherwise, lines are scrolled until the selection is visible. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void showSelection() { - checkWidget(); - if (!isSingleLineEdit()) { - getQTextEdit().ensureCursorVisible(); - } - } - - private final class MyQTextEdit extends QTextEdit { - - @Override - protected void mousePressEvent(QMouseEvent e) { - super.mousePressEvent(e); - e.setAccepted(false); - } - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolBar.java deleted file mode 100644 index 3e7a1a152a..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolBar.java +++ /dev/null @@ -1,530 +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.List; - -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.Qt.ContextMenuPolicy; -import com.trolltech.qt.core.Qt.Orientation; -import com.trolltech.qt.core.Qt.ToolButtonStyle; -import com.trolltech.qt.gui.QAction; -import com.trolltech.qt.gui.QToolBar; -import com.trolltech.qt.gui.QWidget; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class support the layout of selectable tool bar items. - *

- * The item children that may be added to instances of this class must be of - * type ToolItem. - *

- *

- * Note that although this class is a subclass of Composite, it - * does not make sense to add Control children to it, or set a - * layout on it. - *

- *

- *

- *
Styles:
- *
FLAT, WRAP, RIGHT, HORIZONTAL, VERTICAL, SHADOW_OUT
- *
Events:
- *
(none)
- *
- *

- * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see ToolBar, ToolItem - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class ToolBar extends Composite { - /* - * From the Windows SDK for TB_SETBUTTONSIZE: - * - * "If an application does not explicitly set the button size, the size - * defaults to 24 by 22 pixels". - */ - private static final int DEFAULT_WIDTH = 24; - private static final int DEFAULT_HEIGHT = 22; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#FLAT - * @see SWT#WRAP - * @see SWT#RIGHT - * @see SWT#HORIZONTAL - * @see SWT#SHADOW_OUT - * @see SWT#VERTICAL - * @see Widget#checkSubclass() - * @see Widget#getStyle() - */ - public ToolBar(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - state &= ~CANVAS; - QToolBar toolbar = new QToolBar(); - initOrientation(toolbar, style); - toolbar.setStyleSheet("QToolBar { border: 0px; margin: 0px;}"); //$NON-NLS-1$ // background-color: #234; - toolbar.setContentsMargins(0, 0, 0, 0); - toolbar.setIconSize(new QSize(16, 16)); - toolbar.setToolButtonStyle(ToolButtonStyle.ToolButtonTextBesideIcon); - toolbar.setContextMenuPolicy(ContextMenuPolicy.CustomContextMenu); - toolbar.setMovable(false); - toolbar.setFloatable(false); - toolbar.resize(0, 0); - // TODO if ( ( style & SWT.RIGHT ) != 0 ) { - // TODO if ( ( style & SWT.SHADOW_OUT ) != 0 ) { - // Visually, the tool bar is often separated from the menu bar by a separator. - // SWT.SHADOW_OUT style was defined for ToolBar. This style causes tool bars to draw the appropriate separator. - // On the Macintosh and platforms that do not support this look, the separator is not drawn. - - // if ( ( style & SWT.WRAP ) != 0 ) - // qt does not support wrapped mode! :( - - return toolbar; - } - - private void initOrientation(QToolBar toolbar, int style) { - if ((style & SWT.VERTICAL) != 0) { - toolbar.setOrientation(Orientation.Vertical); - this.style |= SWT.VERTICAL; - } else { - this.style |= SWT.HORIZONTAL; - toolbar.setOrientation(Orientation.Horizontal); - } - } - - QToolBar getQToolBar() { - return (QToolBar) getQWidget(); - } - - void addAction(QAction action, int index) { - int itemCount = _getItemCount(); - if (index >= 0 && index < itemCount) { - QAction before = getItems()[index].getQAction(); - getQToolBar().insertAction(before, action); - } else { - getQToolBar().addAction(action); - } - } - - QAction addWidget(QWidget widget, int index) { - int itemCount = _getItemCount(); - QAction action; - if (index >= 0 && index < itemCount) { - QAction before = getItems()[index].getQAction(); - action = getQToolBar().insertWidget(before, widget); - } else { - action = getQToolBar().addWidget(widget); - } - return action; - } - - QWidget removeAction(QAction action) { - QWidget widget = null; - if (getQToolBar() != null) { - widget = getQToolBar().widgetForAction(action); - getQToolBar().removeAction(action); - } - return widget; - } - - static int checkStyle(int style) { - /* - * On Windows, only flat tool bars can be traversed. - */ - if ((style & SWT.FLAT) == 0) { - style |= SWT.NO_FOCUS; - } - - /* - * A vertical tool bar cannot wrap because TB_SETROWS fails when the - * toolbar has TBSTYLE_WRAPABLE. - */ - if ((style & SWT.VERTICAL) != 0) { - style &= ~SWT.WRAP; - } - - return style; - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - @Override - public Point computeSize(int wHint, int hHint, boolean changed) { - checkWidget(); - Point size = super.computeSize(wHint, hHint, changed); - int width = size.x; - int height = size.y; - - if (width == 0) { - width = DEFAULT_WIDTH; - } - if (height == 0) { - height = DEFAULT_HEIGHT; - } - if (wHint != SWT.DEFAULT) { - width = wHint; - } - if (hHint != SWT.DEFAULT) { - height = hHint; - } - Rectangle trim = computeTrim(0, 0, width, height); - width = trim.width; - height = trim.height; - return new Point(width, height); - } - - /** - * 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 - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public ToolItem getItem(int index) { - checkWidget(); - List list = getQWidget().actions(); - int count = list.size(); - if (!(0 <= index && index < count)) { - error(SWT.ERROR_INVALID_RANGE); - } - Widget widget = display.findControl(list.get(index)); - if (widget == null || !ToolItem.class.isInstance(widget)) { - error(SWT.ERROR_CANNOT_GET_ITEM); - } - return (ToolItem) widget; - } - - /** - * Returns the 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 item at the given point - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the point is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public ToolItem getItem(Point point) { - checkWidget(); - if (point == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - ToolItem[] items = getItems(); - for (int i = 0; i < items.length; i++) { - Rectangle rect = items[i].getBounds(); - if (rect.contains(point)) { - return items[i]; - } - } - return null; - } - - /** - * Returns the number of items contained in the receiver. - * - * @return the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getItemCount() { - checkWidget(); - return _getItemCount(); - } - - int _getItemCount() { - return getQWidget().actions().size(); - } - - /** - * Returns an array of ToolItems which are the items in the - * receiver. - *

- * 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. - *

- * - * @return the items in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public ToolItem[] getItems() { - checkWidget(); - List list = getQWidget().actions(); - int count = list.size(); - if (count == 0) { - return new ToolItem[0]; - } - ToolItem[] children = new ToolItem[count]; - int items = 0; - for (QAction action : list) { - if (action != null) { - Widget widget = display.findControl(action); - if (widget != null && widget != this) { - if (widget instanceof ToolItem) { - children[items++] = (ToolItem) widget; - } - } - } - } - if (items == count) { - return children; - } - ToolItem[] newChildren = new ToolItem[items]; - System.arraycopy(children, 0, newChildren, 0, items); - return newChildren; - } - - /** - * Returns the number of rows in the receiver. When the receiver has the - * WRAP style, the number of rows can be greater than one. - * Otherwise, the number of rows is always one. - * - * @return the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getRowCount() { - checkWidget(); - if ((style & SWT.VERTICAL) != 0) { - return _getItemCount(); - } - return 1; - } - - /** - * 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the tool item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the tool item has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int indexOf(ToolItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - return getQToolBar().actions().indexOf(item.getQAction()); - } - - @Override - boolean mnemonicHit(char ch) { - //TODO - // int key = Display.wcsToMbcs(ch); - // int[] id = new int[1]; - // if (OS.SendMessage(handle, OS.TB_MAPACCELERATOR, key, id) == 0) { - // return false; - // } - // if ((style & SWT.FLAT) != 0 && !setTabGroupFocus()) - // return false; - // int index = (int) /* 64 */OS.SendMessage(handle, OS.TB_COMMANDTOINDEX, id[0], 0); - // if (index == -1) - // return false; - // OS.SendMessage(handle, OS.TB_SETHOTITEM, index, 0); - // items[id[0]].click(false); - return true; - } - - @Override - boolean mnemonicMatch(char ch) { - //TODO - // int key = Display.wcsToMbcs(ch); - // int[] id = new int[1]; - // if (OS.SendMessage(handle, OS.TB_MAPACCELERATOR, key, id) == 0) { - // return false; - // } - // /* - // * Feature in Windows. TB_MAPACCELERATOR matches either the mnemonic - // * character or the first character in a tool item. This behavior is - // * undocumented and unwanted. The fix is to ensure that the tool item - // * contains a mnemonic when TB_MAPACCELERATOR returns true. - // */ - // int index = (int) /* 64 */OS.SendMessage(handle, OS.TB_COMMANDTOINDEX, id[0], 0); - // if (index == -1) - // return false; - // return findMnemonic(items[id[0]].text) != '\0'; - return true; - } - - @Override - void releaseChildren(boolean destroy) { - ToolItem[] items = getItems(); - for (int i = 0; i < items.length; i++) { - ToolItem item = items[i]; - if (item != null && !item.isDisposed()) { - item.release(false); - } - } - super.releaseChildren(destroy); - } - - @Override - void removeControl(Control control) { - super.removeControl(control); - for (ToolItem item : getItems()) { - if (item != null && item.hasControl(control)) { - item.setControl(null); - } - } - } - - @Override - public boolean setParent(Composite parent) { - checkWidget(); - if (!super.setParent(parent)) { - return false; - } - getQToolBar().setParent(parent.getQWidget()); - return true; - } - - @Override - boolean setTabItemFocus() { - int index = 0; - ToolItem[] items = getItems(); - while (index < items.length) { - ToolItem item = items[index]; - if (item != null && (item.style & SWT.SEPARATOR) == 0) { - if (item.getEnabled()) { - break; - } - } - index++; - } - if (index == items.length) { - return false; - } - return super.setTabItemFocus(); - } - - @Override - public String toString() { - String s = getName() + "{items: #" + getItemCount() + ":"; //$NON-NLS-1$ //$NON-NLS-2$ - for (ToolItem item : getItems()) { - s += item + " " + getQToolBar().widgetForAction(item.getQAction()) + ", "; //$NON-NLS-1$ //$NON-NLS-2$ - } - return s + "}"; //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolItem.java deleted file mode 100644 index 64f62f9676..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolItem.java +++ /dev/null @@ -1,981 +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 com.trolltech.qt.core.QRect; -import com.trolltech.qt.core.Qt.ContextMenuPolicy; -import com.trolltech.qt.core.Qt.MouseButton; -import com.trolltech.qt.gui.QAction; -import com.trolltech.qt.gui.QIcon; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QStyle; -import com.trolltech.qt.gui.QStyleOptionToolButton; -import com.trolltech.qt.gui.QToolBar; -import com.trolltech.qt.gui.QToolButton; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QIcon.Mode; -import com.trolltech.qt.gui.QStyle.ComplexControl; -import com.trolltech.qt.gui.QToolButton.ToolButtonPopupMode; - -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.Image; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class represent a selectable user interface object that - * represents a button in a tool bar. - *
- *
Styles:
- *
PUSH, CHECK, RADIO, SEPARATOR, DROP_DOWN
- *
Events:
- *
Selection
- *
- *

- * Note: Only one of the styles CHECK, PUSH, RADIO, SEPARATOR and DROP_DOWN may - * be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see ToolBar, ToolItem - * snippets - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class ToolItem extends Item { - private ToolBar parent; - private Control control; - private Image disabledImage, hotImage; - private QAction action; - - /** - * Constructs a new instance of this class given its parent (which must be a - * ToolBar) and a style value describing its behavior and - * appearance. The item is added to the end of the items maintained by its - * parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#PUSH - * @see SWT#CHECK - * @see SWT#RADIO - * @see SWT#SEPARATOR - * @see SWT#DROP_DOWN - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public ToolItem(ToolBar parent, int style) { - this(parent, style, -1); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * ToolBar), a style value describing its behavior and - * appearance, and the index at which to place it in the items maintained by - * its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - * @param index - * the zero-relative index to store the receiver in its parent - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the parent (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#PUSH - * @see SWT#CHECK - * @see SWT#RADIO - * @see SWT#SEPARATOR - * @see SWT#DROP_DOWN - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public ToolItem(ToolBar parent, int style, int index) { - super(parent, checkStyle(style)); - this.parent = parent; - action = createAndAddAction(style, index); - connectSignals(action); - } - - protected QAction createAndAddAction(int style, int index) { - QAction action; - int bits = SWT.CHECK | SWT.RADIO | SWT.PUSH | SWT.SEPARATOR | SWT.DROP_DOWN; - switch (style & bits) { - case SWT.SEPARATOR: - action = createAndAddSeparator(index); - break; - case SWT.DROP_DOWN: - action = createAndAddDropdownButton(index); - break; - case SWT.RADIO: - // if ( parent.actionGroup == null ) { - // parent.actionGroup = new QActionGroup( parent.getQtControl() - // ); - // if ( ( parent.style & SWT.NO_RADIO_GROUP ) != 0 ) { - // parent.actionGroup.setExclusive( false ); - // } - // } - // parent.actionGroup.addAction( action ); - case SWT.CHECK: - action = createAndAddCheckableAction(index); - break; - case SWT.PUSH: - default: - action = createAndAddAction(index); - break; - } - - display.addControl(action, this); - - QWidget toolWidget = getQToolBar().widgetForAction(action); - toolWidget.setContextMenuPolicy(ContextMenuPolicy.NoContextMenu); - display.addControl(toolWidget, this); - - return action; - } - - private QAction createAndAddSeparator(int index) { - QAction action = createAction(); - action.setSeparator(true); - addToToolbar(action, index); - return action; - } - - private void addToToolbar(QAction action, int index) { - parent.addAction(action, index); - } - - private QAction createAction() { - return new QAction(parent.getQWidget()); - } - - private QAction createAndAddAction(int index) { - QAction action = createAction(); - addToToolbar(action, index); - return action; - } - - private QAction createAndAddCheckableAction(int index) { - QAction action = createAction(); - action.setCheckable(true); - addToToolbar(action, index); - return action; - } - - private QAction createAndAddDropdownButton(int index) { - MyToolButton button = new MyToolButton(parent.getQWidget()); - button.setPopupMode(ToolButtonPopupMode.MenuButtonPopup); - QAction action = parent.addWidget(button, index); - button.setDefaultAction(action); - return action; - } - - QAction getQAction() { - return action; - } - - QWidget getToolbarWidget() { - return getQToolBar().widgetForAction(action); - } - - QToolBar getQToolBar() { - return parent.getQToolBar(); - } - - protected void connectSignals(QAction action) { - action.triggered.connect(this, "sendTriggeredEvent()"); //$NON-NLS-1$ - action.hovered.connect(this, "sendHoveredEvent()"); //$NON-NLS-1$ - } - - protected void sendTriggeredEvent() { - Event event = new Event(); - sendEvent(SWT.Selection, event); - } - - protected void sendHoveredEvent() { - Event event = new Event(); - sendEvent(SWT.Arm, event); - } - - protected void sendShowDropDownEvent() { - Event event = new Event(); - event.detail = SWT.ARROW; - - Rectangle rect = getBounds(); - event.x = rect.x; - event.y = rect.y + rect.height; - - sendEvent(SWT.Selection, event); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * When widgetSelected is called when the mouse is over the - * arrow portion of a drop-down tool, the event object detail field contains - * the value SWT.ARROW. widgetDefaultSelected is - * not called. - *

- * - * @param listener - * the listener which should be notified when the control is - * selected by the user, - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - static int checkStyle(int style) { - return checkBits(style, SWT.PUSH, SWT.CHECK, SWT.RADIO, SWT.SEPARATOR, SWT.DROP_DOWN, 0); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - void click(boolean dropDown) { - if (dropDown) { - sendShowDropDownEvent(); - } else { - getQAction().trigger(); - } - } - - @Override - void destroyWidget() { - QWidget toolWidget = parent.removeAction(action); - if (toolWidget != null) { - toolWidget.disconnect(); - display.removeControl(toolWidget); - } - super.destroyWidget(); - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent. - * - * @return the receiver's bounding rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Rectangle getBounds() { - checkWidget(); - return QtSWTConverter.convert(getQToolBar().actionGeometry(getQAction())); - } - - /** - * Returns the control that is used to fill the bounds of the item when the - * item is a SEPARATOR. - * - * @return the control - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Control getControl() { - checkWidget(); - return control; - } - - boolean hasControl(Control control) { - return this.control == control; - } - - /** - * Returns the receiver's disabled image if it has one, or null if it does - * not. - *

- * The disabled image is displayed when the receiver is disabled. - *

- * - * @return the receiver's disabled image - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Image getDisabledImage() { - checkWidget(); - return disabledImage; - } - - /** - * Returns the receiver's hot image if it has one, or null if it does not. - *

- * The hot image is displayed when the mouse enters the receiver. - *

- * - * @return the receiver's hot image - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Image getHotImage() { - checkWidget(); - return hotImage; - } - - /** - * Returns the receiver's parent, which must be a ToolBar. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public ToolBar getParent() { - checkWidget(); - return parent; - } - - /** - * Returns true if the receiver is selected, and false - * otherwise. - *

- * When the receiver is of type CHECK or RADIO, it - * is selected when it is checked (which some platforms draw as a pushed in - * button). If the receiver is of any other type, this method returns false. - *

- * - * @return the selection state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getSelection() { - checkWidget(); - return getQAction().isChecked(); - } - - /** - * Returns the receiver's tool tip text, or null if it has not been set. - * - * @return the receiver's tool tip text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getToolTipText() { - checkWidget(); - return getQAction().toolTip(); - } - - /** - * Gets the width of the receiver. - * - * @return the width - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getWidth() { - checkWidget(); - return getQToolBar().actionGeometry(getQAction()).width(); - } - - /** - * Returns true if the receiver is enabled and all of the - * receiver's ancestors are enabled, and false otherwise. A - * disabled control is typically not selectable from the user interface and - * draws with an inactive or "grayed" look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getEnabled - */ - public boolean isEnabled() { - checkWidget(); - return getEnabled() && parent.isEnabled(); - } - - @Override - void releaseWidget() { - super.releaseWidget(); - control = null; - disabledImage = null; - hotImage = null; - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - parent.removeAction(action); - action = null; - parent = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - void resizeControl() { - if (control != null && !control.isDisposed()) { - /* - * Set the size and location of the control separately to minimize - * flashing in the case where the control does not resize to the - * size that was requested. This case can occur when the control is - * a combo box. - */ - Rectangle itemRect = getBounds(); - control.setSize(itemRect.width, itemRect.height); - Rectangle rect = control.getBounds(); - rect.x = itemRect.x + (itemRect.width - rect.width) / 2; - rect.y = itemRect.y + (itemRect.height - rect.height) / 2; - control.setLocation(rect.x, rect.y); - } - } - - void selectRadio() { - int index = 0; - ToolItem[] items = parent.getItems(); - while (index < items.length && items[index] != this) { - index++; - } - int i = index - 1; - while (i >= 0 && items[i].setRadioSelection(false)) { - --i; - } - int j = index + 1; - while (j < items.length && items[j].setRadioSelection(false)) { - j++; - } - setSelection(true); - } - - /** - * Sets the control that is used to fill the bounds of the item when the - * item is a SEPARATOR. - * - * @param control - * the new control - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the control has been - * disposed
  • - *
  • ERROR_INVALID_PARENT - if the control is not in the - * same widget tree
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setControl(Control control) { - checkWidget(); - if (control != null) { - if (control.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (control.parent != parent) { - error(SWT.ERROR_INVALID_PARENT); - } - } - if ((style & SWT.SEPARATOR) == 0) { - return; - } - this.control = control; - QAction newAction = getQToolBar().insertWidget(getQAction(), control.getQWidget()); - getQToolBar().removeAction(getQAction()); - newAction.setEnabled(action.isEnabled()); - newAction.setText(action.text()); - newAction.setToolTip(action.toolTip()); - newAction.setChecked(action.isChecked()); - updateImages(); - action = newAction; - resizeControl(); - } - - /** - * Returns true if the receiver is enabled, and - * false otherwise. A disabled control is typically not - * selectable from the user interface and draws with an inactive or "grayed" - * look. - * - * @return the receiver's enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #isEnabled - */ - public boolean getEnabled() { - checkWidget(); - return getQAction().isEnabled(); - } - - /** - * Enables the receiver if the argument is true, and disables - * it otherwise. - *

- * A disabled control is typically not selectable from the user interface - * and draws with an inactive or "grayed" look. - *

- * - * @param enabled - * the new enabled state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setEnabled(boolean enabled) { - checkWidget(); - getQAction().setEnabled(enabled); - } - - /** - * Sets the receiver's disabled image to the argument, which may be null - * indicating that no disabled image should be displayed. - *

- * The disabled image is displayed when the receiver is disabled. - *

- * - * @param image - * the disabled image to display on the receiver (may be null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setDisabledImage(Image image) { - checkWidget(); - if ((style & SWT.SEPARATOR) != 0) { - return; - } - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - disabledImage = image; - updateImages(); - } - - /** - * Sets the receiver's hot image to the argument, which may be null - * indicating that no hot image should be displayed. - *

- * The hot image is displayed when the mouse enters the receiver. - *

- * - * @param image - * the hot image to display on the receiver (may be null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setHotImage(Image image) { - checkWidget(); - if ((style & SWT.SEPARATOR) != 0) { - return; - } - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - hotImage = image; - updateImages(); - } - - @Override - public void setImage(Image image) { - checkWidget(); - if ((style & SWT.SEPARATOR) != 0) { - return; - } - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - super.setImage(image); - updateImages(); - } - - private void updateImages() { - if ((style & SWT.SEPARATOR) != 0) { - return; - } - - if (image == null && disabledImage == null && hotImage == null) { - getQAction().setIcon((QIcon) null); - return; - } - - QIcon icon = new QIcon(); - if (image != null) { - icon.addPixmap(image.getQPixmap()); - } - - if (disabledImage != null) { - icon.addPixmap(disabledImage.getQPixmap(), Mode.Disabled); - } - - if (hotImage != null) { - icon.addPixmap(hotImage.getQPixmap(), Mode.Selected); - } - getQAction().setIcon(icon); - } - - boolean setRadioSelection(boolean value) { - if ((style & SWT.RADIO) == 0) { - return false; - } - if (getSelection() != value) { - setSelection(value); - postEvent(SWT.Selection); - } - return true; - } - - /** - * Sets the selection state of the receiver. - *

- * When the receiver is of type CHECK or RADIO, it - * is selected when it is checked (which some platforms draw as a pushed in - * button). - *

- * - * @param selected - * the new selection state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setSelection(boolean selected) { - checkWidget(); - if ((style & (SWT.CHECK | SWT.RADIO)) == 0) { - return; - } - getQAction().setChecked(selected); - } - - /** - * Sets the receiver's text. The string may include the mnemonic character. - *

- *

- * Mnemonics are indicated by an '&' that causes the next character to - * be the mnemonic. When the user presses a key sequence that matches the - * mnemonic, a selection event occurs. On most platforms, the mnemonic - * appears underlined but may be emphasised in a platform specific manner. - * The mnemonic indicator character '&' can be escaped by doubling it in - * the string, causing a single '&' to be displayed. - *

- * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - @Override - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if ((style & SWT.SEPARATOR) != 0) { - return; - } - if (string.equals(text)) { - return; - } - super.setText(string); - getQAction().setText(string); - } - - /** - * Sets the receiver's tool tip text to the argument, which may be null - * indicating that the default tool tip for the control will be shown. For a - * control that has a default tool tip, such as the Tree control on Windows, - * setting the tool tip text to an empty string replaces the default, - * causing no tool tip text to be shown. - *

- * The mnemonic indicator (character '&') is not displayed in a tool - * tip. To display a single '&' in the tool tip, the character '&' - * can be escaped by doubling it in the string. - *

- * - * @param string - * the new tool tip text (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setToolTipText(String string) { - checkWidget(); - getQAction().setToolTip(string); - } - - /** - * Sets the width of the receiver, for SEPARATOR ToolItems. - * - * @param width - * the new width - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setWidth(int width) { - checkWidget(); - if ((style & SWT.SEPARATOR) == 0) { - return; - } - if (width < 0) { - return; - } - QWidget widget = getQToolBar().widgetForAction(getQAction()); - widget.resize(width, widget.height()); - } - - @Override - public String toString() { - return getName() + "{text: " + getQAction().text() + ", tooltip: " + getQAction().toolTip() + "}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - /** - * Subclassed QToolButton, to override drop down handling. We check for - * clicks on the arrow an the right side of the button and show our own - * drop-down menu, ignoring the default menu. - */ - private final class MyToolButton extends QToolButton { - public MyToolButton(QWidget parent) { - super(parent); - } - - @Override - protected void mousePressEvent(QMouseEvent e) { - if (MouseButton.LeftButton.equals(e.button()) && ToolButtonPopupMode.MenuButtonPopup.equals(popupMode())) { - QStyleOptionToolButton opt = new QStyleOptionToolButton(); - initStyleOption(opt); - QRect popupr = style().subControlRect(ComplexControl.CC_ToolButton, opt, - QStyle.SubControl.SC_ToolButtonMenu, this); - if (popupr.isValid() && popupr.contains(e.pos())) { - sendShowDropDownEvent(); - return; - } - } - super.mousePressEvent(e); - } - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolTip.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolTip.java deleted file mode 100644 index f79ffbbad4..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolTip.java +++ /dev/null @@ -1,512 +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 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.Point; - -/** - * Instances of this class represent popup windows that are used to inform or - * warn the user. - *

- *

- *
Styles:
- *
BALLOON, ICON_ERROR, ICON_INFORMATION, ICON_WARNING
- *
Events:
- *
Selection
- *
- *

- *

- * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, and ICON_WARNING - * may be specified. - *

- *

- * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. - *

- * - * @see Tool Tips - * snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * - * @since 3.2 - * @noextend This class is not intended to be subclassed by clients. - */ - -public class ToolTip extends Widget { - Shell parent; - TrayItem item; - String text = ""; //$NON-NLS-1$ - String message = ""; //$NON-NLS-1$ - int id, x, y; - boolean autoHide = true, hasLocation, visible; - static final int TIMER_ID = 100; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#ICON_ERROR - * @see SWT#ICON_INFORMATION - * @see SWT#ICON_WARNING - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public ToolTip(Shell parent, int style) { - super(parent, checkStyle(style)); - this.parent = parent; - checkAndUpdateOrientation(parent); - // parent.createToolTip(this); - } - - static int checkStyle(int style) { - int mask = SWT.ICON_ERROR | SWT.ICON_INFORMATION | SWT.ICON_WARNING; - if ((style & mask) == 0) { - return style; - } - return checkBits(style, SWT.ICON_INFORMATION, SWT.ICON_WARNING, SWT.ICON_ERROR, 0, 0, 0); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * widgetSelected is called when the receiver is selected. - * widgetDefaultSelected is not called. - *

- * - * @param listener - * the listener which should be notified when the receiver is - * selected by the user - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - @Override - void destroyWidget() { - if (parent != null) { - // parent.destroyToolTip( this ); - } - releaseQWidget(); - } - - /** - * Returns true if the receiver is automatically hidden by the - * platform, and false otherwise. - * - * @return the receiver's auto hide state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - */ - public boolean getAutoHide() { - checkWidget(); - return autoHide; - } - - /** - * Returns the receiver's message, which will be an empty string if it has - * never been set. - * - * @return the receiver's message - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getMessage() { - checkWidget(); - return message; - } - - /** - * Returns the receiver's parent, which must be a Shell. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Shell getParent() { - checkWidget(); - return parent; - } - - /** - * Returns the receiver's text, which will be an empty string if it has - * never been set. - * - * @return the receiver's text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getText() { - checkWidget(); - return text; - } - - /** - * Returns true if the receiver is visible, and - * false otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

- * - * @return the receiver's visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getVisible() { - checkWidget(); - if (item != null) { - return visible; - } - return false; - } - - /** - * Returns true if the receiver is visible and all of the - * receiver's ancestors are visible and false otherwise. - * - * @return the receiver's visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getVisible - */ - public boolean isVisible() { - checkWidget(); - if (item != null) { - return getVisible() && item.getVisible(); - } - return getVisible(); - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - parent = null; - item = null; - id = -1; - } - - @Override - void releaseWidget() { - super.releaseWidget(); - if (item == null) { - if (autoHide) { - // TODO - } - } - if (item != null && item.toolTip == this) { - item.toolTip = null; - } - item = null; - text = message = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the receiver is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Makes the receiver hide automatically when true, and remain - * visible when false. - * - * @param autoHide - * the auto hide state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getVisible - * @see #setVisible - */ - public void setAutoHide(boolean autoHide) { - checkWidget(); - this.autoHide = autoHide; - // TODO - update when visible - } - - /** - * Sets the location of the receiver, which must be a tooltip, to the point - * specified by the arguments which are relative to the display. - *

- * Note that this is different from most widgets where the location of the - * widget is relative to the parent. - *

- * - * @param x - * the new x coordinate for the receiver - * @param y - * the new y coordinate for the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setLocation(int x, int y) { - checkWidget(); - this.x = x; - this.y = y; - hasLocation = true; - // TODO - update when visible - } - - /** - * Sets the location of the receiver, which must be a tooltip, to the point - * specified by the argument which is relative to the display. - *

- * Note that this is different from most widgets where the location of the - * widget is relative to the parent. - *

- *

- * Note that the platform window manager ultimately has control over the - * location of tooltips. - *

- * - * @param location - * the new location for the receiver - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the point is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setLocation(Point location) { - checkWidget(); - if (location == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - setLocation(location.x, location.y); - } - - /** - * Sets the receiver's message. - * - * @param string - * the new message - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setMessage(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - message = string; - // TODO - update when visible - } - - /** - * Sets the receiver's text. - * - * @param string - * the new text - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - text = string; - // TODO - update when visible - } - - /** - * Marks the receiver as visible if the argument is true, and - * marks it invisible otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

- * - * @param visible - * the new visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setVisible(boolean visible) { - checkWidget(); - if (visible == getVisible()) { - return; - // TODO - } - } -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tracker.java deleted file mode 100644 index a055510abe..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tracker.java +++ /dev/null @@ -1,859 +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 org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ControlListener; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.graphics.Cursor; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; - -/** - * Instances of this class implement rubber banding rectangles that are drawn - * onto a parent Composite or Display. These - * rectangles can be specified to respond to mouse and key events by either - * moving or resizing themselves accordingly. Trackers are typically used to - * represent window geometries in a lightweight manner. - * - *
- *
Styles:
- *
LEFT, RIGHT, UP, DOWN, RESIZE
- *
Events:
- *
Move, Resize
- *
- *

- * Note: Rectangle move behavior is assumed unless RESIZE is specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Tracker - * snippets - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class Tracker extends Widget { - Control parent; - boolean tracking, cancelled, stippled; - Rectangle[] rectangles = new Rectangle[0], proportions = rectangles; - Rectangle bounds; - int /* long */resizeCursor; - Cursor clientCursor; - int cursorOrientation = SWT.NONE; - boolean inEvent = false; - int /* long */hwndTransparent, hwndOpaque, oldTransparentProc, oldOpaqueProc; - int oldX, oldY; - - /* - * The following values mirror step sizes on Windows - */ - final static int STEPSIZE_SMALL = 1; - final static int STEPSIZE_LARGE = 9; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param parent - * a widget which will be the parent of the new instance (cannot - * be null) - * @param style - * the style of widget to construct - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#LEFT - * @see SWT#RIGHT - * @see SWT#UP - * @see SWT#DOWN - * @see SWT#RESIZE - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Tracker(Composite parent, int style) { - super(parent, checkStyle(style)); - this.parent = parent; - } - - /** - * Constructs a new instance of this class given the display to create it on - * and a style value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- *

- * Note: Currently, null can be passed in for the display argument. This has - * the effect of creating the tracker on the currently active display if - * there is one. If there is no current display, the tracker is created on a - * "default" display. Passing in null as the display argument is not - * considered to be good coding style, and may not be supported in a future - * release of SWT. - *

- * - * @param display - * the display to create the tracker on - * @param style - * the style of control to construct - * - * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#LEFT - * @see SWT#RIGHT - * @see SWT#UP - * @see SWT#DOWN - */ - public Tracker(Display display, int style) { - if (display == null) { - display = Display.getCurrent(); - } - if (display == null) { - display = Display.getDefault(); - } - if (!display.isValidThread()) { - error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - this.style = checkStyle(style); - this.display = display; - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is moved or resized, by sending it one of the messages - * defined in the ControlListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ControlListener - * @see #removeControlListener - */ - public void addControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Resize, typedListener); - addListener(SWT.Move, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when keys are pressed and released on the system keyboard, by sending it - * one of the messages defined in the KeyListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see KeyListener - * @see #removeKeyListener - */ - public void addKeyListener(KeyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.KeyUp, typedListener); - addListener(SWT.KeyDown, typedListener); - } - - Point adjustMoveCursor() { - if (bounds == null) { - return null; - } - int newX = bounds.x + bounds.width / 2; - int newY = bounds.y; - // POINT pt = new POINT(); - // pt.x = newX; - // pt.y = newY; - // /* - // * Convert to screen coordinates iff needed - // */ - // if (parent != null) { - // //OS.ClientToScreen(parent.handle, pt); - // } - // OS.SetCursorPos(pt.x, pt.y); - //TODO - return new Point(newX, newY); - } - - Point adjustResizeCursor() { - if (bounds == null) { - return null; - } - int newX, newY; - - if ((cursorOrientation & SWT.LEFT) != 0) { - newX = bounds.x; - } else if ((cursorOrientation & SWT.RIGHT) != 0) { - newX = bounds.x + bounds.width; - } else { - newX = bounds.x + bounds.width / 2; - } - - if ((cursorOrientation & SWT.UP) != 0) { - newY = bounds.y; - } else if ((cursorOrientation & SWT.DOWN) != 0) { - newY = bounds.y + bounds.height; - } else { - newY = bounds.y + bounds.height / 2; - } - - // POINT pt = new POINT(); - // pt.x = newX; - // pt.y = newY; - // /* - // * Convert to screen coordinates iff needed - // */ - // if (parent != null) { - // //OS.ClientToScreen(parent.handle, pt); - // } - // OS.SetCursorPos(pt.x, pt.y); - // - // /* - // * If the client has not provided a custom cursor then determine the - // * appropriate resize cursor. - // */ - // if (clientCursor == null) { - // int /* long */newCursor = 0; - // switch (cursorOrientation) { - // case SWT.UP: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZENS); - // break; - // case SWT.DOWN: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZENS); - // break; - // case SWT.LEFT: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZEWE); - // break; - // case SWT.RIGHT: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZEWE); - // break; - // case SWT.LEFT | SWT.UP: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZENWSE); - // break; - // case SWT.RIGHT | SWT.DOWN: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZENWSE); - // break; - // case SWT.LEFT | SWT.DOWN: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZENESW); - // break; - // case SWT.RIGHT | SWT.UP: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZENESW); - // break; - // default: - // newCursor = OS.LoadCursor(0, OS.IDC_SIZEALL); - // break; - // } - // OS.SetCursor(newCursor); - // if (resizeCursor != 0) { - // OS.DestroyCursor(resizeCursor); - // } - // resizeCursor = newCursor; - // } - //TODO - return new Point(newX, newY); - } - - static int checkStyle(int style) { - if ((style & (SWT.LEFT | SWT.RIGHT | SWT.UP | SWT.DOWN)) == 0) { - style |= SWT.LEFT | SWT.RIGHT | SWT.UP | SWT.DOWN; - } - return style; - } - - /** - * Stops displaying the tracker rectangles. Note that this is not considered - * to be a cancelation by the user. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void close() { - checkWidget(); - tracking = false; - } - - Rectangle computeBounds() { - if (rectangles.length == 0) { - return null; - } - int xMin = rectangles[0].x; - int yMin = rectangles[0].y; - int xMax = rectangles[0].x + rectangles[0].width; - int yMax = rectangles[0].y + rectangles[0].height; - - for (int i = 1; i < rectangles.length; i++) { - if (rectangles[i].x < xMin) { - xMin = rectangles[i].x; - } - if (rectangles[i].y < yMin) { - yMin = rectangles[i].y; - } - int rectRight = rectangles[i].x + rectangles[i].width; - if (rectRight > xMax) { - xMax = rectRight; - } - int rectBottom = rectangles[i].y + rectangles[i].height; - if (rectBottom > yMax) { - yMax = rectBottom; - } - } - - return new Rectangle(xMin, yMin, xMax - xMin, yMax - yMin); - } - - Rectangle[] computeProportions(Rectangle[] rects) { - Rectangle[] result = new Rectangle[rects.length]; - bounds = computeBounds(); - if (bounds != null) { - for (int i = 0; i < rects.length; i++) { - int x = 0, y = 0, width = 0, height = 0; - if (bounds.width != 0) { - x = (rects[i].x - bounds.x) * 100 / bounds.width; - width = rects[i].width * 100 / bounds.width; - } else { - width = 100; - } - if (bounds.height != 0) { - y = (rects[i].y - bounds.y) * 100 / bounds.height; - height = rects[i].height * 100 / bounds.height; - } else { - height = 100; - } - result[i] = new Rectangle(x, y, width, height); - } - } - return result; - } - - /** - * Draw the rectangles displayed by the tracker. - */ - void drawRectangles(Rectangle[] rects, boolean stippled) { - // if (parent == null && OS.WIN32_VERSION >= OS.VERSION(6, 0)) { - // RECT rect1 = new RECT(); - // int bandWidth = stippled ? 3 : 1; - // for (int i = 0; i < rects.length; i++) { - // Rectangle rect = rects[i]; - // rect1.left = rect.x - bandWidth; - // rect1.top = rect.y - bandWidth; - // rect1.right = rect.x + rect.width + bandWidth * 2; - // rect1.bottom = rect.y + rect.height + bandWidth * 2; - // OS.RedrawWindow(hwndOpaque, rect1, 0, OS.RDW_INVALIDATE); - // } - // return; - // } - // int bandWidth = 1; - // int /* long */hwndTrack = OS.GetDesktopWindow(); - // if (parent != null) { - // //hwndTrack = parent.handle; - // } - // int /* long */hDC = OS.GetDCEx(hwndTrack, 0, OS.DCX_CACHE); - // int /* long */hBitmap = 0, hBrush = 0, oldBrush = 0; - // if (stippled) { - // bandWidth = 3; - // byte[] bits = { -86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0 }; - // hBitmap = OS.CreateBitmap(8, 8, 1, 1, bits); - // hBrush = OS.CreatePatternBrush(hBitmap); - // oldBrush = OS.SelectObject(hDC, hBrush); - // } - // for (int i = 0; i < rects.length; i++) { - // Rectangle rect = rects[i]; - // OS.PatBlt(hDC, rect.x, rect.y, rect.width, bandWidth, OS.PATINVERT); - // OS.PatBlt(hDC, rect.x, rect.y + bandWidth, bandWidth, rect.height - bandWidth * 2, OS.PATINVERT); - // OS.PatBlt(hDC, rect.x + rect.width - bandWidth, rect.y + bandWidth, bandWidth, rect.height - bandWidth * 2, - // OS.PATINVERT); - // OS.PatBlt(hDC, rect.x, rect.y + rect.height - bandWidth, rect.width, bandWidth, OS.PATINVERT); - // } - // if (stippled) { - // OS.SelectObject(hDC, oldBrush); - // OS.DeleteObject(hBrush); - // OS.DeleteObject(hBitmap); - // } - // OS.ReleaseDC(hwndTrack, hDC); - } - - /** - * Returns the bounds that are being drawn, expressed relative to the parent - * widget. If the parent is a Display then these are screen - * coordinates. - * - * @return the bounds of the Rectangles being drawn - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Rectangle[] getRectangles() { - checkWidget(); - Rectangle[] result = new Rectangle[rectangles.length]; - for (int i = 0; i < rectangles.length; i++) { - Rectangle current = rectangles[i]; - result[i] = new Rectangle(current.x, current.y, current.width, current.height); - } - return result; - } - - /** - * Returns true if the rectangles are drawn with a stippled - * line, false otherwise. - * - * @return the stippled effect of the rectangles - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getStippled() { - checkWidget(); - return stippled; - } - - void moveRectangles(int xChange, int yChange) { - if (bounds == null) { - return; - } - if (xChange < 0 && (style & SWT.LEFT) == 0) { - xChange = 0; - } - if (xChange > 0 && (style & SWT.RIGHT) == 0) { - xChange = 0; - } - if (yChange < 0 && (style & SWT.UP) == 0) { - yChange = 0; - } - if (yChange > 0 && (style & SWT.DOWN) == 0) { - yChange = 0; - } - if (xChange == 0 && yChange == 0) { - return; - } - bounds.x += xChange; - bounds.y += yChange; - for (int i = 0; i < rectangles.length; i++) { - rectangles[i].x += xChange; - rectangles[i].y += yChange; - } - } - - /** - * Displays the Tracker rectangles for manipulation by the user. Returns - * when the user has either finished manipulating the rectangles or has - * cancelled the Tracker. - * - * @return true if the user did not cancel the Tracker, - * false otherwise - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean open() { - checkWidget(); - cancelled = false; - tracking = true; - - /* - * If exactly one of UP/DOWN is specified as a style then set the cursor - * orientation accordingly (the same is done for LEFT/RIGHT styles - * below). - */ - int vStyle = style & (SWT.UP | SWT.DOWN); - if (vStyle == SWT.UP || vStyle == SWT.DOWN) { - cursorOrientation |= vStyle; - } - int hStyle = style & (SWT.LEFT | SWT.RIGHT); - if (hStyle == SWT.LEFT || hStyle == SWT.RIGHT) { - cursorOrientation |= hStyle; - } - - /* - * If this tracker is being created without a mouse drag then we need to - * create a transparent window that fills the screen in order to get all - * mouse/keyboard events that occur outside of our visible windows (ie.- - * over the desktop). - */ - // TODO - tracking = false; - return !cancelled; - } - - @Override - void releaseWidget() { - super.releaseWidget(); - parent = null; - rectangles = proportions = null; - bounds = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is moved or resized. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ControlListener - * @see #addControlListener - */ - public void removeControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Resize, listener); - eventTable.unhook(SWT.Move, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when keys are pressed and released on the system keyboard. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see KeyListener - * @see #addKeyListener - */ - public void removeKeyListener(KeyListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.KeyUp, listener); - eventTable.unhook(SWT.KeyDown, listener); - } - - void resizeRectangles(int xChange, int yChange) { - if (bounds == null) { - return; - } - /* - * If the cursor orientation has not been set in the orientation of this - * change then try to set it here. - */ - if (xChange < 0 && (style & SWT.LEFT) != 0 && (cursorOrientation & SWT.RIGHT) == 0) { - cursorOrientation |= SWT.LEFT; - } - if (xChange > 0 && (style & SWT.RIGHT) != 0 && (cursorOrientation & SWT.LEFT) == 0) { - cursorOrientation |= SWT.RIGHT; - } - if (yChange < 0 && (style & SWT.UP) != 0 && (cursorOrientation & SWT.DOWN) == 0) { - cursorOrientation |= SWT.UP; - } - if (yChange > 0 && (style & SWT.DOWN) != 0 && (cursorOrientation & SWT.UP) == 0) { - cursorOrientation |= SWT.DOWN; - } - - /* - * If the bounds will flip about the x or y axis then apply the - * adjustment up to the axis (ie.- where bounds width/height becomes 0), - * change the cursor's orientation accordingly, and flip each - * Rectangle's origin (only necessary for > 1 Rectangles) - */ - if ((cursorOrientation & SWT.LEFT) != 0) { - if (xChange > bounds.width) { - if ((style & SWT.RIGHT) == 0) { - return; - } - cursorOrientation |= SWT.RIGHT; - cursorOrientation &= ~SWT.LEFT; - bounds.x += bounds.width; - xChange -= bounds.width; - bounds.width = 0; - if (proportions.length > 1) { - for (int i = 0; i < proportions.length; i++) { - Rectangle proportion = proportions[i]; - proportion.x = 100 - proportion.x - proportion.width; - } - } - } - } else if ((cursorOrientation & SWT.RIGHT) != 0) { - if (bounds.width < -xChange) { - if ((style & SWT.LEFT) == 0) { - return; - } - cursorOrientation |= SWT.LEFT; - cursorOrientation &= ~SWT.RIGHT; - xChange += bounds.width; - bounds.width = 0; - if (proportions.length > 1) { - for (int i = 0; i < proportions.length; i++) { - Rectangle proportion = proportions[i]; - proportion.x = 100 - proportion.x - proportion.width; - } - } - } - } - if ((cursorOrientation & SWT.UP) != 0) { - if (yChange > bounds.height) { - if ((style & SWT.DOWN) == 0) { - return; - } - cursorOrientation |= SWT.DOWN; - cursorOrientation &= ~SWT.UP; - bounds.y += bounds.height; - yChange -= bounds.height; - bounds.height = 0; - if (proportions.length > 1) { - for (int i = 0; i < proportions.length; i++) { - Rectangle proportion = proportions[i]; - proportion.y = 100 - proportion.y - proportion.height; - } - } - } - } else if ((cursorOrientation & SWT.DOWN) != 0) { - if (bounds.height < -yChange) { - if ((style & SWT.UP) == 0) { - return; - } - cursorOrientation |= SWT.UP; - cursorOrientation &= ~SWT.DOWN; - yChange += bounds.height; - bounds.height = 0; - if (proportions.length > 1) { - for (int i = 0; i < proportions.length; i++) { - Rectangle proportion = proportions[i]; - proportion.y = 100 - proportion.y - proportion.height; - } - } - } - } - - // apply the bounds adjustment - if ((cursorOrientation & SWT.LEFT) != 0) { - bounds.x += xChange; - bounds.width -= xChange; - } else if ((cursorOrientation & SWT.RIGHT) != 0) { - bounds.width += xChange; - } - if ((cursorOrientation & SWT.UP) != 0) { - bounds.y += yChange; - bounds.height -= yChange; - } else if ((cursorOrientation & SWT.DOWN) != 0) { - bounds.height += yChange; - } - - Rectangle[] newRects = new Rectangle[rectangles.length]; - for (int i = 0; i < rectangles.length; i++) { - Rectangle proportion = proportions[i]; - newRects[i] = new Rectangle(proportion.x * bounds.width / 100 + bounds.x, proportion.y * bounds.height - / 100 + bounds.y, proportion.width * bounds.width / 100, proportion.height * bounds.height / 100); - } - rectangles = newRects; - } - - /** - * Sets the Cursor of the Tracker. If this cursor is - * null then the cursor reverts to the default. - * - * @param newCursor - * the new Cursor to display - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setCursor(Cursor newCursor) { - checkWidget(); - clientCursor = newCursor; - // TODO - // if (newCursor != null) { - // if (inEvent) { - // OS.SetCursor(clientCursor.handle); - // } - // } - } - - /** - * Specifies the rectangles that should be drawn, expressed relative to the - * parent widget. If the parent is a Display then these are screen - * coordinates. - * - * @param rectangles - * the bounds of the rectangles to be drawn - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the set of rectangles is null - * or contains a null rectangle
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setRectangles(Rectangle[] rectangles) { - checkWidget(); - if (rectangles == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - this.rectangles = new Rectangle[rectangles.length]; - for (int i = 0; i < rectangles.length; i++) { - Rectangle current = rectangles[i]; - if (current == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - this.rectangles[i] = new Rectangle(current.x, current.y, current.width, current.height); - } - proportions = computeProportions(rectangles); - } - - /** - * Changes the appearance of the line used to draw the rectangles. - * - * @param stippled - * true if rectangle should appear stippled - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setStippled(boolean stippled) { - checkWidget(); - this.stippled = stippled; - } - - void update() { - if (parent == null) { - return; - } - if (parent != null) { - if (parent.isDisposed()) { - return; - } - Shell shell = parent.getShell(); - shell._update(); - } else { - display.update(); - } - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TrayItem.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TrayItem.java deleted file mode 100644 index cdee0a48fe..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TrayItem.java +++ /dev/null @@ -1,536 +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 org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.MenuDetectListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Image; - -/** - * Instances of this class represent icons that can be placed on the system tray - * or task bar status area. - *

- *

- *
Styles:
- *
(none)
- *
Events:
- *
DefaultSelection, MenuDetect, Selection
- *
- *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Tray, TrayItem - * snippets - * @see Sample code and further - * information - * - * @since 3.0 - * @noextend This class is not intended to be subclassed by clients. - */ -public class TrayItem extends Item { - Tray parent; - int id; - Image image2; - ToolTip toolTip; - String toolTipText; - boolean visible = true; - - /** - * Constructs a new instance of this class given its parent (which must be a - * Tray) and a style value describing its behavior and - * appearance. The item is added to the end of the items maintained by its - * parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TrayItem(Tray parent, int style) { - super(parent, style); - this.parent = parent; - parent.createItem(this, parent.getItemCount()); - createWidget(); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the receiver is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * widgetSelected is called when the receiver is selected - * widgetDefaultSelected is called when the receiver is - * double-clicked - *

- * - * @param listener - * the listener which should be notified when the receiver is - * selected by the user - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the platform-specific context menu trigger has occurred, by sending - * it one of the messages defined in the MenuDetectListener - * interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see MenuDetectListener - * @see #removeMenuDetectListener - * - * @since 3.3 - */ - public void addMenuDetectListener(MenuDetectListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.MenuDetect, typedListener); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - void createWidget() { - // TODO - } - - @Override - void destroyWidget() { - parent.destroyItem(this); - releaseQWidget(); - } - - /** - * Returns the receiver's parent, which must be a Tray. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public Tray getParent() { - checkWidget(); - return parent; - } - - /** - * Returns the receiver's tool tip, or null if it has not been set. - * - * @return the receiver's tool tip text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public ToolTip getToolTip() { - checkWidget(); - return toolTip; - } - - /** - * Returns the receiver's tool tip text, or null if it has not been set. - * - * @return the receiver's tool tip text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public String getToolTipText() { - checkWidget(); - return toolTipText; - } - - /** - * Returns true if the receiver is visible and - * false otherwise. - * - * @return the receiver's visibility - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getVisible() { - checkWidget(); - return visible; - } - - void recreate() { - createWidget(); - if (!visible) { - setVisible(false); - } - if (text.length() != 0) { - setText(text); - } - if (image != null) { - setImage(image); - } - if (toolTipText != null) { - setToolTipText(toolTipText); - } - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - parent = null; - } - - @Override - void releaseWidget() { - super.releaseWidget(); - if (toolTip != null) { - toolTip.item = null; - } - toolTip = null; - if (image2 != null) { - image2.dispose(); - } - image2 = null; - toolTipText = null; - // NOTIFYICONDATA iconData = OS.IsUnicode ? (NOTIFYICONDATA) new NOTIFYICONDATAW() : new NOTIFYICONDATAA(); - // iconData.cbSize = NOTIFYICONDATA.sizeof; - // iconData.uID = id; - // iconData.hWnd = display.hwndMessage; - // OS.Shell_NotifyIcon(OS.NIM_DELETE, iconData); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the receiver is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the platform-specific context menu trigger has occurred. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see MenuDetectListener - * @see #addMenuDetectListener - * - * @since 3.3 - */ - public void removeMenuDetectListener(MenuDetectListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.MenuDetect, listener); - } - - /** - * Sets the receiver's image. - * - * @param image - * the new image - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - @Override - public void setImage(Image image) { - checkWidget(); - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - super.setImage(image); - // if (image2 != null) - // image2.dispose(); - // image2 = null; - // QImage hIcon = null; - // Image icon = image; - // if (icon != null) { - // switch (icon.type) { - // case SWT.BITMAP: - // image2 = Display.createIcon(image); - // hIcon = image2.getQImage(); - // break; - // case SWT.ICON: - // hIcon = icon.getQImage(); - // break; - // } - // } - //getQTray().setIcon( image.getQIcon() ); - } - - /** - * Sets the receiver's tool tip to the argument, which may be null - * indicating that no tool tip should be shown. - * - * @param toolTip - * the new tool tip (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setToolTip(ToolTip toolTip) { - checkWidget(); - ToolTip oldTip = this.toolTip, newTip = toolTip; - if (oldTip != null) { - oldTip.item = null; - } - this.toolTip = newTip; - if (newTip != null) { - newTip.item = this; - } - } - - /** - * Sets the receiver's tool tip text to the argument, which may be null - * indicating that the default tool tip for the control will be shown. For a - * control that has a default tool tip, such as the Tree control on Windows, - * setting the tool tip text to an empty string replaces the default, - * causing no tool tip text to be shown. - *

- * The mnemonic indicator (character '&') is not displayed in a tool - * tip. To display a single '&' in the tool tip, the character '&' - * can be escaped by doubling it in the string. - *

- * - * @param string - * the new tool tip text (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setToolTipText(String string) { - checkWidget(); - toolTipText = string; - // NOTIFYICONDATA iconData = OS.IsUnicode ? (NOTIFYICONDATA) new NOTIFYICONDATAW() : new NOTIFYICONDATAA(); - // TCHAR buffer = new TCHAR(0, toolTipText == null ? "" : toolTipText, true); - // /* - // * Note that the size of the szTip field is different in version 5.0 of - // * shell32.dll. - // */ - // int length = 64; //OS.SHELL32_MAJOR < 5 ? 64 : 128; - // if (OS.IsUnicode) { - // char[] szTip = ((NOTIFYICONDATAW) iconData).szTip; - // length = Math.min(length - 1, buffer.length()); - // System.arraycopy(buffer.chars, 0, szTip, 0, length); - // } else { - // byte[] szTip = ((NOTIFYICONDATAA) iconData).szTip; - // length = Math.min(length - 1, buffer.length()); - // System.arraycopy(buffer.bytes, 0, szTip, 0, length); - // } - // iconData.cbSize = NOTIFYICONDATA.sizeof; - // iconData.uID = id; - // // iconData.hWnd = display.hwndMessage; - // // iconData.uFlags = OS.NIF_TIP; - // // OS.Shell_NotifyIcon(OS.NIM_MODIFY, iconData); - } - - /** - * Makes the receiver visible if the argument is true, and - * makes it invisible otherwise. - * - * @param visible - * the new visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setVisible(boolean visible) { - checkWidget(); - if (this.visible == visible) { - return; - } - if (visible) { - /* - * It is possible (but unlikely), that application code could have - * disposed the widget in the show event. If this happens, just - * return. - */ - sendEvent(SWT.Show); - if (isDisposed()) { - return; - } - } - this.visible = visible; - // TODO - if (!visible) { - sendEvent(SWT.Hide); - } - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tree.java deleted file mode 100644 index c9a145b5a6..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tree.java +++ /dev/null @@ -1,1913 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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 java.util.List; - -import com.trolltech.qt.core.QModelIndex; -import com.trolltech.qt.core.QSize; -import com.trolltech.qt.core.Qt.DropActions; -import com.trolltech.qt.core.Qt.ScrollBarPolicy; -import com.trolltech.qt.core.Qt.SortOrder; -import com.trolltech.qt.gui.QAbstractItemDelegate; -import com.trolltech.qt.gui.QDragEnterEvent; -import com.trolltech.qt.gui.QDragLeaveEvent; -import com.trolltech.qt.gui.QDragMoveEvent; -import com.trolltech.qt.gui.QDropEvent; -import com.trolltech.qt.gui.QHeaderView; -import com.trolltech.qt.gui.QPainter; -import com.trolltech.qt.gui.QStyleOptionViewItem; -import com.trolltech.qt.gui.QTreeWidget; -import com.trolltech.qt.gui.QTreeWidgetItem; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QAbstractItemView.DragDropMode; -import com.trolltech.qt.gui.QAbstractItemView.ScrollHint; -import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior; -import com.trolltech.qt.gui.QAbstractItemView.SelectionMode; - -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.events.TreeListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Point; - -/** - * Instances of this class provide a selectable user interface object that - * displays a hierarchy of items and issues notification when an item in the - * hierarchy is selected. - *

- * The item children that may be added to instances of this class must be of - * type TreeItem. - *

- *

- * Style VIRTUAL is used to create a Tree whose - * TreeItems are to be populated by the client on an on-demand - * basis instead of up-front. This can provide significant performance - * improvements for trees that are very large or for which TreeItem - * population is expensive (for example, retrieving values from an external - * source). - *

- *

- * Here is an example of using a Tree with style - * VIRTUAL:

- *  final Tree tree = new Tree(parent, SWT.VIRTUAL | SWT.BORDER);
- *  tree.setItemCount(20);
- *  tree.addListener(SWT.SetData, new Listener() {
- *      public void handleEvent(Event event) {
- *          TreeItem item = (TreeItem)event.item;
- *          TreeItem parentItem = item.getParentItem();
- *          String text = null;
- *          if (parentItem == null) {
- *              text = "node " + tree.indexOf(item);
- *          } else {
- *              text = parentItem.getText() + " - " + parentItem.indexOf(item);
- *          }
- *          item.setText(text);
- *          System.out.println(text);
- *          item.setItemCount(10);
- *      }
- *  });
- * 
- *

- *

- * Note that although this class is a subclass of Composite, it - * does not normally make sense to add Control children to it, or - * set a layout on it, unless implementing something like a cell editor. - *

- *

- *

- *
Styles:
- *
SINGLE, MULTI, CHECK, FULL_SELECTION, VIRTUAL, NO_SCROLL
- *
Events:
- *
Selection, DefaultSelection, Collapse, Expand, SetData, MeasureItem, - * EraseItem, PaintItem
- *
- *

- *

- * Note: Only one of the styles SINGLE and MULTI may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Tree, TreeItem, - * TreeColumn snippets - * @see SWT Example: - * ControlExample - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ -public class Tree extends Composite { - private List items; - private List columns; - TreeColumn sortColumn; - int sortDirection; - boolean customDraw; - private boolean linesVisible; - private static final int GRID_WIDTH = 1; - private TreeItemDelegate itemDelegate; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#SINGLE - * @see SWT#MULTI - * @see SWT#CHECK - * @see SWT#FULL_SELECTION - * @see SWT#VIRTUAL - * @see SWT#NO_SCROLL - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public Tree(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected void connectSignals() { - QTreeWidget tree = getQTreeWidget(); - - tree.itemExpanded.connect(this, "qtTreeItemExpandedEvent(QTreeWidgetItem)"); //$NON-NLS-1$ - tree.itemCollapsed.connect(this, "qtTreeItemCollapsedEvent(QTreeWidgetItem)"); //$NON-NLS-1$ - tree.itemDoubleClicked.connect(this, "qtTreeItemDoubleClickedEvent(QTreeWidgetItem,Integer)"); //$NON-NLS-1$ - tree.itemSelectionChanged.connect(this, "qtTreeSelectionChanged()"); //$NON-NLS-1$ - } - - @Override - QWidget createQWidget(int style) { - state &= ~(CANVAS | THEME_BACKGROUND); - items = new ArrayList(4); - columns = new ArrayList(4); - - QTreeWidget tree = new MyQTreeWidget(); - tree.setHeaderHidden(true); - - if ((style & SWT.NO_SCROLL) != 0) { - tree.setHorizontalScrollBarPolicy(ScrollBarPolicy.ScrollBarAlwaysOff); - tree.setVerticalScrollBarPolicy(ScrollBarPolicy.ScrollBarAlwaysOff); - } - - // default value is singleSelection - if ((style & SWT.MULTI) != 0) { - tree.setSelectionMode(SelectionMode.ExtendedSelection); - } else { - tree.setSelectionMode(SelectionMode.SingleSelection); - } - - if ((style & SWT.FULL_SELECTION) != 0) { - tree.setSelectionBehavior(SelectionBehavior.SelectRows); - } else { - tree.setSelectionBehavior(SelectionBehavior.SelectItems); - } - - QAbstractItemDelegate originalItemDelegate = tree.itemDelegate(); - itemDelegate = new TreeItemDelegate(originalItemDelegate); - tree.setItemDelegate(itemDelegate); - - setQMasterWidget(tree); - return tree.viewport(); - } - - QTreeWidget getQTreeWidget() { - return (QTreeWidget) getQMasterWidget(); - } - - @Override - protected void checkAndUpdateBorder() { - checkAndUpdateBorder(getQMasterWidget()); - super.checkAndUpdateBorder(); - } - - @Override - protected Color getDefaultBackgroundColor() { - return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND); - } - - static int checkStyle(int style) { - /* - * Feature in Windows. Even when WS_HSCROLL or WS_VSCROLL is not - * specified, Windows creates trees and tables with scroll bars. The fix - * is to set H_SCROLL and V_SCROLL. - * - * NOTE: This code appears on all platforms so that applications have - * consistent scroll bar behavior. - */ - if ((style & SWT.NO_SCROLL) == 0) { - style |= SWT.H_SCROLL | SWT.V_SCROLL; - } - /* - * Note: Windows only supports TVS_NOSCROLL and TVS_NOHSCROLL. - */ - if ((style & SWT.H_SCROLL) != 0 && (style & SWT.V_SCROLL) == 0) { - style |= SWT.V_SCROLL; - } - return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0); - } - - @Override - public void setDragEnabled(boolean enabled) { - getQTreeWidget().setDragEnabled(enabled); - } - - @Override - public void setAcceptDrops(boolean accept) { - super.setAcceptDrops(accept); - getQTreeWidget().setDragDropMode(DragDropMode.DragDrop); - getQTreeWidget().setDropIndicatorShown(true); - } - - public void highlightItem(TreeItem item) { - System.out.println("highlightItem: " + item); - if (item != null) { - getQTreeWidget().setCurrentItem(item.getQItem()); - } else { - getQTreeWidget().setCurrentItem(null); - } - } - - /** - * 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 SelectionListener interface. - *

- * When widgetSelected is called, the item field of the event - * object is valid. If the receiver has the SWT.CHECK style and - * the check selection changes, the event object detail field contains the - * value SWT.CHECK. widgetDefaultSelected is - * typically called when an item is double-clicked. The item field of the - * event object is valid for default selection, but the detail field is not - * used. - *

- * - * @param listener - * the listener which should be notified when the user changes - * the receiver's selection - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when an item in the receiver is expanded or collapsed by sending it one - * of the messages defined in the TreeListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see TreeListener - * @see #removeTreeListener - */ - public void addTreeListener(TreeListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Expand, typedListener); - addListener(SWT.Collapse, typedListener); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - /** - * Clears the item at the given zero-relative index in the receiver. The - * text, icon and other attributes of the item are set to the default value. - * If the tree was created with the SWT.VIRTUAL style, these - * attributes are requested again as needed. - * - * @param index - * the index of the item to clear - * @param all - * true if all child items of the indexed item - * should be cleared recursively, and false - * otherwise - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#VIRTUAL - * @see SWT#SetData - * - * @since 3.2 - */ - public void clear(int index, boolean all) { - checkWidget(); - if (_getItemCount() == 0) { - return; - } - validateItemIndex(index); - items.get(index).clear(0, all); - } - - private void validateItemIndex(int index) { - if (index < 0 || index >= _getItemCount()) { - error(SWT.ERROR_INVALID_RANGE); - } - } - - /** - * Clears all the items in the receiver. The text, icon and other attributes - * of the items are set to their default values. If the tree was created - * with the SWT.VIRTUAL style, these attributes are requested - * again as needed. - * - * @param all - * true if all child items should be cleared - * recursively, and false otherwise - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#VIRTUAL - * @see SWT#SetData - * - * @since 3.2 - */ - public void clearAll(boolean all) { - checkWidget(); - for (TreeItem item : items) { - item.clear(0, all); - } - } - - void addColumn(TreeColumn column, int index) { - int columnCount = columns.size(); - if (!(0 <= index && index <= columnCount)) { - error(SWT.ERROR_INVALID_RANGE); - } - - if (index == columnCount) { - columns.add(column); - } else { - columns.add(index, column); - } - // QHeaderView header = getQTreeWidget().header(); - // if (index >= columnCount) { - // header.addAction(column.getQAction()); - // } else { - // QAction before = header.actions().get(index); - // header.insertAction(before, column.getQAction()); - // } - } - - void removeColumn(TreeColumn treeColumn) { - columns.remove(treeColumn); - //getQTreeWidget().headerItem().removeAction(treeColumn.getQAction()); - } - - void addItem(TreeItem item, int index) { - if (index >= 0 && index < _getItemCount()) { - items.add(index, item); - getQTreeWidget().insertTopLevelItem(index, item.getQItem()); - } else { - items.add(item); - getQTreeWidget().addTopLevelItem(item.getQItem()); - } - } - - void removeItem(TreeItem item) { - items.remove(item); - getQTreeWidget().invisibleRootItem().removeChild(item.getQItem()); - } - - /** - * Deselects an item in the receiver. If the item was already deselected, it - * remains deselected. - * - * @param item - * the item to be deselected - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public void deselect(TreeItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - - item.getQItem().setSelected(false); - } - - /** - * Deselects all selected items in the receiver. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void deselectAll() { - checkWidget(); - getQTreeWidget().clearSelection(); - } - - /** - * Returns the width in pixels of a grid line. - * - * @return the width of a grid line in pixels - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public int getGridLineWidth() { - checkWidget(); - return GRID_WIDTH; - } - - /** - * Returns the height of the receiver's header - * - * @return the height of the header or zero if the header is not visible - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public int getHeaderHeight() { - checkWidget(); - return getQTreeWidget().header().height(); - } - - /** - * Returns true if the receiver's header is visible, and - * false otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

- * - * @return the receiver's header's visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public boolean getHeaderVisible() { - checkWidget(); - return !getQTreeWidget().isHeaderHidden(); - } - - /** - * Returns the column at the given, zero-relative index in the receiver. - * Throws an exception if the index is out of range. Columns are returned in - * the order that they were created. If no TreeColumns were - * created by the programmer, this method will throw - * ERROR_INVALID_RANGE despite the fact that a single column of - * data may be visible in the tree. This occurs when the programmer uses the - * tree like a list, adding items but never creating a column. - * - * @param index - * the index of the column to return - * @return the column at the given index - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#getColumnOrder() - * @see Tree#setColumnOrder(int[]) - * @see TreeColumn#getMoveable() - * @see TreeColumn#setMoveable(boolean) - * @see SWT#Move - * - * @since 3.1 - */ - public TreeColumn getColumn(int index) { - checkWidget(); - if (!(0 <= index && index < columns.size())) { - error(SWT.ERROR_INVALID_RANGE); - } - return columns.get(index); - } - - /** - * Returns the number of columns contained in the receiver. If no - * TreeColumns were created by the programmer, this value is - * zero, despite the fact that visually, one column of items may be visible. - * This occurs when the programmer uses the tree like a list, adding items - * but never creating a column. - * - * @return the number of columns - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public int getColumnCount() { - checkWidget(); - return _getColumnCount(); - } - - int _getColumnCount() { - return columns.size(); - } - - /** - * Returns an array of zero-relative integers that map the creation order of - * the receiver's items to the order in which they are currently being - * displayed. - *

- * Specifically, the indices of the returned array represent the current - * visual order of the items, and the contents of the array represent the - * creation order of the items. - *

- *

- * 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. - *

- * - * @return the current visual order of the receiver's items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#setColumnOrder(int[]) - * @see TreeColumn#getMoveable() - * @see TreeColumn#setMoveable(boolean) - * @see SWT#Move - * - * @since 3.2 - */ - public int[] getColumnOrder() { - checkWidget(); - if (_getColumnCount() == 0) { - return new int[0]; - } - int[] order = new int[_getColumnCount()]; - QHeaderView header = getQTreeWidget().header(); - for (int i = 0; i < order.length; i++) { - order[i] = header.visualIndex(i); - } - return order; - } - - /** - * Returns an array of TreeColumns which are the columns in the - * receiver. Columns are returned in the order that they were created. If no - * TreeColumns were created by the programmer, the array is - * empty, despite the fact that visually, one column of items may be - * visible. This occurs when the programmer uses the tree like a list, - * adding items but never creating a column. - *

- * 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. - *

- * - * @return the items in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#getColumnOrder() - * @see Tree#setColumnOrder(int[]) - * @see TreeColumn#getMoveable() - * @see TreeColumn#setMoveable(boolean) - * @see SWT#Move - * - * @since 3.1 - */ - public TreeColumn[] getColumns() { - checkWidget(); - TreeColumn[] result = new TreeColumn[_getColumnCount()]; - int i = 0; - for (TreeColumn col : columns) { - result[i] = col; - i++; - } - return result; - } - - /** - * 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 - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public TreeItem getItem(int index) { - checkWidget(); - if (index < 0 || index >= items.size()) { - error(SWT.ERROR_INVALID_RANGE); - } - return items.get(index); - } - - /** - * Returns the 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. - *

- * The item that is returned represents an item that could be selected by - * the user. For example, if selection only occurs in items in the first - * column, then null is returned if the point is outside of the item. Note - * that the SWT.FULL_SELECTION style hint, which specifies the selection - * policy, determines the extent of the selection. - *

- * - * @param point - * the point used to locate the item - * @return the item at the given point, or null if the point is not in a - * selectable item - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the point is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TreeItem getItem(Point point) { - checkWidget(); - if (point == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - return _getItem(point); - } - - private TreeItem _getItem(Point point) { - QTreeWidgetItem qItem = getQTreeWidget().itemAt(point.x, point.y); - for (TreeItem item : items) { - if (item.getQItem() == qItem) { - return item; - } - TreeItem ti = item.getItem(qItem); - if (ti != null) { - return ti; - } - } - return null; - - } - - /** - * Returns the number of items contained in the receiver that are direct - * item children of the receiver. The number that is returned is the number - * of roots in the tree. - * - * @return the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getItemCount() { - checkWidget(); - return items.size(); - } - - int _getItemCount() { - return items.size(); - } - - /** - * Returns the height of the area which would be used to display - * one of the items in the tree. - * - * @return the height of one item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getItemHeight() { - checkWidget(); - int itemHeight = 0; - if (items.size() > 0) { - itemHeight = getQTreeWidget().sizeHintForRow(0); - } else { - // add dummy node and get the height - getQTreeWidget().addTopLevelItem(new QTreeWidgetItem()); - itemHeight = getQTreeWidget().sizeHintForRow(0); - getQTreeWidget().clear(); - } - return itemHeight; - } - - /** - * Returns a (possibly empty) array of items contained in the receiver that - * are direct item children of the receiver. These are the roots of the - * tree. - *

- * 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. - *

- * - * @return the items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TreeItem[] getItems() { - checkWidget(); - TreeItem[] arr = new TreeItem[_getItemCount()]; - int i = 0; - for (TreeItem item : items) { - arr[i] = item; - i++; - } - return arr; - } - - /** - * Returns true if the receiver's lines are visible, and - * false otherwise. Note that some platforms draw grid lines - * while others may draw alternating row colors. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, this method may still indicate that it is - * considered visible even though it may not actually be showing. - *

- * - * @return the visibility state of the lines - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public boolean getLinesVisible() { - checkWidget(); - return linesVisible; - } - - /** - * Returns the receiver's parent item, which must be a TreeItem - * or null when the receiver is a root. - * - * @return the receiver's parent item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TreeItem getParentItem() { - checkWidget(); - return null; - } - - /** - * Returns an array of TreeItems that are currently selected in - * the receiver. The order of the items is unspecified. An empty array - * indicates that no items are selected. - *

- * Note: This is not the actual structure used by the receiver to maintain - * its selection, so modifying the array will not affect the receiver. - *

- * - * @return an array representing the selection - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TreeItem[] getSelection() { - checkWidget(); - List selectedQItems = getQTreeWidget().selectedItems(); - if (selectedQItems.isEmpty()) { - return new TreeItem[0]; - } - - TreeItem[] items = new TreeItem[selectedQItems.size()]; - int i = 0; - for (QTreeWidgetItem item : selectedQItems) { - Widget widget = display.findControl(item); - if (widget instanceof TreeItem) { - items[i] = (TreeItem) widget; - } - i++; - } - return items; - } - - /** - * Returns the number of selected items contained in the receiver. - * - * @return the number of selected items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getSelectionCount() { - checkWidget(); - return getQTreeWidget().selectedItems().size(); - } - - /** - * Returns the column which shows the sort indicator for the receiver. The - * value may be null if no column shows the sort indicator. - * - * @return the sort indicator - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #setSortColumn(TreeColumn) - * - * @since 3.2 - */ - public TreeColumn getSortColumn() { - checkWidget(); - return sortColumn; - } - - /** - * Returns the direction of the sort indicator for the receiver. The value - * will be one of UP, DOWN or NONE. - * - * @return the sort direction - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #setSortDirection(int) - * - * @since 3.2 - */ - public int getSortDirection() { - checkWidget(); - return sortDirection; - } - - /** - * Returns the item which is currently at the top of the receiver. This item - * can change when items are expanded, collapsed, scrolled or new items are - * added or removed. - * - * @return the item at the top of the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.1 - */ - public TreeItem getTopItem() { - checkWidget(); - return _getItem(new Point(1, 1)); - } - - /** - * Searches the receiver's list starting at the first column (index 0) until - * a column is found that is equal to the argument, and returns the index of - * that column. If no column is found, returns -1. - * - * @param column - * the search column - * @return the index of the column - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the column is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public int indexOf(TreeColumn column) { - checkWidget(); - if (column == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (column.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - return columns.indexOf(column); - } - - /** - * 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public int indexOf(TreeItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - return items.indexOf(item); - } - - @Override - void releaseChildren(boolean destroy) { - if (items != null) { - for (TreeItem item : items) { - if (item != null && !item.isDisposed()) { - item.release(false); - } - } - items = null; - } - if (columns != null) { - for (TreeColumn column : columns) { - if (column != null && !column.isDisposed()) { - column.release(false); - } - } - columns = null; - } - super.releaseChildren(destroy); - } - - @Override - void releaseWidget() { - super.releaseWidget(); - customDraw = false; - } - - /** - * Removes all of the items from the receiver. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void removeAll() { - checkWidget(); - List copyOfItems = new ArrayList(items); - for (TreeItem item : copyOfItems) { - item.dispose(); - } - items.clear(); - } - - /** - * 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SelectionListener - * @see #addSelectionListener - */ - public void removeSelectionListener(SelectionListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - eventTable.unhook(SWT.Selection, listener); - eventTable.unhook(SWT.DefaultSelection, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when items in the receiver are expanded or collapsed. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see TreeListener - * @see #addTreeListener - */ - public void removeTreeListener(TreeListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Expand, listener); - eventTable.unhook(SWT.Collapse, listener); - } - - /** - * Display a mark indicating the point at which an item will be inserted. - * The drop insert item has a visual hint to show where a dragged item will - * be inserted when dropped on the tree. - * - * @param item - * the insert item. Null will clear the insertion mark. - * @param before - * true places the insert mark above 'item'. false places the - * insert mark below 'item'. - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setInsertMark(TreeItem item, boolean before) { - checkWidget(); - //TODO d'n'd - } - - /** - * Sets the number of root-level items contained in the receiver. - * - * @param count - * the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setItemCount(int count) { - checkWidget(); - count = Math.max(0, count); - int itemCount = _getItemCount(); - if (count == itemCount) { - return; - } - boolean isVirtual = (style & SWT.VIRTUAL) != 0; - if (!isVirtual) { - setRedraw(false); - } - - if (count < itemCount) { - for (int i = itemCount - 1; i >= count; i--) { - removeItem(items.get(i)); - } - return; - } - if (isVirtual) { - //TODO - } else { - for (int i = itemCount; i < count; i++) { - new TreeItem(this, SWT.NONE, i); - } - } - if (!isVirtual) { - setRedraw(true); - } - } - - /** - * Sets the height of the area which would be used to display one - * of the items in the tree. - * - * @param itemHeight - * the height of one item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - /* public */void setItemHeight(int itemHeight) { - checkWidget(); - if (itemHeight < -1) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - itemDelegate.setHeight(itemHeight); - update(); - } - - /** - * Marks the receiver's lines as visible if the argument is - * true, and marks it invisible otherwise. Note that some - * platforms draw grid lines while others may draw alternating row colors. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

- * - * @param show - * the new visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setLinesVisible(boolean show) { - checkWidget(); - if (linesVisible == show) { - return; - } - linesVisible = show; - getQTreeWidget().setAlternatingRowColors(show); - } - - /** - * Selects an item in the receiver. If the item was already selected, it - * remains selected. - * - * @param item - * the item to be selected - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.4 - */ - public void select(TreeItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - item.getQItem().setSelected(true); - } - - /** - * Selects all of the items in the receiver. - *

- * If the receiver is single-select, do nothing. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void selectAll() { - checkWidget(); - getQTreeWidget().selectAll(); - } - - /** - * Sets the order that the items in the receiver should be displayed in to - * the given argument which is described in terms of the zero-relative - * ordering of when the items were added. - * - * @param order - * the new order to display the items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item order is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item order is not the - * same length as the number of items
  • - *
- * - * @see Tree#getColumnOrder() - * @see TreeColumn#getMoveable() - * @see TreeColumn#setMoveable(boolean) - * @see SWT#Move - * - * @since 3.2 - */ - public void setColumnOrder(int[] order) { - checkWidget(); - if (order == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int columnCount = _getColumnCount(); - if (columnCount == 0) { - if (order.length != 0) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - return; - } - if (order.length != columnCount) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - QHeaderView header = getQTreeWidget().header(); - for (int i = 0; i < columnCount; i++) { - int visualIndex = header.visualIndex(i); - header.moveSection(visualIndex, order[i]); - } - } - - /** - * Marks the receiver's header as visible if the argument is - * true, and marks it invisible otherwise. - *

- * If one of the receiver's ancestors is not visible or some other condition - * makes the receiver not visible, marking it visible may not actually cause - * it to be displayed. - *

- * - * @param show - * the new visibility state - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setHeaderVisible(boolean show) { - checkWidget(); - getQTreeWidget().setHeaderHidden(!show); - } - - /** - * Sets the receiver's selection to the given item. The current selection is - * cleared before the new item is selected. - *

- * If the item is not in the receiver, then it is ignored. - *

- * - * @param item - * the item to select - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setSelection(TreeItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setSelection(new TreeItem[] { item }); - } - - /** - * Sets the receiver's selection to be the given array of items. The current - * selection is cleared before the new items are selected. - *

- * Items that are not in the receiver are ignored. If the receiver is - * single-select and multiple items are specified, then all items are - * ignored. - *

- * - * @param items - * the array of items - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the array of items is null
  • - *
  • ERROR_INVALID_ARGUMENT - if one of the items has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#deselectAll() - */ - public void setSelection(TreeItem[] items) { - checkWidget(); - if (items == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int length = items.length; - if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) { - deselectAll(); - return; - } - getQTreeWidget().clearSelection(); - for (TreeItem item : items) { - QTreeWidgetItem treeWidgetItem = item.getQItem(); - showItem(treeWidgetItem); - treeWidgetItem.setSelected(true); - } - } - - private void showItem(QTreeWidgetItem item) { - if (item.parent() != null) { - if (!item.parent().isExpanded()) { - item.parent().setExpanded(true); - } - showItem(item.parent()); - } - } - - /** - * Sets the column used by the sort indicator for the receiver. A null value - * will clear the sort indicator. The current sort column is cleared before - * the new column is set. - * - * @param column - * the column used by the sort indicator or null - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the column is disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setSortColumn(TreeColumn column) { - checkWidget(); - if (column != null && column.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - sortColumn = column; - getQTreeWidget().sortByColumn(indexOf(column), getQSortOrder()); - } - - /** - * Sets the direction of the sort indicator for the receiver. The value can - * be one of UP, DOWN or NONE. - * - * @param direction - * the direction of the sort indicator - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setSortDirection(int direction) { - checkWidget(); - if ((direction & (SWT.UP | SWT.DOWN)) == 0 && direction != SWT.NONE) { - return; - } - sortDirection = direction; - if (sortColumn != null && !sortColumn.isDisposed()) { - getQTreeWidget().sortByColumn(indexOf(sortColumn), getQSortOrder()); - } - } - - /** - * @return - */ - private SortOrder getQSortOrder() { - if ((sortDirection & SWT.UP) != 0) { - return SortOrder.AscendingOrder; - } - return SortOrder.DescendingOrder; - } - - /** - * Sets the item which is currently at the top of the receiver. This item - * can change when items are expanded, collapsed, scrolled or new items are - * added or removed. - * - * @param item - * the item to be shown - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#getTopItem() - * - * @since 2.1 - */ - public void setTopItem(TreeItem item) { - checkWidget(); - if (item == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - _showItem(item, ScrollHint.PositionAtTop); - } - - /** - * Shows the column. If the column is already showing in the receiver, this - * method simply returns. Otherwise, the columns are scrolled until the - * column is visible. - * - * @param column - * the column to be shown - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void showColumn(TreeColumn column) { - checkWidget(); - if (column == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (column.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (column.parent != this) { - return; - } - int index = indexOf(column); - if (index == -1) { - return; - } - getQTreeWidget().scrollToItem(getQTreeWidget().headerItem().child(index), ScrollHint.EnsureVisible); - } - - /** - * Shows the item. If the item is already showing in the receiver, this - * method simply returns. Otherwise, the items are scrolled and expanded - * until the item is visible. - * - * @param item - * the item to be shown - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#showSelection() - */ - public void showItem(TreeItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - _showItem(item, ScrollHint.EnsureVisible); - } - - private void _showItem(TreeItem item, ScrollHint hint) { - getQTreeWidget().scrollToItem(item.getQItem(), hint); - } - - /** - * Shows the selection. If the selection is already showing in the receiver, - * this method simply returns. Otherwise, the items are scrolled until the - * selection is visible. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#showItem(TreeItem) - */ - public void showSelection() { - checkWidget(); - List selection = getQTreeWidget().selectedItems(); - if (selection != null && selection.size() > 0) { - getQTreeWidget().scrollToItem(selection.get(0), ScrollHint.EnsureVisible); - } - } - - boolean sendTreeEvent(int eventType, QTreeWidgetItem item) { - Event event = new Event(); - event.item = display.findControl(item); - sendEvent(eventType, event, true); - return !event.doit; - } - - public boolean qtTreeItemCollapsedEvent(QTreeWidgetItem item) { - return sendTreeEvent(SWT.Collapse, item); - } - - public boolean qtTreeItemExpandedEvent(QTreeWidgetItem item) { - return sendTreeEvent(SWT.Expand, item); - } - - public void qtTreeItemDoubleClickedEvent(QTreeWidgetItem item, Integer column) { - sendEvent(SWT.DefaultSelection); - } - - private final class TreeItemDelegate extends QAbstractItemDelegate { - private final QAbstractItemDelegate wrappedDelegate; - private int height = -1; - - TreeItemDelegate(QAbstractItemDelegate wrappedDelegate) { - this.wrappedDelegate = wrappedDelegate; - - } - - public void setHeight(int height) { - this.height = height; - } - - @Override - public void paint(QPainter painter, QStyleOptionViewItem item, QModelIndex index) { - wrappedDelegate.paint(painter, item, index); - } - - @Override - public QSize sizeHint(QStyleOptionViewItem item, QModelIndex index) { - QSize size = wrappedDelegate.sizeHint(item, index); - if (height != -1) { - size.setHeight(height); - } - return size; - } - - } - - public boolean qtTreeSelectionChanged() { - List selectedItems = getQTreeWidget().selectedItems(); - if (selectedItems.size() > 1) { - System.out.println("more than one item selected in tree, selecting first"); //$NON-NLS-1$ - } - if (selectedItems.size() == 0) { - return sendTreeEvent(SWT.Selection, null); - } else { - // TODO what if more than one element is selected - return sendTreeEvent(SWT.Selection, selectedItems.get(0)); - } - } - - private final class MyQTreeWidget extends QTreeWidget { - - @Override - protected void startDrag(DropActions supportedActions) { - // System.out.println("MyQTreeWidget.startDrag: " + supportedActions); - } - - @Override - protected void dropEvent(QDropEvent event) { - sendDropEvent(event); - } - - @Override - protected void dragMoveEvent(QDragMoveEvent event) { - sendDragMoveEvent(event); - } - - @Override - protected void dragEnterEvent(QDragEnterEvent event) { - sendDragEnterEvent(event); - } - - @Override - protected void dragLeaveEvent(QDragLeaveEvent event) { - sendDragLeaveEvent(event); - } - - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeColumn.java deleted file mode 100644 index 1693962077..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeColumn.java +++ /dev/null @@ -1,714 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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 com.trolltech.qt.core.Qt.AlignmentFlag; -import com.trolltech.qt.gui.QHeaderView; -import com.trolltech.qt.gui.QIcon; -import com.trolltech.qt.gui.QTreeWidget; -import com.trolltech.qt.gui.QTreeWidgetItem; -import com.trolltech.qt.gui.QHeaderView.ResizeMode; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.ControlListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Image; - -/** - * Instances of this class represent a column in a tree widget. - *

- *

- *
Styles:
- *
LEFT, RIGHT, CENTER
- *
Events:
- *
Move, Resize, Selection
- *
- *

- *

- * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified. - *

- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Tree, TreeItem, - * TreeColumn snippets - * @see Sample code and further - * information - * - * @since 3.1 - * @noextend This class is not intended to be subclassed by clients. - */ -public class TreeColumn extends Item { - Tree parent; - private boolean resizable, moveable; - - /** - * Constructs a new instance of this class given its parent (which must be a - * Tree) and a style value describing its behavior and - * appearance. The item is added to the end of the items maintained by its - * parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#LEFT - * @see SWT#RIGHT - * @see SWT#CENTER - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TreeColumn(Tree parent, int style) { - super(parent, checkStyle(style)); - resizable = true; - this.parent = parent; - createQAction(parent, style, parent.getColumnCount()); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Tree), a style value describing its behavior and appearance, - * and the index at which to place it in the items maintained by its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- *

- * Note that due to a restriction on some platforms, the first column is - * always left aligned. - *

- * - * @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 - * @param index - * the zero-relative index to store the receiver in its parent - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the parent (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT#LEFT - * @see SWT#RIGHT - * @see SWT#CENTER - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TreeColumn(Tree parent, int style, int index) { - super(parent, checkStyle(style)); - resizable = true; - this.parent = parent; - createQAction(parent, style, index); - } - - private void adjustColumnCount() { - int columnCount = parent.getColumnCount(); - if (getQTreeWidget().columnCount() <= columnCount) { - getQTreeWidget().setColumnCount(columnCount + 1); - } - } - - protected void createQAction(Tree parent, int style, int index) { - adjustColumnCount(); - parent.addColumn(this, index); - getQHeaderItem().setText(index, ""); //$NON-NLS-1$ - } - - @Override - void releaseQWidget() { - //display.removeControl(action); - super.releaseQWidget(); - } - - QTreeWidget getQTreeWidget() { - return parent.getQTreeWidget(); - } - - QTreeWidgetItem getQHeaderItem() { - return getQTreeWidget().headerItem(); - } - - QHeaderView getQHeaderView() { - return getQTreeWidget().header(); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is moved or resized, by sending it one of the messages - * defined in the ControlListener interface. - * - * @param listener - * the listener which should be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ControlListener - * @see #removeControlListener - */ - public void addControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Resize, typedListener); - addListener(SWT.Move, typedListener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the control is selected by the user, by sending it one of the - * messages defined in the SelectionListener interface. - *

- * widgetSelected is called when the column header is selected. - * widgetDefaultSelected is not called. - *

- * - * @param listener - * the listener which should be notified when the control is - * selected by the user - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - static int checkStyle(int style) { - return checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - @Override - void destroyWidget() { - parent.removeColumn(this); - super.destroyWidget(); - } - - /** - * Returns a value which describes the position of the text or image in the - * receiver. The value will be one of LEFT, RIGHT - * or CENTER. - * - * @return the alignment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getAlignment() { - checkWidget(); - if ((style & SWT.LEFT) != 0) { - return SWT.LEFT; - } - if ((style & SWT.CENTER) != 0) { - return SWT.CENTER; - } - if ((style & SWT.RIGHT) != 0) { - return SWT.RIGHT; - } - return SWT.LEFT; - } - - /** - * Gets the moveable attribute. A column that is not moveable cannot be - * reordered by the user by dragging the header but may be reordered by the - * programmer. - * - * @return the moveable attribute - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#getColumnOrder() - * @see Tree#setColumnOrder(int[]) - * @see TreeColumn#setMoveable(boolean) - * @see SWT#Move - * - * @since 3.2 - */ - public boolean getMoveable() { - checkWidget(); - return moveable; - } - - @Override - String getNameText() { - return getText(); - } - - /** - * Returns the receiver's parent, which must be a Tree. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Tree getParent() { - checkWidget(); - return parent; - } - - /** - * Gets the resizable attribute. A column that is not resizable cannot be - * dragged by the user but may be resized by the programmer. - * - * @return the resizable attribute - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public boolean getResizable() { - checkWidget(); - return resizable; - } - - /** - * Returns the receiver's tool tip text, or null if it has not been set. - * - * @return the receiver's tool tip text - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public String getToolTipText() { - checkWidget(); - int index = parent.indexOf(this); - if (index == -1) { - return ""; //$NON-NLS-1$ - } - return getQHeaderItem().toolTip(index); - } - - /** - * Gets the width of the receiver. - * - * @return the width - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getWidth() { - checkWidget(); - int index = parent.indexOf(this); - if (index == -1) { - return 0; - } - return getQTreeWidget().header().sectionSize(index); - } - - /** - * Causes the receiver to be resized to its preferred size. For a composite, - * this involves computing the preferred size from its layout, if there is - * one. - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - */ - public void pack() { - checkWidget(); - int index = parent.indexOf(this); - if (index == -1) { - return; - } - getQTreeWidget().resizeColumnToContents(index); - } - - @Override - void releaseParent() { - super.releaseParent(); - if (parent.sortColumn == this) { - parent.sortColumn = null; - } - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is moved or resized. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see ControlListener - * @see #addControlListener - */ - public void removeControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Move, listener); - eventTable.unhook(SWT.Resize, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the control is selected by the user. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @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); - } - - /** - * Controls how text and images will be displayed in the receiver. The - * argument should be one of LEFT, RIGHT or - * CENTER. - *

- * Note that due to a restriction on some platforms, the first column is - * always left aligned. - *

- * - * @param alignment - * the new alignment - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setAlignment(int alignment) { - checkWidget(); - if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) { - return; - } - int index = parent.indexOf(this); - if (index == -1 || index == 0) { - return; - } - style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER); - style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER); - - getQTreeWidget().headerItem().setTextAlignment(index, convertAlignment(style)); - } - - private int convertAlignment(int style) { - if ((style & SWT.CENTER) != 0) { - return AlignmentFlag.AlignCenter.value(); - } else if ((style & SWT.RIGHT) != 0) { - return AlignmentFlag.AlignRight.value(); - } - return AlignmentFlag.AlignLeft.value(); - } - - @Override - public void setImage(Image image) { - checkWidget(); - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - super.setImage(image); - if (parent.sortColumn != this || parent.sortDirection != SWT.NONE) { - setImage(image, false, false); - } - } - - void setImage(Image image, boolean sort, boolean right) { - int index = parent.indexOf(this); - if (index == -1) { - return; - } - if (image != null) { - QIcon icon = new QIcon(); - icon.addPixmap(image.getQPixmap()); - getQHeaderItem().setIcon(index, icon); - } else { - getQHeaderItem().setIcon(index, (QIcon) null); - } - } - - /** - * Sets the moveable attribute. A column that is moveable can be reordered - * by the user by dragging the header. A column that is not moveable cannot - * be dragged by the user but may be reordered by the programmer. - * - * @param moveable - * the moveable attribute - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Tree#setColumnOrder(int[]) - * @see Tree#getColumnOrder() - * @see TreeColumn#getMoveable() - * @see SWT#Move - * - * @since 3.2 - */ - public void setMoveable(boolean moveable) { - checkWidget(); - this.moveable = moveable; - } - - /** - * Sets the resizable attribute. A column that is not resizable cannot be - * dragged by the user but may be resized by the programmer. - * - * @param resizable - * the resize attribute - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setResizable(boolean resizable) { - checkWidget(); - this.resizable = resizable; - getQHeaderView().setResizeMode(parent.indexOf(this), resizable ? ResizeMode.Interactive : ResizeMode.Fixed); - } - - @Override - public void setText(String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (string.equals(text)) { - return; - } - int index = parent.indexOf(this); - if (index == -1) { - return; - } - super.setText(string); - getQHeaderItem().setText(index, string); - } - - /** - * Sets the receiver's tool tip text to the argument, which may be null - * indicating that the default tool tip for the control will be shown. For a - * control that has a default tool tip, such as the Tree control on Windows, - * setting the tool tip text to an empty string replaces the default, - * causing no tool tip text to be shown. - *

- * The mnemonic indicator (character '&') is not displayed in a tool - * tip. To display a single '&' in the tool tip, the character '&' - * can be escaped by doubling it in the string. - *

- * - * @param string - * the new tool tip text (or null) - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setToolTipText(String string) { - checkWidget(); - int index = parent.indexOf(this); - if (index == -1) { - return; - } - getQHeaderItem().setToolTip(index, string); - } - - /** - * Sets the width of the receiver. - * - * @param width - * the new width - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setWidth(int width) { - checkWidget(); - if (width < 0) { - return; - } - int index = parent.indexOf(this); - if (index == -1) { - return; - } - getQTreeWidget().setColumnWidth(index, width); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeItem.java deleted file mode 100644 index 7ecd774bf9..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeItem.java +++ /dev/null @@ -1,1573 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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 java.util.List; - -import com.trolltech.qt.gui.QBrush; -import com.trolltech.qt.gui.QIcon; -import com.trolltech.qt.gui.QTreeWidget; -import com.trolltech.qt.gui.QTreeWidgetItem; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class represent a selectable user interface object that - * represents a hierarchy of tree items in a tree widget. - * - *
- *
Styles:
- *
(none)
- *
Events:
- *
(none)
- *
- *

- * IMPORTANT: This class is not intended to be subclassed. - *

- * - * @see Tree, TreeItem, - * TreeColumn snippets - * @see Sample code and further - * information - * @noextend This class is not intended to be subclassed by clients. - */ - -public class TreeItem extends Item { - private QTreeWidgetItem item; - private List items; - private Tree parent; - private TreeItem parentItem; - private String[] strings; - private Image[] images; - private Font font; - private Font[] cellFont; - boolean cached; - private Color background; - private Color foreground; - private int[] cellBackground, cellForeground; - private boolean grayed; - - /** - * Constructs a new instance of this class given its parent (which must be a - * Tree or a TreeItem) and a style value - * describing its behavior and appearance. The item is added to the end of - * the items maintained by its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param parent - * a tree control which will be the parent of the new instance - * (cannot be null) - * @param style - * the style of control to construct - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TreeItem(Tree parent, int style) { - this(parent, null, style, -1); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Tree or a TreeItem), a style value describing - * its behavior and appearance, and the index at which to place it in the - * items maintained by its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param parent - * a tree control which will be the parent of the new instance - * (cannot be null) - * @param style - * the style of control to construct - * @param index - * the zero-relative index to store the receiver in its parent - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the parent (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TreeItem(Tree parent, int style, int index) { - this(parent, null, style, index); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Tree or a TreeItem) and a style value - * describing its behavior and appearance. The item is added to the end of - * the items maintained by its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param parentItem - * a tree control which will be the parent of the new instance - * (cannot be null) - * @param style - * the style of control to construct - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TreeItem(TreeItem parentItem, int style) { - this(checkNull(parentItem).parent, parentItem, style, -1); - } - - /** - * Constructs a new instance of this class given its parent (which must be a - * Tree or a TreeItem), a style value describing - * its behavior and appearance, and the index at which to place it in the - * items maintained by its parent. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param parentItem - * a tree control which will be the parent of the new instance - * (cannot be null) - * @param style - * the style of control to construct - * @param index - * the zero-relative index to store the receiver in its parent - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the parent (inclusive)
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TreeItem(TreeItem parentItem, int style, int index) { - this(checkNull(parentItem).parent, parentItem, style, index); - } - - TreeItem(Tree parent, TreeItem parentItem, int style, int index) { - super(parent, style); - this.parent = parent; - item = new QTreeWidgetItem(); - items = new ArrayList(4); - if (parentItem != null) { - this.parentItem = parentItem; - parentItem.addItem(this, index); - } else { - parent.addItem(this, index); - } - display.addControl(item, this); - } - - void addItem(TreeItem item, int index) { - if (index >= 0 && index < items.size()) { - items.add(index, item); - this.item.insertChild(index, item.getQItem()); - } else { - items.add(item); - this.item.addChild(item.getQItem()); - } - } - - void removeItem(TreeItem item) { - items.remove(item); - getQItem().removeChild(item.getQItem()); - } - - TreeItem getItem(QTreeWidgetItem qItem) { - for (TreeItem item : items) { - if (item.item == qItem) { - return item; - } - TreeItem ti = item.getItem(qItem); - if (ti != null) { - return ti; - } - } - return null; - } - - @Override - void releaseQWidget() { - super.releaseQWidget(); - item = null; - } - - QTreeWidgetItem getQItem() { - return item; - } - - QTreeWidget getQTreeWidget() { - return parent.getQTreeWidget(); - } - - static TreeItem checkNull(TreeItem item) { - if (item == null) { - SWT.error(SWT.ERROR_NULL_ARGUMENT); - } - return item; - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - void clear() { - for (int i = 0; i < parent.getColumnCount(); i++) { - item.setText(i, null); - item.setIcon(i, (QIcon) null); - item.setWhatsThis(i, null); - item.setFont(i, null); - } - text = ""; //$NON-NLS-1$ - image = null; - strings = null; - images = null; - if ((parent.style & SWT.CHECK) != 0) { - // - } - background = foreground = null; - font = null; - cellBackground = cellForeground = null; - cellFont = null; - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = false; - } - } - - /** - * Clears the item at the given zero-relative index in the receiver. The - * text, icon and other attributes of the item are set to the default value. - * If the tree was created with the SWT.VIRTUAL style, these - * attributes are requested again as needed. - * - * @param index - * the index of the item to clear - * @param all - * true if all child items of the indexed item - * should be cleared recursively, and false - * otherwise - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#VIRTUAL - * @see SWT#SetData - * - * @since 3.2 - */ - public void clear(int index, boolean all) { - checkWidget(); - validateItemIndex(index); - if (index == 0) { - clear(); - return; - } - TreeItem item = items.get(index); - item.clear(0, all); - } - - private void validateItemIndex(int index) { - if (index < 0 || index >= items.size()) { - error(SWT.ERROR_INVALID_RANGE); - } - } - - /** - * Clears all the items in the receiver. The text, icon and other attributes - * of the items are set to their default values. If the tree was created - * with the SWT.VIRTUAL style, these attributes are requested - * again as needed. - * - * @param all - * true if all child items should be cleared - * recursively, and false otherwise - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT#VIRTUAL - * @see SWT#SetData - * - * @since 3.2 - */ - public void clearAll(boolean all) { - checkWidget(); - clear(); - for (TreeItem item : items) { - item.clearAll(all); - } - } - - @Override - void destroyWidget() { - if (parentItem != null) { - parentItem.removeItem(this); - } else { - parent.removeItem(this); - } - super.destroyWidget(); - item = null; - } - - /** - * Returns the receiver's background color. - * - * @return the background color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - * - */ - public Color getBackground() { - checkWidget(); - if (background == null) { - return parent.getBackground(); - } - return background; - } - - /** - * Returns the background color at the given column index in the receiver. - * - * @param index - * the column index - * @return the background color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public Color getBackground(int index) { - checkWidget(); - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return getBackground(); - } - int pixel = cellBackground != null ? cellBackground[index] : -1; - return pixel == -1 ? getBackground() : Color.qt_new(display, pixel); - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent. - * - * @return the receiver's bounding rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Rectangle getBounds() { - checkWidget(); - return QtSWTConverter.convert(getQTreeWidget().visualItemRect(item)); - } - - /** - * Returns a rectangle describing the receiver's size and location relative - * to its parent at a column in the tree. - * - * @param index - * the index that specifies the column - * @return the receiver's bounding column rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public Rectangle getBounds(int index) { - checkWidget(); - int count = Math.max(1, item.columnCount()); - if (0 > index || index > count - 1) { - return new Rectangle(0, 0, 0, 0); - } - - return QtSWTConverter.convert(getQTreeWidget().visualItemRect(item.child(index))); - } - - /** - * Returns true if the receiver is checked, and false - * otherwise. When the parent does not have the - * CHECK style, return false. - *

- * - * @return the checked state - * - * @exception SWTException - *

  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public boolean getChecked() { - checkWidget(); - if ((parent.style & SWT.CHECK) == 0) { - return false; - } - return item.isSelected(); - } - - /** - * Returns true if the receiver is expanded, and false - * otherwise. - *

- * - * @return the expanded state - * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public boolean getExpanded() { - checkWidget(); - return item.isExpanded(); - } - - /** - * Returns the font that the receiver will use to paint textual information - * for this item. - * - * @return the receiver's font - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public Font getFont() { - checkWidget(); - return font != null ? font : parent.getFont(); - } - - /** - * Returns the font that the receiver will use to paint textual information - * for the specified cell in this item. - * - * @param index - * the column index - * @return the receiver's font - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public Font getFont(int index) { - checkWidget(); - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return getFont(); - } - if (cellFont == null || cellFont[index] == null) { - return getFont(); - } - return cellFont[index]; - } - - /** - * Returns the foreground color that the receiver will use to draw. - * - * @return the receiver's foreground color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - * - */ - public Color getForeground() { - checkWidget(); - if (foreground == null) { - return parent.getForeground(); - } - return foreground; - } - - /** - * - * Returns the foreground color at the given column index in the receiver. - * - * @param index - * the column index - * @return the foreground color - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public Color getForeground(int index) { - checkWidget(); - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return getForeground(); - } - int pixel = cellForeground != null ? cellForeground[index] : -1; - return pixel == -1 ? getForeground() : Color.qt_new(display, pixel); - } - - /** - * Returns true if the receiver is grayed, and false otherwise. - * When the parent does not have the CHECK style, return false. - *

- * - * @return the grayed state of the checkbox - * - * @exception SWTException - *

  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public boolean getGrayed() { - checkWidget(); - if ((parent.style & SWT.CHECK) == 0) { - return false; - } - return grayed; - } - - /** - * 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 - *
    - *
  • ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public TreeItem getItem(int index) { - checkWidget(); - if (index < 0 || index >= items.size()) { - error(SWT.ERROR_INVALID_RANGE); - } - return items.get(index); - } - - /** - * Returns the number of items contained in the receiver that are direct - * item children of the receiver. - * - * @return the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getItemCount() { - checkWidget(); - return items.size(); - } - - /** - * Returns a (possibly empty) array of TreeItems which are the - * direct item children of the receiver. - *

- * 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. - *

- * - * @return the receiver's items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TreeItem[] getItems() { - checkWidget(); - return items.toArray(new TreeItem[items.size()]); - } - - @Override - public Image getImage() { - checkWidget(); - return super.getImage(); - } - - /** - * Returns the image stored at the given column index in the receiver, or - * null if the image has not been set or if the column does not exist. - * - * @param index - * the column index - * @return the image stored at the given column index in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public Image getImage(int index) { - checkWidget(); - if (index == 0) { - return getImage(); - } - if (images != null) { - if (0 <= index && index < images.length) { - return images[index]; - } - } - return null; - } - - /** - * Returns a rectangle describing the size and location relative to its - * parent of an image at a column in the tree. - * - * @param index - * the index that specifies the column - * @return the receiver's bounding image rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public Rectangle getImageBounds(int index) { - checkWidget(); - //TODO image only ? - return QtSWTConverter.convert(getQTreeWidget().visualItemRect(getQItem().child(index))); - } - - /** - * Returns the receiver's parent, which must be a Tree. - * - * @return the receiver's parent - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public Tree getParent() { - checkWidget(); - return parent; - } - - /** - * Returns the receiver's parent item, which must be a TreeItem - * or null when the receiver is a root. - * - * @return the receiver's parent item - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public TreeItem getParentItem() { - checkWidget(); - return parentItem; - } - - /** - * Returns the text stored at the given column index in the receiver, or - * empty string if the text has not been set. - * - * @param index - * the column index - * @return the text stored at the given column index in the receiver - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public String getText(int index) { - checkWidget(); - if (index == 0) { - return getText(); - } - if (strings != null) { - if (0 <= index && index < strings.length) { - String string = strings[index]; - return string != null ? string : ""; //$NON-NLS-1$ - } - } - return ""; //$NON-NLS-1$ - } - - /** - * Returns a rectangle describing the size and location relative to its - * parent of the text at a column in the tree. - * - * @param index - * the index that specifies the column - * @return the receiver's bounding text rectangle - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.3 - */ - public Rectangle getTextBounds(int index) { - checkWidget(); - //TODO text only ? - return QtSWTConverter.convert(getQTreeWidget().visualItemRect(getQItem().child(index))); - } - - /** - * 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 - *
    - *
  • ERROR_NULL_ARGUMENT - if the item is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the item has been disposed - *
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public int indexOf(TreeItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (item.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - return items.indexOf(item); - } - - @Override - void releaseChildren(boolean destroy) { - if (destroy) { - for (int i = items.size() - 1; i > -1; i--) { - items.get(i).dispose(); - } - items.clear(); - } - super.releaseChildren(destroy); - } - - @Override - void releaseWidget() { - super.releaseWidget(); - strings = null; - images = null; - cellBackground = cellForeground = null; - cellFont = null; - display.removeControl(item); - } - - /** - * Removes all of the items from the receiver. - *

- * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void removeAll() { - checkWidget(); - QTreeWidgetItem qItem = getQItem(); - for (TreeItem item : items) { - qItem.removeChild(item.getQItem()); - } - items.clear(); - } - - /** - * Sets the receiver's background color to the color specified by the - * argument, or to the default system color for the item if the argument is - * null. - * - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - * - */ - public void setBackground(Color color) { - checkWidget(); - if (color != null && color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - Color pixel = null; - if (color != null) { - parent.customDraw = true; - pixel = color; - } - if (background == pixel) { - return; - } - background = pixel; - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - } - - /** - * Sets the background color at the given column index in the receiver to - * the color specified by the argument, or to the default system color for - * the item if the argument is null. - * - * @param index - * the column index - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - * - */ - public void setBackground(int index, Color color) { - checkWidget(); - if (color != null && color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - int pixel = -1; - if (color != null) { - parent.customDraw = true; - pixel = color.getPixel(); - } - if (cellBackground == null) { - cellBackground = new int[count]; - for (int i = 0; i < count; i++) { - cellBackground[i] = -1; - } - } - if (cellBackground[index] == pixel) { - return; - } - cellBackground[index] = pixel; - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - } - - /** - * Sets the checked state of the receiver. - *

- * - * @param checked - * the new checked state - * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public void setChecked(boolean checked) { - checkWidget(); - if ((parent.style & SWT.CHECK) == 0) { - return; - } - getQItem().setSelected(checked); - } - - /** - * Sets the expanded state of the receiver. - *

- * - * @param expanded - * the new expanded state - * - * @exception SWTException - *

    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • ERROR_THREAD_INVALID_ACCESS - if not - * called from the thread that created the receiver
  • - *
- */ - public void setExpanded(boolean expanded) { - checkWidget(); - getQItem().setExpanded(expanded); - } - - /** - * Sets the font that the receiver will use to paint textual information for - * this item to the font specified by the argument, or to the default font - * for that kind of control if the argument is null. - * - * @param font - * the new font (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.0 - */ - public void setFont(Font font) { - checkWidget(); - if (font != null && font.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - Font oldFont = this.font; - if (oldFont == font) { - return; - } - this.font = font; - if (oldFont != null && oldFont.equals(font)) { - return; - } - if (font != null) { - parent.customDraw = true; - } - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - item.setFont(0, font.getQFont()); - } - - /** - * Sets the font that the receiver will use to paint textual information for - * the specified cell in this item to the font specified by the argument, or - * to the default font for that kind of control if the argument is null. - * - * @param index - * the column index - * @param font - * the new font (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setFont(int index, Font font) { - checkWidget(); - if (font != null && font.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - if (cellFont == null) { - if (font == null) { - return; - } - cellFont = new Font[count]; - } - Font oldFont = cellFont[index]; - if (oldFont == font) { - return; - } - cellFont[index] = font; - if (oldFont != null && oldFont.equals(font)) { - return; - } - if (font != null) { - parent.customDraw = true; - } - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - if (font == null) { - item.setFont(index, null); - } else { - item.setFont(index, font.getQFont()); - } - } - - /** - * Sets the receiver's foreground color to the color specified by the - * argument, or to the default system color for the item if the argument is - * null. - * - * @param color - * the new color (or null) - * - * @since 2.0 - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 2.0 - * - */ - public void setForeground(Color color) { - checkWidget(); - if (color != null && color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - this.foreground = color; - item.setForeground(0, new QBrush(color.getColor())); - } - - /** - * Sets the foreground color at the given column index in the receiver to - * the color specified by the argument, or to the default system color for - * the item if the argument is null. - * - * @param index - * the column index - * @param color - * the new color (or null) - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the argument has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - * - */ - public void setForeground(int index, Color color) { - checkWidget(); - if (color != null && color.isDisposed()) { - SWT.error(SWT.ERROR_INVALID_ARGUMENT); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - int pixel = -1; - if (color != null) { - parent.customDraw = true; - pixel = color.getPixel(); - } - if (cellForeground == null) { - cellForeground = new int[count]; - for (int i = 0; i < count; i++) { - cellForeground[i] = -1; - } - } - if (cellForeground[index] == pixel) { - return; - } - cellForeground[index] = pixel; - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - } - - /** - * Sets the grayed state of the checkbox for this item. This state change - * only applies if the Tree was created with the SWT.CHECK style. - * - * @param grayed - * the new grayed state of the checkbox - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public void setGrayed(boolean grayed) { - checkWidget(); - if ((parent.style & SWT.CHECK) == 0) { - return; - } - this.grayed = grayed; - } - - /** - * Sets the image for multiple columns in the tree. - * - * @param images - * the array of new images - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the array of images is null
  • - *
  • ERROR_INVALID_ARGUMENT - if one of the images has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setImage(Image[] images) { - checkWidget(); - if (images == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - for (int i = 0; i < images.length; i++) { - setImage(i, images[i]); - } - } - - /** - * Sets the receiver's image at a column. - * - * @param index - * the column index - * @param image - * the new image - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_INVALID_ARGUMENT - if the image has been - * disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setImage(int index, Image image) { - checkWidget(); - if (image != null && image.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - if (index == 0) { - if (image != null && image.isIcon()) { - if (image.equals(this.image)) { - return; - } - } - super.setImage(image); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - if (images == null && index != 0) { - images = new Image[count]; - images[0] = image; - } - if (images != null) { - if (image != null && image.isIcon()) { - if (image.equals(images[index])) { - return; - } - } - images[index] = image; - } - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - item.setIcon(index, image != null ? image.getQIcon() : null); - } - - @Override - public void setImage(Image image) { - checkWidget(); - setImage(0, image); - } - - /** - * Sets the number of child items contained in the receiver. - * - * @param count - * the number of items - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.2 - */ - public void setItemCount(int count) { - checkWidget(); - count = Math.max(0, count); - int itemCount = items.size(); - if (count == itemCount) { - return; - } - - if (count < itemCount) { - for (int i = itemCount - 1; i >= count; i--) { - removeItem(items.get(i)); - } - return; - } - // if (isVirtual) { - // //TODO - // } else { - for (int i = itemCount; i < count; i++) { - new TreeItem(this, SWT.NONE, i); - } - } - - /** - * Sets the text for multiple columns in the tree. - * - * @param strings - * the array of new strings - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setText(String[] strings) { - checkWidget(); - if (strings == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - for (int i = 0; i < strings.length; i++) { - String string = strings[i]; - if (string != null) { - setText(i, string); - } - } - } - - /** - * Sets the receiver's text at a column - * - * @param index - * the column index - * @param string - * the new text - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the text is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @since 3.1 - */ - public void setText(int index, String string) { - checkWidget(); - if (string == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (index == 0) { - if (string.equals(text)) { - return; - } - super.setText(string); - } - int count = Math.max(1, parent.getColumnCount()); - if (0 > index || index > count - 1) { - return; - } - if (strings == null && index != 0) { - strings = new String[count]; - strings[0] = text; - } - if (strings != null) { - if (string.equals(strings[index])) { - return; - } - strings[index] = string; - } - if ((parent.style & SWT.VIRTUAL) != 0) { - cached = true; - } - getQItem().setText(index, string); - } - - @Override - public void setText(String string) { - checkWidget(); - setText(0, string); - } - -} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java deleted file mode 100644 index cf693513e6..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java +++ /dev/null @@ -1,1358 +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.HashMap; -import java.util.Map; - -import com.trolltech.qt.core.QObject; -import com.trolltech.qt.gui.QContextMenuEvent; -import com.trolltech.qt.gui.QKeyEvent; -import com.trolltech.qt.gui.QMouseEvent; -import com.trolltech.qt.gui.QMoveEvent; -import com.trolltech.qt.gui.QPaintEvent; -import com.trolltech.qt.gui.QResizeEvent; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QWindowStateChangeEvent; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.custom.CTabFolder; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.GCData; -import org.eclipse.swt.internal.SWTEventListener; - -/** - * This class is the abstract superclass of all user interface objects. Widgets - * are created, disposed and issue notification to listeners when events occur - * which affect them. - *
- *
Styles:
- *
(none)
- *
Events:
- *
Dispose
- *
- *

- * IMPORTANT: This class is intended to be subclassed only within the - * SWT implementation. However, it has not been marked final to allow those - * outside of the SWT development team to implement patched versions of the - * class in order to get around specific limitations in advance of when those - * limitations can be addressed by the team. Any class built using subclassing - * to access the internals of this class will likely fail to compile or run - * between releases and may be strongly platform specific. Subclassing should - * not be attempted without an intimate and detailed understanding of the - * workings of the hierarchy. No support is provided for user-written classes - * which are implemented as subclasses of this class. - *

- * - * @see #checkSubclass - * @see Sample code and further - * information - */ - -public abstract class Widget { - public static final String QT_SWT_CONTROL_PROPERTY = "__SWT_CONTROL";//$NON-NLS-1$ - int style, state; - Display display; - EventTable eventTable; - private Map data; - private Object mainData; - - /* Global state flags */ - static final int DISPOSED = 1 << 0; - static final int CANVAS = 1 << 1; - static final int KEYED_DATA = 1 << 2; - static final int HIDDEN = 1 << 4; - - /* A layout was requested on this widget */ - static final int LAYOUT_NEEDED = 1 << 5; - - /* The preferred size of a child has changed */ - static final int LAYOUT_CHANGED = 1 << 6; - - /* A layout was requested in this widget hierarchy */ - static final int LAYOUT_CHILD = 1 << 7; - - /* Background flags */ - static final int THEME_BACKGROUND = 1 << 8; - static final int DRAW_BACKGROUND = 1 << 9; - static final int PARENT_BACKGROUND = 1 << 10; - - /* Dispose and release flags */ - static final int RELEASED = 1 << 11; - static final int DISPOSE_SENT = 1 << 12; - - /* More global widget state flags */ - static final int TRACK_MOUSE = 1 << 13; - static final int FOREIGN_HANDLE = 1 << 14; - static final int DRAG_DETECT = 1 << 15; - - /* Move and resize state flags */ - static final int MOVE_OCCURRED = 1 << 16; - static final int MOVE_DEFERRED = 1 << 17; - static final int RESIZE_OCCURRED = 1 << 18; - static final int RESIZE_DEFERRED = 1 << 19; - - /* Ignore WM_CHANGEUISTATE */ - static final int IGNORE_WM_CHANGEUISTATE = 1 << 20; - - /* Default size for widgets */ - static final int DEFAULT_WIDTH = 64; - static final int DEFAULT_HEIGHT = 64; - - /* Check and initialize the Common Controls DLL */ - static final int MAJOR = 5, MINOR = 80; - private QWidget qWidget; - - /** - * Prevents uninitialized instances from being created outside the package. - */ - Widget() { - } - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - *

- * The style value is either one of the style constants defined in class - * SWT which is applicable to instances of this class, or must - * be built by bitwise OR'ing together (that is, using the - * int "|" operator) two or more of those SWT - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - *

- * - * @param parent - * a widget which will be the parent of the new instance (cannot - * be null) - * @param style - * the style of widget to construct - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the parent is disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- * - * @see SWT - * @see #checkSubclass - * @see #getStyle - */ - public Widget(Widget parent, int style) { - checkSubclass(); - checkParent(parent); - this.style = style; - display = parent.display; - } - - void setQWidget(QWidget qWidget) { - this.qWidget = qWidget; - } - - public QWidget getQWidget() { - return qWidget; - } - - protected QWidget getQMasterWidget() { - return getQWidget(); - } - - protected void setStyleSheet(String style) { - getQMasterWidget().setStyleSheet(style); - updateLayout(); - } - - protected void updateStyleSheet() { - if (null != getQMasterWidget().style()) { - getQMasterWidget().setStyle(getQMasterWidget().style()); - updateLayout(); - } - } - - protected void updateLayout() { - // nothing by default - } - - void _addListener(int eventType, Listener listener) { - if (eventTable == null) { - eventTable = new EventTable(); - } - if (eventType == SWT.DragDetect && this instanceof CTabFolder) { - System.out.println("adding dnd drag listener"); - } - eventTable.hook(eventType, listener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when an event of the given type occurs. When the event does occur in the - * widget, the listener is notified by sending it the - * handleEvent() message. The event type is one of the event - * constants defined in class SWT. - * - * @param eventType - * the type of event to listen for - * @param listener - * the listener which should be notified when the event occurs - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Listener - * @see SWT - * @see #getListeners(int) - * @see #removeListener(int, Listener) - * @see #notifyListeners - */ - public void addListener(int eventType, Listener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - _addListener(eventType, listener); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the widget is disposed. When the widget is disposed, the listener is - * notified by sending it the widgetDisposed() message. - * - * @param listener - * the listener which should be notified when the receiver is - * disposed - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see DisposeListener - * @see #removeDisposeListener - */ - public void addDisposeListener(DisposeListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Dispose, typedListener); - } - - /** - * Returns a style with exactly one style bit set out of the specified set - * of exclusive style bits. All other possible bits are cleared when the - * first matching bit is found. Bits that are not part of the possible set - * are untouched. - * - * @param style - * the original style bits - * @param int0 - * the 0th possible style bit - * @param int1 - * the 1st possible style bit - * @param int2 - * the 2nd possible style bit - * @param int3 - * the 3rd possible style bit - * @param int4 - * the 4th possible style bit - * @param int5 - * the 5th possible style bit - * - * @return the new style bits - * - * refactored: was checkBits - */ - static int checkBits(int style, int int0, int int1, int int2, int int3, int int4, int int5) { - int mask = int0 | int1 | int2 | int3 | int4 | int5; - if ((style & mask) == 0) { - style |= int0; - } - if ((style & int0) != 0) { - style = style & ~mask | int0; - } - if ((style & int1) != 0) { - style = style & ~mask | int1; - } - if ((style & int2) != 0) { - style = style & ~mask | int2; - } - if ((style & int3) != 0) { - style = style & ~mask | int3; - } - if ((style & int4) != 0) { - style = style & ~mask | int4; - } - if ((style & int5) != 0) { - style = style & ~mask | int5; - } - return style; - } - - /* refactored: was checkOrientation */ - void checkAndUpdateOrientation(Widget parent) { - style &= ~SWT.MIRRORED; - if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) { - if (parent != null) { - if ((parent.style & SWT.LEFT_TO_RIGHT) != 0) { - style |= SWT.LEFT_TO_RIGHT; - } - if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) { - style |= SWT.RIGHT_TO_LEFT; - } - } - } - style = checkBits(style, SWT.LEFT_TO_RIGHT, SWT.RIGHT_TO_LEFT, 0, 0, 0, 0); - } - - void checkOpened() { - /* Do nothing */ - } - - /** - * Throws an exception if the specified widget can not be used as a parent - * for the receiver. - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • - *
  • ERROR_INVALID_ARGUMENT - if the parent is disposed
  • - *
- * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent
  • - *
- */ - void checkParent(Widget parent) { - if (parent == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (parent.isDisposed()) { - error(SWT.ERROR_INVALID_ARGUMENT); - } - parent.checkWidget(); - parent.checkOpened(); - } - - /** - * Checks that this class can be subclassed. - *

- * The SWT class library is intended to be subclassed only at specific, - * controlled points (most notably, Composite and - * Canvas when implementing new widgets). This method enforces - * this rule unless it is overridden. - *

- *

- * IMPORTANT: By providing an implementation of this method that - * allows a subclass of a class which does not normally allow subclassing to - * be created, the implementer agrees to be fully responsible for the fact - * that any such subclass will likely fail between SWT releases and will be - * strongly platform specific. No support is provided for user-written - * classes which are implemented in this fashion. - *

- *

- * The ability to subclass outside of the allowed SWT classes is intended - * purely to enable those not on the SWT development team to implement - * patches in order to get around specific limitations in advance of when - * those limitations can be addressed by the team. Subclassing should not be - * attempted without an intimate and detailed understanding of the - * hierarchy. - *

- * - * @exception SWTException - *
    - *
  • ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass
  • - *
- */ - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - /** - * Throws an SWTException if the receiver can not be accessed - * by the caller. This may include both checks on the state of the receiver - * and more generally on the entire execution context. This method - * should be called by widget implementors to enforce the standard - * SWT invariants. - *

- * Currently, it is an error to invoke any method (other than - * isDisposed()) on a widget that has had its - * dispose() method called. It is also an error to call widget - * methods from any thread that is different from the thread that created - * the widget. - *

- *

- * In future releases of SWT, there may be more or fewer error checks and - * exceptions may be thrown for different reasons. - *

- * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - protected void checkWidget() { - Display display = this.display; - if (display == null) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - if (display.thread != Thread.currentThread()) { - error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - if ((state & DISPOSED) != 0) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - } - - /** - * Destroys the widget in the operating system and releases the widget's - * handle. If the widget does not have a handle, this method may hide the - * widget, mark the widget as destroyed or do nothing, depending on the - * widget. - *

- * When a widget is destroyed in the operating system, its descendants are - * also destroyed by the operating system. This means that it is only - * necessary to call destroyWidget on the root of the widget - * tree. - *

- *

- * This method is called after releaseWidget(). - *

- *

- * See also releaseChild(), releaseWidget() and - * releaseHandle(). - *

- * - * @see #dispose - */ - void destroyWidget() { - releaseQWidget(); - } - - /** - * Disposes of the operating system resources associated with the receiver - * and all its descendants. After this method has been invoked, the receiver - * and all descendants will answer true when sent the message - * isDisposed(). Any internal connections between the widgets - * in the tree will have been removed to facilitate garbage collection. - *

- * NOTE: This method is not called recursively on the descendants of the - * receiver. This means that, widget implementers can not detect when a - * widget is being disposed of by re-implementing this method, but should - * instead listen for the Dispose event. - *

- * - * @exception SWTException - *
    - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #addDisposeListener - * @see #removeDisposeListener - * @see #checkWidget - */ - public void dispose() { - /* - * Note: It is valid to attempt to dispose a widget more than once. If - * this happens, fail silently. - */ - if (isDisposed()) { - return; - } - - if (!isValidThread()) { - error(SWT.ERROR_THREAD_INVALID_ACCESS); - } - release(true); - } - - /** - * Does whatever widget specific cleanup is required, and then uses the code - * in SWTError.error to handle the error. - * - * @param code - * the descriptive error code - * - * @see SWT#error(int) - */ - void error(int code) { - SWT.error(code); - } - - boolean filters(int eventType) { - return display.filters(eventType); - } - - char[] fixMnemonic(String string) { - return fixMnemonic(string, false); - } - - char[] fixMnemonic(String string, boolean spaces) { - char[] buffer = new char[string.length() + 1]; - string.getChars(0, string.length(), buffer, 0); - int i = 0, j = 0; - while (i < buffer.length) { - if (buffer[i] == '&') { - if (i + 1 < buffer.length && buffer[i + 1] == '&') { - if (spaces) { - buffer[j] = ' '; - } - j++; - i++; - } - i++; - } else { - buffer[j++] = buffer[i++]; - } - } - while (j < buffer.length) { - buffer[j++] = 0; - } - return buffer; - } - - /** - * Returns the Display that is associated with the receiver. - *

- * A widget's display is either provided when it is created (for example, - * top level Shells) or is the same as its parent's display. - *

- * - * @return the receiver's display - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
- */ - public Display getDisplay() { - Display display = this.display; - if (display == null) { - error(SWT.ERROR_WIDGET_DISPOSED); - } - return display; - } - - /** - * Returns an array of listeners who will be notified when an event of the - * given type occurs. The event type is one of the event constants defined - * in class SWT. - * - * @param eventType - * the type of event to listen for - * @return an array of listeners that will be notified when the event occurs - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Listener - * @see SWT - * @see #addListener(int, Listener) - * @see #removeListener(int, Listener) - * @see #notifyListeners - * - * @since 3.4 - */ - public Listener[] getListeners(int eventType) { - checkWidget(); - if (eventTable == null) { - return new Listener[0]; - } - return eventTable.getListeners(eventType); - } - - Menu getMenu() { - return null; - } - - /** - * Returns the name of the widget. This is the name of the class without the - * package name. - * - * @return the name of the widget - */ - String getName() { - String string = getClass().getName(); - int index = string.lastIndexOf('.'); - if (index == -1) { - return string; - } - return string.substring(index + 1, string.length()); - } - - /* - * Returns a short printable representation for the contents of a widget. - * For example, a button may answer the label text. This is used by - * toString to provide a more meaningful description of the - * widget. - * - * @return the contents string for the widget - * - * @see #toString - */ - String getNameText() { - return ""; //$NON-NLS-1$ - } - - /** - * Returns the receiver's style information. - *

- * Note that the value which is returned by this method may - * not match the value which was provided to the constructor when the - * receiver was created. This can occur when the underlying operating system - * does not support a particular combination of requested styles. For - * example, if the platform widget used to implement a particular SWT widget - * always has scroll bars, the result of calling this method would always - * have the SWT.H_SCROLL and SWT.V_SCROLL bits - * set. - *

- * - * @return the style bits - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- */ - public int getStyle() { - checkWidget(); - return style; - } - - /* - * Returns true if the specified eventType is hooked, and - * false otherwise. Implementations of SWT can avoid creating - * objects and sending events when an event happens in the operating system - * but there are no listeners hooked for the event. - * - * @param eventType the event to be checked - * - * @return true when the eventType is hooked and - * false otherwise - * - * @see #isListening - */ - boolean hooks(int eventType) { - if (eventTable == null) { - return false; - } - return eventTable.hooks(eventType); - } - - /** - * Returns true if the widget has been disposed, and - * false otherwise. - *

- * This method gets the dispose state for the widget. When a widget has been - * disposed, it is an error to invoke any other method using the widget. - *

- * - * @return true when the widget is disposed and - * false otherwise - */ - public boolean isDisposed() { - return (state & DISPOSED) != 0; - } - - /** - * Returns true if there are any listeners for the specified - * event type associated with the receiver, and false - * otherwise. The event type is one of the event constants defined in class - * SWT. - * - * @param eventType - * the type of event - * @return true if the event is hooked - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT - */ - public boolean isListening(int eventType) { - checkWidget(); - return hooks(eventType); - } - - /* - * Returns true when subclassing is allowed and - * false otherwise - * - * @return true when subclassing is allowed and - * false otherwise - */ - boolean isValidSubclass() { - return Display.isValidClass(getClass()); - } - - /* - * Returns true when the current thread is the thread that - * created the widget and false otherwise. - * - * @return true when the current thread is the thread that - * created the widget and false otherwise - */ - boolean isValidThread() { - return getDisplay().isValidThread(); - } - - GC new_GC(GCData data) { - return null; - } - - /** - * Notifies all of the receiver's listeners for events of the given type - * that one such event has occurred by invoking their - * handleEvent() method. The event type is one of the event - * constants defined in class SWT. - * - * @param eventType - * the type of event which has occurred - * @param event - * the event data - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see SWT - * @see #addListener - * @see #getListeners(int) - * @see #removeListener(int, Listener) - */ - public void notifyListeners(int eventType, Event event) { - checkWidget(); - if (event == null) { - event = new Event(); - } - sendEvent(eventType, event); - } - - void postEvent(int eventType) { - sendEvent(eventType, null, false); - } - - void postEvent(int eventType, Event event) { - sendEvent(eventType, event, false); - } - - /* - * Releases the widget hierarchy and optionally destroys the receiver.

- * Typically, a widget with children will broadcast this message to all - * children so that they too can release their resources. The - * releaseHandle method is used as part of this broadcast to - * zero the handle fields of the children without calling - * destroyWidget. In this scenario, the children are actually - * destroyed later, when the operating system destroys the widget tree.

- * - * @param destroy indicates that the receiver should be destroyed - * - * @see #dispose - * - * @see #releaseParent - * - * @see #releaseWidget - */ - void release(boolean destroy) { - if ((state & DISPOSE_SENT) == 0) { - state |= DISPOSE_SENT; - sendEvent(SWT.Dispose); - } - if ((state & DISPOSED) == 0) { - releaseChildren(destroy); - } - if ((state & RELEASED) == 0) { - state |= RELEASED; - if (destroy) { - releaseParent(); - releaseWidget(); - destroyWidget(); - } else { - releaseWidget(); - releaseQWidget(); - } - } - } - - void releaseChildren(boolean destroy) { - } - - /* - * Releases the widget's handle by zero'ing it out. Does not destroy or - * release any operating system resources.

This method is called after - * releaseWidget or from destroyWidget when a - * widget is being destroyed to ensure that the widget is marked as - * destroyed in case the act of destroying the widget in the operating - * system causes application code to run in callback that could access the - * widget.

- * - * @see #dispose - * - * @see #releaseChildren - * - * @see #releaseParent - * - * @see #releaseWidget - */ - void releaseQWidget() { - state |= DISPOSED; - display = null; - qWidget = null; - } - - /* - * Releases the receiver, a child in a widget hierarchy, from its parent. - *

When a widget is destroyed, it may be necessary to remove it from an - * internal data structure of the parent. When a widget has no handle, it - * may also be necessary for the parent to hide the widget or otherwise - * indicate that the widget has been disposed. For example, disposing a menu - * bar requires that the menu bar first be released from the shell when the - * menu bar is active.

- * - * @see #dispose - * - * @see #releaseChildren - * - * @see #releaseWidget - * - * @see #releaseHandle - */ - void releaseParent() { - } - - /* - * Releases any internal resources back to the operating system and clears - * all fields except the widget handle.

When a widget is destroyed, - * resources that were acquired on behalf of the programmer need to be - * returned to the operating system. For example, if the widget made a copy - * of an icon, supplied by the programmer, this copy would be freed in - * releaseWidget. Also, to assist the garbage collector and - * minimize the amount of memory that is not reclaimed when the programmer - * keeps a reference to a disposed widget, all fields except the handle are - * zero'd. The handle is needed by destroyWidget.

- * - * @see #dispose - * - * @see #releaseChildren - * - * @see #releaseHandle - * - * @see #releaseParent - */ - void releaseWidget() { - eventTable = null; - data = null; - mainData = null; - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when an event of the given type occurs. The event type is one of - * the event constants defined in class SWT. - * - * @param eventType - * the type of event to listen for - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Listener - * @see SWT - * @see #addListener - * @see #getListeners(int) - * @see #notifyListeners - */ - public void removeListener(int eventType, Listener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(eventType, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when an event of the given type occurs. - *

- * IMPORTANT: This method is not part of the SWT public API. - * It is marked public only so that it can be shared within the packages - * provided by SWT. It should never be referenced from application code. - *

- * - * @param eventType - * the type of event to listen for - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see Listener - * @see #addListener - */ - protected void removeListener(int eventType, SWTEventListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(eventType, listener); - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the widget is disposed. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the listener is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see DisposeListener - * @see #addDisposeListener - */ - public void removeDisposeListener(DisposeListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Dispose, listener); - } - - boolean sendDragEvent(int button, int x, int y) { - Event event = new Event(); - event.button = button; - event.x = x; - event.y = y; - //setInputState(event, SWT.DragDetect); - sendEvent(SWT.DragDetect, event); - if (isDisposed()) { - return false; - } - return event.doit; - } - - void sendEvent(Event event) { - event.display = display; - if (!display.filterEvent(event)) { - if (eventTable != null) { - eventTable.sendEvent(event); - } - } - } - - void sendEvent(int eventType) { - sendEvent(eventType, null, true); - } - - void sendEvent(int eventType, Event event) { - sendEvent(eventType, event, true); - } - - void sendEvent(int eventType, Event event, boolean send) { - if (eventTable == null && !display.filters(eventType)) { - return; - } - if (event == null) { - event = new Event(); - } - event.type = eventType; - event.display = display; - event.widget = this; - if (event.time == 0) { - event.time = display.getLastEventTime(); - } - if (send) { - sendEvent(event); - } else { - display.postEvent(event); - } - } - - /** - * Returns the application defined widget data associated with the receiver, - * or null if it has not been set. The widget data is a single, - * unnamed field that is stored with every widget. - *

- * Applications may put arbitrary objects in this field. If the object - * stored in the widget data needs to be notified when the widget is - * disposed of, it is the application's responsibility to hook the Dispose - * event on the widget and do so. - *

- * - * @return the widget data - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - when the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - when called from the - * wrong thread
  • - *
- * - * @see #setData(Object) - */ - public Object getData() { - checkWidget(); - return mainData; - } - - /** - * Returns the application defined property of the receiver with the - * specified name, or null if it has not been set. - *

- * Applications may have associated arbitrary objects with the receiver in - * this fashion. If the objects stored in the properties need to be notified - * when the widget is disposed of, it is the application's responsibility to - * hook the Dispose event on the widget and do so. - *

- * - * @param key - * the name of the property - * @return the value of the property or null if it has not been set - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the key is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #setData(String, Object) - */ - public Object getData(String key) { - checkWidget(); - if (key == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - - Object value = getDataMap().get(key); - if (value == null) { - if (getQMasterWidget() != null) { - value = getQMasterWidget().property(key); - } - } - return value; - } - - private Map getDataMap() { - if (data == null) { - data = new HashMap(4); - } - return data; - } - - /** - * Sets the application defined widget data associated with the receiver to - * be the argument. The widget - * data is a single, unnamed field that is stored with every widget. - *

- * Applications may put arbitrary objects in this field. If the object - * stored in the widget data needs to be notified when the widget is - * disposed of, it is the application's responsibility to hook the Dispose - * event on the widget and do so. - *

- * - * @param data - * the widget data - * - * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - when the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - when called from the - * wrong thread
  • - *
- * - * @see #getData() - */ - public void setData(Object data) { - checkWidget(); - this.mainData = data; - } - - /** - * Sets the application defined property of the receiver with the specified - * name to the given value. - *

- * Applications may associate arbitrary objects with the receiver in this - * fashion. If the objects stored in the properties need to be notified when - * the widget is disposed of, it is the application's responsibility to hook - * the Dispose event on the widget and do so. - *

- * - * @param key - * the name of the property - * @param value - * the new value for the property - * - * @exception IllegalArgumentException - *
    - *
  • ERROR_NULL_ARGUMENT - if the key is null
  • - *
- * @exception SWTException - *
    - *
  • ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed
  • - *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver
  • - *
- * - * @see #getData(String) - */ - public void setData(String key, Object value) { - checkWidget(); - if (key == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if ("stylesheet".equals(key)) { //$NON-NLS-1$ - setStyleSheet((String) value); - return; - } - - if (value == null) { - if (getDataMap().containsKey(key)) { - getDataMap().remove(key); - } else { - if (getQMasterWidget() != null) { - getQMasterWidget().setProperty(key, null); - updateStyleSheet(); // we have to update the style, cause the property can be referenced in the style - } - } - } else { - // we store Strings/Booleans adin the Qt Control, everything - // else in the local map - if (getQMasterWidget() != null && (value instanceof String || value instanceof Boolean)) { - getQMasterWidget().setProperty(key, value); - updateStyleSheet(); // we have to update the style, cause the property can be referenced in the style - } else { - getDataMap().put(key, value); - } - } - } - - boolean showMenu(int x, int y) { - Event event = new Event(); - event.x = x; - event.y = y; - sendEvent(SWT.MenuDetect, event); - if (!event.doit) { - return true; - } - Menu menu = getMenu(); - if (menu != null && !menu.isDisposed()) { - if (x != event.x || y != event.y) { - menu.setLocation(event.x, event.y); - } - menu.setVisible(true); - return true; - } - return false; - } - - /** - * Returns a string containing a concise, human-readable description of the - * receiver. - * - * @return a string representation of the receiver - */ - @Override - public String toString() { - return getName() + " {" + getDescription() + "}"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - private String getDescription() { - if (isDisposed()) { - return "*Disposed*"; //$NON-NLS-1$ - } - if (!isValidThread()) { - return "*Wrong Thread*"; //$NON-NLS-1$ - } - return getNameText(); - } - - /* Qt Events */ - public boolean qtCloseEvent() { - return false; - } - - public boolean qtResizeEvent(QObject source, QResizeEvent resizeEvent) { - return false; - } - - public boolean qtMoveEvent(QObject source, QMoveEvent moveEvent) { - return false; - } - - public boolean qtPaintEvent(QObject source, QPaintEvent paintEvent) { - return false; - } - - public boolean qtKeyPressEvent(QObject source, QKeyEvent qEvent) { - return false; - } - - public boolean qtKeyReleaseEvent(QObject source, QKeyEvent qEvent) { - return false; - } - - public boolean qtMouseMoveEvent(QObject source, QMouseEvent mouseEvent) { - return false; - } - - public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) { - return false; - } - - public boolean qtMouseButtonReleaseEvent(QObject source, QMouseEvent mouseEvent) { - return false; - } - - public boolean qtMouseButtonDblClickEvent(QObject source, QMouseEvent mouseEvent) { - return false; - } - - public boolean qtMouseEnterEvent(Object source) { - return false; - } - - public boolean qtMouseLeaveEvent(Object source) { - return false; - } - - public boolean qtContextMenuEvent(Object source, QContextMenuEvent event) { - return false; - } - - public boolean qtShowEvent(QObject source) { - return false; - } - - public boolean qtHideEvent(QObject source) { - return false; - } - - public void qtFocusInEvent(QObject source) { - // nothing - } - - public void qtFocusOutEvent(QObject source) { - // nothing - } - - public boolean qtWindowActivateEvent(QObject source) { - return false; - } - - public boolean qtWindowDeactivateEvent(QObject obj) { - return false; - } - - public boolean qtWindowStateChangeEvent(QObject obj, QWindowStateChangeEvent event) { - return false; - } - -} -- cgit