実行プログラムのDock上のアイコンにプログレスバーを描画して、プログレスバーの内容をアニメーションするAppleScriptです。オリジナルはedama2さんが書かれたものです。
以前のバージョンはmacOS 10.12以前の時代に書かれたものだったので、macOS 10.13以降の形式に書き換えました。
実行プログラムが何であっても、Dockにアイコンが表示されるかぎりはアイコンにプログレスバーを描画します。スクリプトエディタ、Script Debugger、AppleScriptアプレット、Script DebuggerのEnhanced Appletなどなど。
ただし、Dockにアイコンが表示されない種類のAppleScript実行プログラム(例:スクリプトメニュー など)については、プログレスバーは表示されません。
choose colorコマンドで色選択しているのは、あくまでもデモ動作のためであり、あらかじめRGB値を指定しておけばその色でプログレスバーを描画します。
プログラム中でプログレスバーの表示ループ中にてdelayコマンドで時間待ちしているのは、目で見てわかるようにしているだけで、本来この数値はもっと小さい値でかまいません(ただし、表示のためにdelayコマンドは必須です)。
AppleScript名:Dockアイコンにプログレスバーを追加 v3.scptd |
use AppleScript use scripting additions use framework "Foundation" use framework "AppKit" property NSApp : a reference to current application’s NSApp property NSColor : a reference to current application’s NSColor property NSImage : a reference to current application’s NSImage property NSGradient : a reference to current application’s NSGradient property NSZeroPoint : a reference to current application’s NSZeroPoint property NSBezierPath : a reference to current application’s NSBezierPath on run set aASCol to choose color set aCocoaList to retCocoaColorList(aASCol, 65535) of me set aCol to makeNSColorFromRGBAList(aCocoaList) set max to 100 repeat with num from 1 to max my progDockTile(max, num, aCol) delay 0.05 end repeat #アイコンを元に戻す NSApp’s setApplicationIconImage:(NSImage’s imageNamed:"NSApplicationIcon") end run #Dockアイコンにプログレスバーを追加 on progDockTile(max, current, strartColor) set appIcon to NSImage’s imageNamed:"NSApplicationIcon" set iconSize to appIcon’s |size|() tell (NSImage’s alloc()’s initWithSize:iconSize) lockFocus() appIcon’s dissolveToPoint:(NSZeroPoint) fraction:1.0 set n to (iconSize’s width) / 16 #プログレスバーの長方形 set myRect to current application’s NSMakeRect(n / 2, n, n * 15, n * 1.6) –>{origin:{x:4.0, y:8.0}, |size|:{width:120.0, height:12.800000190735}} tell (NSBezierPath’s ¬ bezierPathWithRoundedRect:myRect ¬ xRadius:(myRect’s item 2’s item 2) / 2 ¬ yRadius:(myRect’s item 2’s item 2) / 2) (NSColor’s colorWithWhite:1.0 alpha:0.4)’s |set|() –>背景色 fill() NSColor’s whiteColor()’s |set|() –>枠色 stroke() end tell if current is greater than 0 then if current is greater than max then set current to max set myRect’s item 2’s item 1 to (myRect’s item 2’s item 1) / max * current tell (NSBezierPath’s ¬ bezierPathWithRoundedRect:myRect ¬ xRadius:(myRect’s item 2’s item 2) / 2 ¬ yRadius:(myRect’s item 2’s item 2) / 2) –set strartColor to NSColor’s colorWithRed:0.15 green:0.55 blue:1 alpha:0.8 set endColor to strartColor’s shadowWithLevel:0.7 set grad to NSGradient’s alloc()’s initWithStartingColor:strartColor endingColor:endColor grad’s drawInBezierPath:it angle:270.0 end tell end if unlockFocus() NSApp’s setApplicationIconImage:it end tell return (current + 1) end progDockTile –Convert "choose color" RGB list (0-65535) to Cocoa color RGBA Array (0.0-1.0) on retCocoaColorList(aColorList, aMax) set cocoaColorList to {} repeat with i in aColorList set the end of cocoaColorList to i / aMax end repeat set the end of cocoaColorList to 1.0 return cocoaColorList end retCocoaColorList on makeNSColorFromRGBAList(colList) copy colList to {redValue, greenValue, blueValue, alphaValue} set aColor to NSColor’s colorWithCalibratedRed:redValue green:greenValue blue:blueValue alpha:alphaValue return aColor end makeNSColorFromRGBAList |
More from my site
(Visited 71 times, 1 visits today)