(前回)Cocoaの日々: Safari用独自プラグインを作る(11) - スクリーンショットを撮る
コンテキストメニューの次はツールバーを Safariへ追加してみることにする。
Evernote プラグインの場合、インストール直後から現れる。
カスタマイズも他のボタンと同じ様に扱える。
ただ Safari のウィンドウが表示された後、少し経ってからボタンが表示されるようになる。これはプラグイン読み込みのタイミングが Safari全体の初期化の最後の方になるからかもしれない。
ツールバーの追加について、今度は Evernote プラグインのヘッダファイルを参照してみる。
Cocoaの日々: Safari用独自プラグインを作る(7) - Evernote を class-dump する
ENSafariToolbarSwizzler.h
@interface ENSafariToolbarSwizzler : ENSwizzlerHelper { } + (BOOL)muckWithThisToolbar:(id)arg1; + (void)createSharedInstance; - (BOOL)toolbarContainsElephant:(id)arg1; - (void)insertElephantIntoToolbar:(id)arg1; - (void)setupToolbars; - (id)init; - (id)toolbarDefaultItemIdentifiers:(id)arg1; - (id)toolbarAllowedItemIdentifiers:(id)arg1; - (id)toolbar:(id)arg1 itemForItemIdentifier:(id)arg2 willBeInsertedIntoToolbar:(BOOL)arg3; - (void)elephantToolbarButtonAction:(id)arg1; @end
これらのメソッドのうち、toolbar で始まるメソッドは NSToolbarDelegate で定義されているメソッド。
Mac Dev Center: NSToolbarDelegate Protocol Reference
通常ツールバーを作る場合はこの3つのメソッドを実装してやれば良い。
一方、Safari の方で NSToolbarDelegate を実装しているクラスを探すと ToolbarController.h が見つかった。
ToolbarController.h
@interface ToolbarController : NSObject{ :
このクラスでは NSToolbarDelegate のメソッドの他、ボタン毎に定義された(恐らくプライベートな)メソッドが用意されている。
- (id)toolbarDefaultItemIdentifiers:(id)arg1; - (id)toolbarAllowedItemIdentifiers:(id)arg1; - (id)toolbar:(id)arg1 itemForItemIdentifier:(id)arg2 willBeInsertedIntoToolbar:(BOOL)arg3; - (id)_toolbarItemForBackForward:(BOOL)arg1; - (void)_prepareBackForwardSegmentedControl:(id)arg1; - (id)_toolbarItemForInputFields:(BOOL)arg1 attachedButton:(BOOL)arg2; - (id)_toolbarItemForReportBug:(BOOL)arg1; - (id)_toolbarItemForAutoFill:(BOOL)arg1; - (id)_toolbarItemForTopSites:(BOOL)arg1; - (id)_toolbarItemForHome:(BOOL)arg1; - (id)_toolbarItemForTextSize:(BOOL)arg1; - (id)_toolbarItemForDetachedAddBookmark:(BOOL)arg1; - (id)_toolbarItemForBookmarks:(BOOL)arg1; - (id)_toolbarItemForHistory:(BOOL)arg1; - (id)_toolbarItemForMailWebPage:(BOOL)arg1; - (id)_toolbarItemForShowDownloadsWindow:(BOOL)arg1;- (id)_toolbarItemForShowWebInspector:(BOOL)arg1; - (id)_toolbarItemForBookmarksBar:(BOOL)arg1;- (id)_toolbarItemForNewTab:(BOOL)arg1; - (void)_prepareTextSizeSegmentedControl:(id)arg1; - (id)_toolbarItemForPrint:(BOOL)arg1; - (id)_toolbarItemForWebClip:(BOOL)arg1; :
今回は、NSToolbarDelegateの3つのメソッドを置き換えてみることにする。
なおツールバー用の画像を用意する必要があるが、Evernoteプラグインはこんな感じ(Resourcesフォルダ内、TIFF、18x18ピクセル)。
(続く)