— Created 2019-07-09 by Takaaki Naganoya
— 2019 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"
property |NSURL| : a reference to current application’s |NSURL|
property NSFont : a reference to current application’s NSFont
property NSView : a reference to current application’s NSView
property NSAlert : a reference to current application’s NSAlert
property NSColor : a reference to current application’s NSColor
property NSTextView : a reference to current application’s NSTextView
property NSScrollView : a reference to current application’s NSScrollView
property NSUserDefaults : a reference to current application’s NSUserDefaults
property NSRunningApplication : a reference to current application’s NSRunningApplication
property NSModalPanelWindowLevel : a reference to current application’s NSModalPanelWindowLevel
property returnCode : 0
property supState : false
set asStr to do shell script "cal 2019"
set paramObj to {myMessage:"Main Message", mySubMessage:"Sub information", mes1:(asStr), mesWidth:450, mesHeight:200, fontName:"Courier", fontSize:11.0, suppressionMes:"Some Option"}
–my dispTextViewWithAlertdialog:paramObj–for debug
my performSelectorOnMainThread:"dispTextViewWithAlertdialog:" withObject:paramObj waitUntilDone:true
return (my supState)
on dispTextViewWithAlertdialog:paramObj
–Receive Parameters
set aMainMes to (myMessage of paramObj) as string –Main Message
set aSubMes to (mySubMessage of paramObj) as string –Sub Message
set mesStr to (mes1 of paramObj) as string –Text Input field 1 Label
set aWidth to (mesWidth of paramObj) as integer –TextView width
set aHeight to (mesHeight of paramObj) as integer –TextView height
set aFontName to (fontName of paramObj) as string –TextView font name
set aFontSize to (fontSize of paramObj) as real –TextView font size
set aSupMes to (suppressionMes of paramObj) as string –Suppression Button Titile
–Detect Dark Mode
set dMode to retLIghtOrDark() of me
if dMode = true then
set tvCol to 1
set tvAlpha to 0.8
set bCol to 0.1
set bAlpha to 0.8
set contentCol to (NSColor’s cyanColor())
else
set tvCol to 0
set tvAlpha to 0.1
set bCol to 1
set bAlpha to 0.5
set contentCol to (NSColor’s grayColor())
end if
— Create a TextView with Scroll View
set aScroll to NSScrollView’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, aWidth, aHeight))
set aView to NSTextView’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, aWidth, aHeight))
set aColor to NSColor’s colorWithDeviceRed:0.0 green:0.0 blue:0.0 alpha:(tvAlpha)
aView’s setRichText:true
aView’s useAllLigatures:true
aView’s setTextColor:(contentCol)
aView’s setFont:(NSFont’s fontWithName:aFontName |size|:aFontSize)
aView’s setDrawsBackground:false
aView’s setBackgroundColor:aColor
aView’s setOpaque:(false)
aView’s setString:mesStr
aScroll’s setDocumentView:aView
–aScroll’s setBorderType:(current application’s NSBezelBorder)
–aScroll’s setBorderType:(current application’s NSGrooveBorder)
–aScroll’s setBorderType:(current application’s NSLineBorder)
aScroll’s setBorderType:(current application’s NSNoBorder)
–Ruler
–aScroll’s setHasHorizontalRuler:(true)
–aScroll’s setRulersVisible:(true)
aView’s enclosingScrollView()’s setHasVerticalScroller:true
set anImage to current application’s NSImage’s imageNamed:(current application’s NSImageNameComputer)
— set up alert
set theAlert to NSAlert’s alloc()’s init()
tell theAlert
its setIcon:(anImage)
–for Messages
its setMessageText:(aMainMes)
its setInformativeText:(aSubMes)
–for Buttons
its addButtonWithTitle:"OK"
its addButtonWithTitle:"Cancel"
–Add Accessory View
its setAccessoryView:(aScroll)
–for Help Button
its setShowsHelp:(true)
its setDelegate:(me)
its setAlertStyle:0 —-0…2
its setShowsSuppressionButton:(true) –「今後このメッセージを表示しない」チェックボックスを表示
set suppressionB to its suppressionButton
set myWindow to its |window|
end tell
myWindow’s setOpaque:(false)
myWindow’s setBackgroundColor:(NSColor’s colorWithCalibratedWhite:(bCol) alpha:(bAlpha))
myWindow’s setLevel:(NSModalPanelWindowLevel)
suppressionB’s setTitle:(aSupMes)
suppressionB’s setState:(true) —default state
— show alert in modal loop
NSRunningApplication’s currentApplication()’s activateWithOptions:0
my performSelectorOnMainThread:"doModal:" withObject:(theAlert) waitUntilDone:true
if (my returnCode as number) = 1001 then error number -128
set my supState to (suppressionB’s state) as boolean
end dispTextViewWithAlertdialog:
on doModal:aParam
set (my returnCode) to aParam’s runModal()
end doModal:
on alertShowHelp:aNotification
display dialog "Help Me!" buttons {"OK"} default button 1 with icon 1
return false –trueを返すと親ウィンドウ(アラートダイアログ)がクローズする
end alertShowHelp:
–ダークモードの判定。ダークモード時:true、ライトモード時:falseが返る。System Eventsを使っていないのは、macOS 10.14以降対策(承認を取得しなくてもいいように)
on retLIghtOrDark()
set curMode to (current application’s NSUserDefaults’s standardUserDefaults()’s stringForKey:"AppleInterfaceStyle") as string
return (curMode = "Dark") as boolean
end retLIghtOrDark