3.5

3.5 | 2 ratings Rate this file 58 downloads (last 30 days) File Size: 6.35 KB File ID: #23299

SYSTRAY - set/get system-tray icons on your computer's desktop

by Yair Altman

 

15 Mar 2009 (Updated 26 Jan 2010)

Code covered by the BSD License  

sets icons in the system-tray of your computer's desktop & enables setting/getting icon properties

Download Now | Watch this File

File Information
Description

SYSTRAY sets icons in the system-tray of your computer's desktop, if available. SYSTRAY enables setting several sys-tray icon properties and returns the system tray handle(s), if available.
 
Syntax: handles = systray(varargin);
 
handles = SYSTRAY retrieves the array of handles for the system-tray icons that were set in Matlab. If no icon is currently displayed in the sys-tray, then the returned array will be empty. If system-tray functionality is unsupported on your platform, then SYSTRAY throws a deliberate error.
 
handle = SYSTRAY(ICONIMAGE) sets an icon based on the requested icon image and returns its handle. The icon is automatically resized to the sys-tray's default icon size (e.g., 16x16). If ICONIMAGE was already created then it will not be recreated, only its handle will be returned. Note that ICONIMAGE may be an image filename, or any image format accepted by Matlab's im2java function. ICONIMAGE may also be a two-arg pair [X,Map] (indexed image & color map).
 
handle = SYSTRAY(ICON, param1,value1, param2,value2, ...) sets ICON with initial properties in the familiar format of property name/value pairs. ICON may be either an existing systray icon handle, an array of existing icon handles, or an iconImage as explained above. Property order does not matter and the property names are case-insensitive.
 
Icon properties can also be read/modified after creation, using get() & set() on the icon handle, or via the dot-notation (hIcon.Tag='iconTag').
 
The supported properties (gettable and settable) are:
    
 - 'IconImage' - updates the icon image [filename or Matlab image]
 - 'ImageAutoSize' - auto-resizes icon to tray size (default='on'/true)
 - 'Tooltip' - sets the icon hover tooltip
 - 'UIContextMenu' - sets the right-click context-menu (like uicontrols). Provide a uicontextmenu handle or java.awt.PopupMenu object
 - 'MarkForDeletion' - set to any value to remove the icon from the systray
 - 'Tag' - same as uicontrol
 - 'UserData' - same as uicontrol
 - 'Message' - text of an informational popup msg next to the icon should be a cell array of {titleText,msgText,severity} where severity = 'none','error','info' or: 'warn' (default: 'info'). Title may be empty, but then no severity icon will show
 
...and also some gettable-only (i.e., read-only) properties:
 - 'Size' - icon size [width,height] - a java.awt.Dimension object
 - 'IconWidth' - icon width in [pixels] - numeric value
 - 'IconHeight' - icon height in [pixels] - numeric value
 - 'Type' - icon type [class name = 'java.awt.TrayIcon']
 - 'JavaObject' - reference to the TrayIcon Java object
 - 'Class' - class of the Java object
    
...and also a bunch of callback properties that can be set in any of Matlab's callback formats: 'callback string', @callbackFunc or: {@callbackFunc,params,...}:
    
 - 'MouseClickedCallback' - called when icon is mouse-clicked (pressed & released)
 - 'MousePressedCallback' - called when icon is mouse-clicked (before release)
 - 'MouseReleasedCallback' - called when icon is mouse-clicked (after release)
 - 'MouseEnteredCallback' - called when mouse is moved to within icon bounds
 - 'MouseExitedCallback' - called when mouse is moved outside the icon bounds
 - 'MouseMovedCallback' - called when mouse is moved over the icon
 - 'MouseDraggedCallback' - called when mouse drags the icon
 - 'ActionPerformedCallback' - called when icon is double-clicked
 
Examples:
  hIcons = systray; % returns list of existing icon handles
  hIcon = systray('icon.png'); % display a simple icon
  hIcon = systray('icon.png','Tooltip','right-click me!','UIContextmenu',cm);
  systray(hIcon,'Message',{'title','informational message','warn'});
  userdata = get(hIcon,'UserData');
  set(hIcon,'userdata',magic(5)); % case insensitive prop names
  set(hIcon,'markForDeletion',1); % remove icon from sys tray
 
Warning:
This code requires Java 1.6, available since Matlab 7.5. (R2007b). This code also uses some undocumented Matlab features.
 
Technical details:
The details are explained in http://undocumentedmatlab.com/blog/setting-system-tray-icons/ and http://undocumentedmatlab.com/blog/setting-system-tray-popup-messages/
 
Limitations:
Due to the undocumented nature of some features, I have still not been able to bypass a few limitations in functionality - see the help section for details.
 
Bugs and suggestions:
Please send to Yair Altman (altmany at gmail dot com)

MATLAB release MATLAB 7.5 (R2007b)
Other requirements Java 1.6 and up (which is available in Matlab since release 7.5 R2007b)
Zip File Content  
Other Files license.txt,
systray.m
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (3)
22 Apr 2009 Martin

Hello Yair, as your other submissions this one is very nice too. Unfortunately if I click the systray icon in MATLAB R2008b (Java 1.6.0_04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode) there is an exception. With MATLAB R2008a everything works excellent.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.mathworks.mwswing.desk.DTDocumentBar.wantsToHandle(DTDocumentBar.java:1215)
at com.mathworks.mwswing.desk.DTSelectionManager.eventDispatched(DTSelectionManager.java:291)
at java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Unknown Source)
at java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Unknown Source)
at java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Unknown Source)
at java.awt.Toolkit.notifyAWTEventListeners(Unknown Source)
at java.awt.TrayIcon.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Perhaps are you able to fix this so that I am able to use systray.m.

With kind regards
Martin

15 May 2009 Yair Altman

A reader on my blog (http://undocumentedmatlab.com/blog/uisplitpane/#comment-658 ) kindly pointed out that these exceptions can be solved by:

t=java.awt.Toolkit.getDefaultToolkit()
ev=t.getAWTEventListeners()
for i=1:length(ev)
  str=ev(i).getListener().getClass.toString
  if str.indexOf('com.mathworks.mwswing.desk.DTSelect')>=0 || ...
    str.indexOf('javax.swing.plaf.basic.BasicLookAndFeel')>=0 || ...
    str.indexOf('com.mathworks.widgets.text.mcode.MLintDeco')>=0
    t.removeAWTEventListener(ev(i))
  end
end

Thanks J :-)

22 May 2009 Petter

The submission should be updated to fix the above mentioned problem.

Please login to add a comment or rating.
Updates
26 Jan 2010

Fixed uicontextmenu edge case reported by T. Farajian

Tag Activity for this File
Tag Applied By Date/Time
java Yair Altman 16 Mar 2009 09:24:24
gui Yair Altman 16 Mar 2009 09:24:24
desktop Yair Altman 16 Mar 2009 09:24:24
icons Yair Altman 16 Mar 2009 09:24:24
undocumented Yair Altman 16 Mar 2009 09:24:24
 

MATLAB Central Terms of Use

NOTICE: Any content you submit to MATLAB Central, including personal information, is not subject to the protections which may be afforded information collected under other sections of The MathWorks, Inc. Web site. You are entirely responsible for all content that you upload, post, e-mail, transmit or otherwise make available via MATLAB Central. The MathWorks does not control the content posted by visitors to MATLAB Central and, does not guarantee the accuracy, integrity, or quality of such content. Under no circumstances will The MathWorks be liable in any way for any content not authored by The MathWorks, or any loss or damage of any kind incurred as a result of the use of any content posted, e-mailed, transmitted or otherwise made available via MATLAB Central. Read the complete Terms prior to use.

Contact us at files@mathworks.com