Script Library: 1213 scripts
 

simple-system-tray.r

REBOL [ Author: {Izkata} Email: %Izkata--gmail--com File: %simple-system-tray.r Date: 5-Jul-2005 Title: {Simple System Tray} Purpose: { After learning Rebol 1.3 could place itself in the System Tray on Windows, and after finding Graham's example, I decided to make a slightly simpler version of the System Tray dialect. Since it's based on Graham's example, it may well be missing stuff... Later note: This was also an experiment for me, learning the parse dialect. } Example: { Pretty simple, really, hence the reason I made it: ToSystemTray [ {I am the little help-bubble that appears while the mouse hovers over the icon} [ {Item 1 (Also done when icon left-clicked on)} [ alert [{I do stuff} {riight..}] ] bar {Item 2 - Remove from System Tray} [RemoveSystemTray] {Quit} [quit] bar bar bar ] ] And, of course, there's no length requirement (that I know of!) for the number of items in the list - and no specifiied order. } Library: [ level: 'intermediate platform: [windows win] ;Is the system tray anywhere else? type: [dialect tool] domain: [dialects ui parse] tested-under: {Windows XP Home, Rebol/View 1.3.1} support: none license: none see-also: none ] ] MySysTray: make object! [ Defines: none Tray: none Parse-Systray: func [Systray][ Defines: copy [] Tray: compose/deep [add main [help: (first Systray) menu: []]] parse second Systray [ some [ 'bar (append Tray/3/4 'bar) | set Str string! set Blk block! ( append Tray/3/4 compose [(to-word rejoin [{Defines} 1 + length? Defines {:}]) (Str)] append Defines compose/only [(to-word join copy {Defines} 1 + length? Defines) (Blk)] ) ] ] return Tray ] set 'ToSystemTray func [ {Send REBOL to the System Tray} Systray [block!] /return {Return immediately} ][ Tray: Parse-Systray Systray system/ports/system: open [scheme: 'system] append system/ports/wait-list system/ports/system system/ports/system/awake: func [port /local r][ if all [ r: pick port 1 r/1 = 'tray ][ if r/3 = 'menu [do select Defines r/4] if r/3 = 'activate [do second Defines] ] return false ] set-modes system/ports/system compose/only [tray: (load mold Tray)] if not return [do-events] ] set 'RemoveSystemTray func [{Remove REBOL from the System Tray}][ remove find system/ports/wait-list system/ports/system close system/ports/system system/ports/system: open [scheme: 'system] ] ]
halt ;; to terminate script if DO'ne from webpage
Notes
  • email address(es) have been munged to protect them from spam harvesters. If you are a Library member, you can log on and view this script without the munging.
  • (Izkata:gmail:com)