ページ

2009年10月29日木曜日

Safari用独自プラグインを作る(12) - ツールバーを追加する #1

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

(前回)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ピクセル)。


(続く)