All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.swt.widgets.TaskItem Maven / Gradle / Ivy

Go to download

The osx x86_64 swt jar as available in the Eclipse 4.6 (Neon) release for OSX. It is suitable for use with jface and other dependencies available from maven central in the org.eclipse.scout.sdk.deps group. The sources is copied from swt-4.6-cocoa-macosx-x86_64.zip from http://download.eclipse.org/eclipse/downloads/drops4/R-4.6-201606061100/ and javadoc is generated from sources.

The newest version!
/*******************************************************************************
 * Copyright (c) 2000, 2016 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.widgets;


import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.internal.cocoa.*;

/**
 * Instances of this class represent a task item.
 *
 * 
*
Styles:
*
(none)
*
Events:
*
(none)
*
* * @see Sample code and further information * * @since 3.6 * * @noextend This class is not intended to be subclassed by clients. */ public class TaskItem extends Item { TaskBar parent; Shell shell; NSImage defaultImage; int progress, iProgress, progressState = SWT.DEFAULT; Image overlayImage; String overlayText = ""; Menu menu; static final int PROGRESS_MAX = 100; static final int PROGRESS_TIMER = 350; static final int PROGRESS_BARS = 7; /** * 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 */ TaskItem (TaskBar parent, int style) { super (parent, style); this.parent = parent; parent.createItem (this, -1); createWidget (); } @Override protected void checkSubclass () { if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS); } @Override void createWidget () { NSApplication app = NSApplication.sharedApplication (); NSImage image = app.applicationIconImage (); defaultImage = new NSImage (image.copy ()); } @Override void destroyWidget () { parent.destroyItem (this); releaseHandle (); } /** * Returns the receiver's pop up menu if it has one, or null * if it does not. * * @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
  • *
*/ public Menu getMenu () { checkWidget (); return menu; } /** * Returns the receiver's overlay image if it has one, or null * if it does not. * * @return the receiver's overlay 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 getOverlayImage () { checkWidget (); return overlayImage; } /** * Returns the receiver's overlay text, which will be an empty * string if it has never been set. * * @return the receiver's overlay 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 getOverlayText () { checkWidget (); return overlayText; } /** * Returns the receiver's parent, which must be a TaskBar. * * @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 TaskBar getParent () { checkWidget (); return parent; } /** * Returns the receiver's progress. * * @return the receiver's progress * * @exception SWTException
    *
  • 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 getProgress () { checkWidget (); return progress; } /** * Returns the receiver's progress state. * * @return the receiver's progress 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 int getProgressState () { checkWidget (); return progressState; } @Override void releaseHandle () { super.releaseHandle (); parent = null; if (defaultImage != null) defaultImage.release (); defaultImage = null; } @Override void releaseWidget () { super.releaseWidget (); overlayImage = null; overlayText = null; shell = null; } /** * Sets the receiver's pop up menu to the argument. The way the menu is * shown is platform specific. * *

* This feature might not be available for the receiver on all * platforms. The application code can check if it is supported * by calling the respective get method. When the feature is not * available, the get method will always return the NULL.

* *

* For better cross platform support, the application code should * set this feature on the TaskItem for application.
* On Windows, this feature will only work on RCP applications.

* *

* The menu should be fully created before this method is called. * Dynamic changes to the menu after the method is called will not be reflected * in the native menu.

* * @param menu the new pop up menu * * @exception IllegalArgumentException
    *
  • ERROR_MENU_NOT_POP_UP - the menu is not a pop up menu
  • *
  • 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()) error(SWT.ERROR_INVALID_ARGUMENT); if ((menu.style & SWT.POP_UP) == 0) { error (SWT.ERROR_MENU_NOT_POP_UP); } } this.menu = menu; } /** * Sets the receiver's overlay image, which may be null * indicating that no image should be displayed. The bounds * for the overlay image is determined by the platform and in * general it should be a small image. * *

* This feature might not be available for the receiver on all * platforms. The application code can check if it is supported * by calling the respective get method. When the feature is not * available, the get method will always return the NULL.

* *

* For better cross platform support, the application code should * first try to set this feature on the TaskItem for the * main shell then on the TaskItem for the application.

* * @param overlayImage the new overlay image (may be null) * * @exception IllegalArgumentException
    *
  • ERROR_INVALID_ARGUMENT - if the overlayImage 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 setOverlayImage (Image overlayImage) { checkWidget (); if (overlayImage != null && overlayImage.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT); this.overlayImage = overlayImage; updateOverlayText (overlayImage != null ? null : overlayText); updateImage (); } /** * Sets the receiver's overlay text. The space available to display the * overlay text is platform dependent and in general it should be no longer * than a few characters. * *

* This feature might not be available for the receiver on all * platforms. The application code can check if it is supported * by calling the respective get method. When the feature is not * available, the get method will always return an empty string.

* *

* For better cross platform support, the application code should * first try to set this feature on the TaskItem for the * main shell then on the TaskItem for the application.

* * @param overlayText the new overlay text * * @exception IllegalArgumentException
    *
  • ERROR_NULL_ARGUMENT - if the overlayText 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 setOverlayText (String overlayText) { checkWidget (); if (overlayText == null) error (SWT.ERROR_NULL_ARGUMENT); this.overlayText = overlayText; updateOverlayText (overlayText); updateImage (); } /** * Sets the receiver's progress, the progress represents a percentage and * should be in range from 0 to 100. The progress is only shown when the progress * state is different than SWT#DEFAULT. * *

* This feature might not be available for the receiver on all * platforms. The application code can check if it is supported * by calling the respective get method. When the feature is not * available, the get method will always return zero.

* *

* For better cross platform support, the application code should * first try to set this feature on the TaskItem for the * main shell then on the TaskItem for the application.

* * @param progress the new progress * * @exception 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 {@link #setProgressState(int)} */ public void setProgress (int progress) { checkWidget (); progress = Math.max (0, Math.min (progress, PROGRESS_MAX)); if (this.progress == progress) return; this.progress = progress; updateImage (); } /** * Sets the receiver's progress state, the state can be one of * the following: *

    *
  • {@link SWT#DEFAULT}
  • *
  • {@link SWT#NORMAL}
  • *
  • {@link SWT#PAUSED}
  • *
  • {@link SWT#ERROR}
  • *
  • {@link SWT#INDETERMINATE}
  • *

* * The percentage of progress shown by the states SWT#NORMAL, SWT#PAUSED, * SWT#ERROR is set with setProgress().
* The state SWT#DEFAULT indicates that no progress should be shown. * *

* This feature might not be available for the receiver on all * platforms. The application code can check if it is supported * by calling the respective get method. When the feature is not * available, the get method will always return SWT#DEFAULT.

* *

* For better cross platform support, the application code should * first try to set this feature on the TaskItem for the * main shell then on the TaskItem for the application.

* * @param progressState the new progress 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 {@link #setProgress(int)} */ public void setProgressState (int progressState) { checkWidget (); if (this.progressState == progressState) return; this.progressState = progressState; updateImage (); } void setShell (Shell shell) { this.shell = shell; shell.addListener (SWT.Dispose, new Listener () { @Override public void handleEvent (Event event) { if (isDisposed ()) return; dispose (); } }); } void updateImage () { boolean drawProgress = progress != 0 && progressState != SWT.DEFAULT; boolean drawIntermidiate = progressState == SWT.INDETERMINATE; NSApplication app = NSApplication.sharedApplication (); NSDockTile dock = app.dockTile (); boolean drawImage = overlayImage != null && dock.badgeLabel () == null; if (!drawImage && !drawProgress && !drawIntermidiate) { app.setApplicationIconImage (defaultImage); return; } NSSize size = defaultImage.size (); NSImage newImage = (NSImage)new NSImage().alloc (); newImage = newImage.initWithSize (size); NSBitmapImageRep rep = (NSBitmapImageRep)new NSBitmapImageRep ().alloc (); rep = rep.initWithBitmapDataPlanes (0, (int)size.width, (int)size.height, 8, 4, true, false, OS.NSDeviceRGBColorSpace, OS.NSAlphaFirstBitmapFormat | OS.NSAlphaNonpremultipliedBitmapFormat, (int)size.width * 4, 32); newImage.addRepresentation (rep); rep.release (); NSRect rect = new NSRect (); rect.height = size.height; rect.width = size.width; newImage.lockFocus (); defaultImage.drawInRect (rect, rect, OS.NSCompositeSourceOver, 1); if (drawImage) { NSImage badgetImage = overlayImage.handle; NSSize badgeSize = badgetImage.size (); NSRect srcRect = new NSRect (); srcRect.height = badgeSize.height; srcRect.width = badgeSize.width; NSRect dstRect = new NSRect (); dstRect.x = size.width / 2; dstRect.height = size.height / 2; dstRect.width = size.width / 2; badgetImage.drawInRect(dstRect, srcRect, OS.NSCompositeSourceOver, 1); } if (drawIntermidiate || drawProgress) { switch (progressState) { case SWT.ERROR: NSColor.colorWithDeviceRed (1, 0, 0, 0.6f).setFill (); break; case SWT.PAUSED: NSColor.colorWithDeviceRed (1, 1, 0, 0.6f).setFill (); break; default: NSColor.colorWithDeviceRed (1, 1, 1, 0.6f).setFill (); } rect.width = size.width / (PROGRESS_BARS * 2 - 1); rect.height = size.height / 3; int count; if (drawIntermidiate) { count = iProgress; iProgress = (iProgress + 1) % (PROGRESS_BARS + 1); getDisplay ().timerExec (PROGRESS_TIMER, new Runnable () { @Override public void run () { updateImage (); } }); } else { count = progress * PROGRESS_BARS / PROGRESS_MAX; } for (int i = 0; i <= count; i++) { rect.x = i * 2 * rect.width; NSBezierPath.fillRect (rect); } } newImage.unlockFocus (); app.setApplicationIconImage (newImage); newImage.release (); } void updateOverlayText (String string) { NSApplication app = NSApplication.sharedApplication (); NSDockTile dock = app.dockTile (); if (string != null && string.length () > 0) { dock.setBadgeLabel (NSString.stringWith (string)); } else { dock.setBadgeLabel (null); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy