Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

タグ: NSApplication

Outline View Lib

Posted on 12月 16 by Takaaki Naganoya

AppKit系のオブジェクトで最難関との呼び声も高い、NSOutlineViewをAppleScriptから呼び出しやすく機能をまとめたものです。

edama2さんと数年前に「Outline Viewがどうにかならないものか」と相談し、まとめていただいたものです。本当はもっとシンプルに書いてあったのですが、データを外部から指定できるようにしたり、デフォルト状態でNSOutlineViewを展開状態で表示する機能を追加したり、行ごとの背景色を変更できるようにしたり……と、機能が増えました。

本UIをAppleScript上で利用する用途は、データ選択や階層データのプレビュー(PDFのTOCなど)などです。

NSTreeControllerの使い方だったり、Cocoa Bindingをプログラマティックに実行していたりと、そのあたりが見どころでしょう。

スクリプトエディタとScript Debuggerの両方で動作確認していますし、スクリプトメニュー上で動作しています。
CotEditorの内蔵スクリプトメニューに入れたところ最前面にダイアログ表示されませんでした。

AppleScript名:Outline View Lib.scpt
—
–  Created by: edama2 & Piyomaru
–  Created on: 2024/12/16
—
–  Copyright © 2024 edama2 & Piyomaru, All Rights Reserved
—

use AppleScript
use framework "Cocoa"

property dRes : missing value –Selection
property _data_source : missing value

set aRecord to {}
set aRecord’s end to {|name|:"🟥 格闘機", isLeaf:false, children:{{|name|:"RGM-79(G)陸戦型ジム", isLeaf:true}, {|name|:"RB-79KボールK型", isLeaf:true}, {|name|:"RGM-79Lジム・ライトアーマー", isLeaf:true}, {|name|:"RGM-79ジム(指揮官機)", isLeaf:true}, {|name|:"RGM-79FPジム・ストライカー", isLeaf:true}, {|name|:"RGM-79Vジム・ナイトシーカー", isLeaf:true}, {|name|:"RX-77-3ガンキャノン重装型", isLeaf:true}, {|name|:"RX-78XXピクシー", isLeaf:true}}}
set aRecord’s end to {|name|:"🟧 近距離機", isLeaf:false, children:{{|name|:"RGM-79ジム", isLeaf:true}, {|name|:"TGM-79ジム・トレーナー", isLeaf:true}, {|name|:"RAG-79アクア・ジム", isLeaf:true}, {|name|:"RGM-79ジム(WD隊)", isLeaf:true}, {|name|:"MS-06F-2ザクII(F2)", isLeaf:true}}}
set aRecord’s end to {|name|:"🟩 射撃型機", isLeaf:false, children:{{|name|:"RGC-80Sジム・キャノン(空間突撃仕様)", isLeaf:true}, {|name|:"RGM-79Fデザート・ジム", isLeaf:true}, {|name|:"RX-79(G)陸戦型ガンダム(ジム頭)", isLeaf:true}}}
set aRecord’s end to {|name|:"🟪 支援型機", isLeaf:false, children:{{|name|:"RGM-79SCジム・スナイパーカスタム", isLeaf:true}, {|name|:"RGM-79SCジム・スナイパーカスタム(SP)", isLeaf:true}, {|name|:"RX-77-2ガンキャノン", isLeaf:true}, {|name|:"RGM-79SPジム・スナイパーII", isLeaf:true}, {|name|:"FA-78-2ヘビーガンダム", isLeaf:true}, {|name|:"FA-78-1フルアーマーガンダム", isLeaf:true}}}
set aRecord’s end to {|name|:"🟦 遠距離型機", isLeaf:false, children:{{|name|:"RB-79ボール", isLeaf:true}, {|name|:"RGM-79(G)ジム・スナイパー", isLeaf:true}, {|name|:"RGC-80ジム・キャノン", isLeaf:true}, {|name|:"RX-75量産型ガンタンク", isLeaf:true}, {|name|:"RGC-80ジム・キャノン(WD隊)", isLeaf:true}, {|name|:"RTX-440陸戦強襲型ガンタンク", isLeaf:true}, {|name|:"RX-75ガンタンク", isLeaf:true}, {|name|:"RX-77D量産型ガンキャノン", isLeaf:true}, {|name|:"FA-78-1Bフルアーマーガンダム(TYPE-B)", isLeaf:true}}}

set mainMes to "戦場の絆MS選択"
set subMes to "以下のリストから希望の機体を選択してください"

set aRes to displayOutline(aRecord, mainMes, subMes, true, 400, 700) of me

on displayOutline(treeData, messageText, informativeText, isExpand, aWidth, aHeight)
  set (my _data_source) to missing value –init
  
set paramObj to {treeData:treeData, messageText:messageText, informativeText:informativeText, isExpand:isExpand, aWidth:aWidth, aHeight:aHeight}
  
my performSelectorOnMainThread:"raizeAlert:" withObject:(paramObj) waitUntilDone:true
  
return dRes
end displayOutline

on raizeAlert:paramObj
  –Initialize return value
  
set dRes to missing value
  
  
–Recieve Parameters
  
set treeData to (treeData of paramObj) as list
  
set messageText to (messageText of paramObj)
  
set informativeText to (informativeText of paramObj)
  
set isExpand to (isExpand of paramObj) as boolean
  
set aWidth to (aWidth of paramObj) as integer
  
set aHeight to (aHeight of paramObj) as integer
  
  
–Make Accessory View
  
set accessoryView to makeAccessoryView(treeData, isExpand, aWidth, aHeight) of me
  
  
tell current application’s NSAlert’s new()
    current application’s NSApplication’s sharedApplication()’s setActivationPolicy:(current application’s NSApplicationActivationPolicyRegular)
    
current application’s NSApp’s activateIgnoringOtherApps:(true)
    
    
setMessageText_(messageText)
    
setInformativeText_(informativeText)
    
setAccessoryView_(accessoryView)
    
runModal()
  end tell
  
  
set selectedObject to (my _data_source)’s selectedObjects()’s firstObject()
  
set dRes to {selectedObjects:selectedObject as {record, anything}}
end raizeAlert:

on makeAccessoryView(treeData as list, isExpand as boolean, aWidth as integer, aHeight as integer)
  set my _data_source to current application’s NSTreeController’s alloc()’s initWithContent:treeData
  (
my _data_source)’s setChildrenKeyPath:"children"
  (
my _data_source)’s setLeafKeyPath:"isLeaf"
  
  
set scrollView to (current application’s NSScrollView’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, aWidth, aHeight)))
  
  
tell (current application’s NSOutlineView’s alloc()’s initWithFrame:(current application’s NSZeroRect))
    addTableColumn_(current application’s NSTableColumn’s alloc()’s initWithIdentifier:"name")
    
bind_toObject_withKeyPath_options_(current application’s NSContentBinding, (my _data_source), "arrangedObjects", missing value)
    
bind_toObject_withKeyPath_options_(current application’s NSSelectionIndexPathsBinding, (my _data_source), current application’s NSSelectionIndexPathsBinding, {})
    
    
expandItem_expandChildren_(missing value, isExpand)
    
scrollView’s setDocumentView:it
    
setHeaderView_(missing value)
    
setOutlineTableColumn_(tableColumns()’s firstObject())
    
setUsesAlternatingRowBackgroundColors_(true)
    
    
tell tableColumns()’s firstObject()
      bind_toObject_withKeyPath_options_(current application’s NSValueBinding, (my _data_source), ("arrangedObjects." & its identifier()), missing value)
      
setTitle_(its identifier())
      
setWidth_(current application’s NSWidth(tableView()’s superview()’s |bounds|()))
    end tell
  end tell
  
  
return scrollView
end makeAccessoryView

★Click Here to Open This Script 

Posted in dialog | Tagged 12.0savvy 13.0savvy 14.0savvy 15.0 NSAlert NSApplication NSContentBinding NSMakeRect NSOutlineView NSSelectionIndexPathsBinding NSTableColumn NSTreeController | Leave a comment

NSApplicationにアクセス

Posted on 9月 21, 2019 by Takaaki Naganoya

NSApplicationにアクセスして実行環境の各種情報を取得するAppleScriptです。

プロセス関連のCocoaオブジェクトは何種類かありますが、

NSApplicationは実行環境そのもの、実行中のアプリケーションの内部情報を取得するオブジェクトのようです。他のアプリケーションをBundle IDで指定してNSApplicationを取得するような処理ができるのかと思って調べていたのですが、どーもできないっぽい。

AppleScriptからSystem Events経由でアクセスするいつものやり方で、取得できない要素はとくにないのですが、一長一短というか得意不得意があるという感じです。

AppleScript名:NSApplicationにアクセス.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2019/08/04
—
–  Copyright © 2019 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use framework "AppKit"
use scripting additions

set anApp to current application’s NSApplication’s sharedApplication()
–> <ScriptDebuggerApplication: 0x600002562d00>

anApp’s |running| as boolean
–> true

anApp’s enabledRemoteNotificationTypes()
–> 0

anApp’s mainMenu()
–>
(*
<NSMenu: 0x600001878240>
  Title: AMainMenu
  Open bounds: [t=1440, l=0, b=1440, r=0]
  Supermenu: 0x0 (None), autoenable: YES
  Items: (
"<NSMenuItem: 0x6000029294a0 Script Debugger, submenu: 0x6000018780c0 (Script Debugger)>",
"<NSMenuItem: 0x600002929aa0 File, submenu: 0x6000018789c0 (File)>",
"<NSMenuItem: 0x60000292ae20 Edit, submenu: 0x600001878a80 (Edit)>",
"<NSMenuItem: 0x60000291c240 View, submenu: 0x600001878c40 (View)>",
"<NSMenuItem: 0x60000291cfc0 Search, submenu: 0x600001878e80 (Search)>",
"<NSMenuItem: 0x60000291d5c0 Script, submenu: 0x600001878f00 (Script)>",
"<NSMenuItem: 0x60000291e700 Dictionary, submenu: 0x600001879040 (Dictionary)>",
"<NSMenuItem: 0x60000291ef40 Window, submenu: 0x600001879080 (Window)>",
"<NSMenuItem: 0x6000029285a0 Clippings, submenu: 0x600001878840 (Clippings)>",
"<NSMenuItem: 0x60000291f540 Scripts, submenu: 0x6000018791c0 (Scripts)>",
"<NSMenuItem: 0x60000291fc00 Help, submenu: 0x600001879340 (Help)>"
)
*)

anApp’s servicesMenu()
(*
<NSMenu: 0x600001878340>
  Title: Services
  Open bounds: [t=nan, l=6.95319e-310, b=nan, r=6.95319e-310]
  Supermenu: 0x6000018780c0 (Script Debugger), autoenable: YES
  Items: (
"<NSMenuItem: 0x60000e924cc0 Add to Wunderlist>",
"<NSMenuItem: 0x60000e927120 ATOK\U30a4\U30df\U30af\U30eb\U3067\U691c\U7d22>",
"<NSMenuItem: 0x60000e926f40 Evernote \U306b\U8ffd\U52a0>",
"<NSMenuItem: 0x60000e926a60 Finder\U3067\U60c5\U5831\U3092\U898b\U308b>",
"<NSMenuItem: 0x60000e927e40 Finder\U306b\U8868\U793a>",
"<NSMenuItem: 0x60000e9275a0 \U958b\U304f>",
"<NSMenuItem: 0x60000e9279c0 man\U30da\U30fc\U30b8\U3092\U30bf\U30fc\U30df\U30ca\U30eb\U3067\U958b\U304f>",
"<NSMenuItem: 0x60000e9246c0 \U30bf\U30fc\U30df\U30ca\U30eb\U306eman\U30da\U30fc\U30b8\U30a4\U30f3\U30c7\U30c3\U30af\U30b9\U3067\U691c\U7d22>",
"<NSMenuItem: 0x60000e924c00 \U30b9\U30c6\U30a3\U30c3\U30ad\U30fc\U30e1\U30e2\U3092\U4f5c\U6210>",
"<NSMenuItem: 0x60000e9249c0 \U30b9\U30dd\U30fc\U30af\U30f3\U30c8\U30e9\U30c3\U30af\U3068\U3057\U3066iTunes\U306b\U8ffd\U52a0>",
"<NSMenuItem: 0x60000e9244e0 \U30c6\U30ad\U30b9\U30c8\U3092\U7c21\U4f53\U5b57\U4e2d\U56fd\U8a9e\U306b\U5909\U63db>",
"<NSMenuItem: 0x60000e927a20 \U30c6\U30ad\U30b9\U30c8\U3092\U5168\U89d2\U306b\U5909\U63db>",
"<NSMenuItem: 0x60000e9276c0 \U30c6\U30ad\U30b9\U30c8\U3092\U534a\U89d2\U306b\U5909\U63db>",
"<NSMenuItem: 0x60000e9247e0 \U30c6\U30ad\U30b9\U30c8\U3092\U7e41\U4f53\U5b57\U4e2d\U56fd\U8a9e\U306b\U5909\U63db>",
"<NSMenuItem: 0x60000e925440 \U30de\U30c3\U30d7\U3092\U8868\U793a>",
"<NSMenuItem: 0x60000e926040 \U30a4\U30e1\U30fc\U30b8\U3092\U8aad\U307f\U8fbc\U3080>",
"<NSMenuItem: 0x60000e925ec0 \U30c7\U30b9\U30af\U30c8\U30c3\U30d7\U30d4\U30af\U30c1\U30e3\U3092\U8a2d\U5b9a>",
"<NSMenuItem: 0x60000e926c40 Skim\U3067URL\U3092\U958b\U304f>",
"<NSMenuItem: 0x60000e9266a0 Skim\U3067\U30d5\U30a1\U30a4\U30eb\U3092\U9<<description truncated at 2000 characters out of 4221>>"
*)

anApp’s mainWindow()
–> <ScriptWindow: 0x7ffd73e344c0>

anApp’s keyWindow()
–> <ScriptWindow: 0x7ffd73e344c0>

anApp’s |windows|()
(*
(NSArray) {
  <NSPanel: 0x600003139500>,
  <NSWindow: 0x60000312e500>,
  <MiniDebuggerWindow: 0x7ffd73e0b870>,
  <LNSFindWrapAroundWindow: 0x60000312b000>,
  <NSToolTipPanel: 0x7ffd73dee5e0>,
  <NSPanel: 0x600003104800>,
  <NSPanel: 0x600003104700>,
  <NSWindow: 0x60000315c800>,
  <NSColorPanel: 0x7ffce4aa99c0>,
  <NSWindow: 0x600003121d00>,
  <ScriptWindow: 0x7ffd73e344c0>,
  <NSComboBoxWindow: 0x7ffce4f27700>
}
*)

anApp’s dockTile()
–> <NSDockTile: 0x60000221db00>

anApp’s dockTile()’s |size|()
–> {width:128.0, height:128.0}

anApp’s dockTile()’s owner()
–> <ScriptDebuggerApplication: 0x600003f38480>

anApp’s dockTile()’s showsApplicationBadge()
–> false

anApp’s dockTile()’s badgeLabel()

anApp’s applicationIconImage()
–> <NSImage 0x60000573be40 Size={128, 128} Reps=( ……

anApp’s acceptsFirstResponder()
–> false

anApp’s becomeFirstResponder()
–> true

★Click Here to Open This Script 

Posted in Noification System | Tagged 10.12savvy 10.13savvy 10.14savvy NSApplication | Leave a comment

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 13.6.5 AS系のバグ、一切直らず
  • CotEditorで2つの書類の行単位での差分検出
  • Apple純正マウス、キーボードのバッテリー残量取得
  • macOS 15, Sequoia
  • 初心者がつまづきやすい「log」コマンド
  • ディスプレイをスリープ状態にして処理続行
  • 指定のWordファイルをPDFに書き出す
  • Adobe AcrobatをAppleScriptから操作してPDF圧縮
  • メキシカンハットの描画
  • 与えられた文字列の1D Listのすべての順列組み合わせパターン文字列を返す v3(ベンチマーク用)
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • macOS 13 TTS環境の変化について
  • 2023年に書いた価値あるAppleScript
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AdobeがInDesign v19.4からPOSIX pathを採用
  • 可変次元のベクトルに対応したコサイン類似度計算
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • Cocoa Scripting Course 続刊計画
  • NaturalLanguage.frameworkでNLEmbeddingの処理が可能な言語をチェック

Tags

10.11savvy (1102) 10.12savvy (1243) 10.13savvy (1392) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (206) 13.0savvy (162) 14.0savvy (108) 15.0savvy (86) CotEditor (63) Finder (51) iTunes (19) Keynote (112) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (51) NSDictionary (27) NSFileManager (23) NSFont (19) NSImage (41) NSJSONSerialization (21) NSMutableArray (62) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (117) NSURL (97) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (70) Pages (52) Safari (44) Script Editor (26) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC