AppleScriptObjC を Cocoa/Objective-C アプリに統合する

Snow Leopard 登場後、いきなり超応用編からスタートしたこの AppleScriptObjC シリ ーズ(?)ですが、今回でひと区切りとさせていただきたいと思います。

もっと基礎的な部分に関しては、本家が出す、と言っているサンプルコードやドキュメントにお任せたいところですが、あまり期待できないので、精力的にサンプルコードをアップしている MacScripter / unScripted などをご参照ください。あるいは、何かリクエストをください。

最後は、Cocoa/Objective-C アプリで AppleScriptObjC を使えるようにする というお話。プロジェクト設定レベルのことなので、技術的な意義はあまりありませんが、よろしければご覧ください。

“AppleScriptObjC を Cocoa/Objective-C アプリに統合する” の続きを読む

Scriptable Core Data フレームワーク

cocoa-dev は流れが速くて、とても全てを追いきれないのですが、今日たまたまチェックしてみたら、まだプロトタイプ段階で、ソースの公開は Leopard の発売直後になるようですが、面白そうなフレームワークの開発がアナウンスされていました。

Scriptable Core Data (SCD) Framework launched on SourceForge

Hello, all — We have initiated an open-source project on SourceForge with the UNIX name “scriptcoredata”: https://scriptcoredata.svn.sourceforge.net/svnroot/scriptcoredata/

僕の理解では、Core Data Document-based Application のコードにちょっと手を加えるだけで、自動(半自動?)的に AppleScript 用語辞書を生成してくれる フレームワークのようです。

リンク先にアップされている発表資料の動画では、Core Data のサンプルアプリ「OutlineEdit」をスクリプタブルにして、AppleScript で項目を追加するデモなどが見られます。

個人的には、「用語辞書が生成されるタイミングによっては、AppleScript Studio でも使える?」という、非常に狭い範囲の期待をしてしまいますが、開発が順調に進めば、自分の Core Data アプリに AppleScript サポートを追加したい開発者や、そのアプリのユーザーにとっては、朗報となるかもしれません。

プロジェクト参加者絶賛募集中 のようなので、腕に覚えのある方はぜひ。僕も、自分の技術力が及ぶなら(及ばない?)、バグレポートぐらいはしなくては、と思ってはいます。

THCanvasView・iMedia Browser

先日公開した Kaku の「イメージマネージャ」のデザインですが、特に、画像の一覧に NSTableView をまんま使っていることで、表示領域を無駄にしており、我ながら「アレ」かな、とは思っています。

ただ、それを改善するには、いまの僕の知識から考えると、膨大な勉強時間が必要で、そのために公開を遅らせたくない、という判断でしたが、一方で、他の優秀な人が、便利なライブラリを公開してくれるんじゃないか という期待も、実はあったのです。

そして、ちょうど最近、そんな 画像一覧表示に使えそうなライブラリ を二つ見つけたので、ご紹介したいと思います。

まだ「使ってみたいな」と狙っている段階ですので、本当に紹介だけですが、悪しからず(おい)。実際に使うことになれば、また改めて記事を書くかもしれません。

“THCanvasView・iMedia Browser” の続きを読む

Notes: NSTextView へのドロップ

この 記事 では、いろんなところでドラッグ&ドロップ操作ができるようにした、ということを書いていますが、いちばん対応に苦労したのが、NSTextView へのドロップ でした。

NSTextView のサブクラスで、独自形式の項目のドロップを受け付ける、あるいは、ドロップされた項目の処理を、独自に実装するには

障害になるのは、ドラッグ&ドロップを実装すること自体がちょっとややこしいことと、NSTextView が、標準でテキストやファイルのドロップに対応しているため、独自形式の項目をドロップできるようにするには、標準の実装を殺さないように、うまく立ち回らなくてはならないことです。

これにはみんな苦労しているようで、cocoa-dev ML には、やたらとこのテーマの質問が投稿されていますが、その中で本当に役に立った記事を紹介しておきます:

この記事では、必要な registerForDraggedTypes: をしていないこと、 (標準で対応している項目の処理方法を変えるのが目的のコードだからか。) ドロップされた項目を、標準の実装に任せるのか、自分で処理するのか判定する部分の効率が悪いこと、-performDragOperation: の部分で、呼び出すスーパークラスのメソッドが間違っている、など注意しなければならない点がありますが、基本的には、これに習えばちゃんと動くはずです。(まあ、その前にちゃんと動かなかったのは、書き方が適当すぎたからですが 汗)

カーソルの位置を、マウスポインタの位置に追従させるには

テキストエディタで文字列をドラッグしてみると分かりますが、標準では、NSTextView 内のカーソルの位置が、マウスポインタの位置に追従します。しかし、ドラッグされている項目の処理を自分で受け取ると、これが動作しないようです。

この場合、自分でカーソルの位置を再計算する必要がありますが、以下の記事に、そのためのコードが掲載されています:

あとは -draggingUpdated: の中などで、自分(NSTextView)に setSelectedRange: してやれば OK です。ただし、別のウィンドウなどからドラッグしてきた項目の場合は、まだカーソルの位置が見えないので、-draggingEntered: の中などで、自分を firstResponder にしてもらえばいいでしょう。