]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.eclipse.swt.win32.win32.x86_64/src/org/eclipse/swt/widgets/Tray.java
Work around SWT 4.13 - 4.18 Win32 DnD bug 567422
[simantics/platform.git] / bundles / org.eclipse.swt.win32.win32.x86_64 / src / org / eclipse / swt / widgets / Tray.java
diff --git a/bundles/org.eclipse.swt.win32.win32.x86_64/src/org/eclipse/swt/widgets/Tray.java b/bundles/org.eclipse.swt.win32.win32.x86_64/src/org/eclipse/swt/widgets/Tray.java
new file mode 100644 (file)
index 0000000..a0f34b4
--- /dev/null
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class represent the system tray that is part
+ * of the task bar status area on some operating systems.
+ *
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see Display#getSystemTray
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tray">Tray, TrayItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Tray extends Widget {
+       int itemCount;
+       TrayItem [] items = new TrayItem [4];
+
+Tray (Display display, int style) {
+       this.display = display;
+       reskinWidget ();
+}
+
+void createItem (TrayItem item, int index) {
+       if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+       if (itemCount == items.length) {
+               TrayItem [] newItems = new TrayItem [items.length + 4];
+               System.arraycopy (items, 0, newItems, 0, items.length);
+               items = newItems;
+       }
+       System.arraycopy (items, index, items, index + 1, itemCount++ - index);
+       items [index] = item;
+}
+
+void destroyItem (TrayItem item) {
+       int index = 0;
+       while (index < itemCount) {
+               if (items [index] == item) break;
+               index++;
+       }
+       if (index == itemCount) return;
+       System.arraycopy (items, index + 1, items, index, --itemCount - index);
+       items [itemCount] = null;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TrayItem getItem (int index) {
+       checkWidget ();
+       if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+       return items [index];
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+       checkWidget ();
+       return itemCount;
+}
+
+/**
+ * Returns an array of <code>TrayItem</code>s which are the items
+ * in the receiver.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver.
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TrayItem [] getItems () {
+       checkWidget ();
+       TrayItem [] result = new TrayItem [itemCount];
+       System.arraycopy (items, 0, result, 0, result.length);
+       return result;
+}
+
+@Override
+void releaseChildren (boolean destroy) {
+       if (items != null) {
+               for (int i=0; i<items.length; i++) {
+                       TrayItem item = items [i];
+                       if (item != null && !item.isDisposed ()) {
+                               item.release (false);
+                       }
+               }
+               items = null;
+       }
+       super.releaseChildren (destroy);
+}
+
+@Override
+void releaseParent () {
+       super.releaseParent ();
+       if (display.tray == this) display.tray = null;
+}
+
+@Override
+void reskinChildren (int flags) {
+       if (items != null) {
+               for (int i=0; i<items.length; i++) {
+                       TrayItem item = items [i];
+                       if (item != null) item.reskin (flags);
+               }
+       }
+       super.reskinChildren (flags);
+}
+
+}