タイトル鶴薗賢吾のCocoaはやっぱり!出張版》#6 - ツールバー(5)カテゴリーユーザインタフェース, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
作成日2001/12/17 22:59:7作成者新居雅行
―――――ツールバーの初期化

 ̄ ̄ ̄起動時の処理の概要___

ツールバーを初期化するコードは、awakeFromNibに書かれています。アプリケーションが起動した時にMainMenu.nibが読み込みまれますが、その時に、その中に含まれるインスタンスのawakeFromNibが実行されます。

◇Controller.m → awakeFromNib

- (void) awakeFromNib {
: 省略
NSToolbar *toolbar = [ [ [ NSToolbar alloc ]
initWithIdentifier : @"myToolbar" ]
autorelease ]; // ツールバーを作成
// アイテム辞書作成
toolbarItems = [ [ NSMutableDictionary dictionary ] retain ];

// ツールバーアイテムを辞書(toolbarItems)に登録
addToolbarItem( … 省略 … ); // Font Style
addToolbarItem( … 省略 … ); // Font Size
addToolbarItem( … 省略 … ); // Blue Text

// ツールバーの属性をセット
[ toolbar setDelegate : self ]; // デリゲートをセット
[ toolbar setAllowsUserCustomization : YES ]; // 設定パレットを使う
[ toolbar setAutosavesConfiguration : YES ]; // 設定の自動保存をする
[ toolbar setDisplayMode : NSToolbarDisplayModeIconOnly ]; // 表示モード設定

[ theWindow setToolbar : toolbar ]; // ツールバーをウィンドウにセット
: 省略
}

順に細かく見ていきましょう。まず、最初にツールバーのインスタンスを作っています。これを後程ウィンドウにセットします。allocで生成してinitWithIdentifier : で初期化しています。

NSToolbar *toolbar = [ [ [ NSToolbar alloc ]
initWithIdentifier : @"myToolbar" ]
autorelease ]; // ツールバーを作成

initWithIdentifier : は、名前のとおり識別子で初期化をします。ツールバーアイテムにも識別子がありましたが、ツールバーにも識別子があります。Mailのように、受信メールのウィンドウとメール作成ウィンドウで異なるツールバーを使用する場合もありますが、識別子を使うことで、どちらのツールバーかが識別できます。

 ★ NSToolbar : 識別子を指定して初期化
  [書式] - (id) initWithIdentifier : (NSString *) identifier
  [入力] identifier : ツールバーの識別子
  [出力] 返り値 : 初期化したNSToolbar

次は、全てのツールバーアイテムを入れておくための辞書toolbarItemsを作成します。その後ろでaddToolbarItemをいう関数を3回呼んでいますが、このaddToolbarItemの中でNSToolbarItemを作成してtoolbarItemsに登録を行っています。ここは、addToolbarItemと合わせて後程説明します。

// アイテム辞書作成
toolbarItems = [ [ NSMutableDictionary dictionary ] retain ];

// ツールバーアイテムを辞書(toolbarItems)に登録
addToolbarItem( … 省略 … ); // Font Style
addToolbarItem( … 省略 … ); // Font Size
addToolbarItem( … 省略 … ); // Blue Text

ツールバーアイテムの辞書が出来たところで、setDelegate : でデリゲートを自分自身にセットします。setAllowsUserCustomization : でユーザーに設定パレットを使わせるかどうかを指定します。常に同じツールバーを表示してカスタマイズさせないのであればNOでも構いませんが、通常はYESでいいでしょう。続いて、setAutosavesConfiguration : でツールバーのカスタマイズ状態の自動保存をするかどうかを指定します。こちらも特殊な処理をしない限りはYESでよいでしょう。

// ツールバーの属性をセット
[ toolbar setDelegate : self ]; // デリゲートをセット
[ toolbar setAllowsUserCustomization : YES ]; // 設定パレットを使う
[ toolbar setAutosavesConfiguration : YES ]; // 設定の自動保存をする
[ toolbar setDisplayMode : NSToolbarDisplayModeIconOnly ]; // 表示モード設定

[ theWindow setToolbar : toolbar ]; // ツールバーをウィンドウにセット

そして、setDisplayMode : でデフォルトの表示モードを指定します。表示モードの指定は以下のようになっています。

◇NSToolbar : 表示モード

typedef enum {
NSToolbarDisplayModeDefault,
NSToolbarDisplayModeIconAndLabel, // Icon & Text
NSToolbarDisplayModeIconOnly, // Icon Only
NSToolbarDisplayModeLabelOnly // Text Only
} NSToolbarDisplayMode;

最後に、setToolbar : でウィンドウにツールバーをセットします。setToolbar : をすると、セットしようとしたツールバーの識別子を見て、アプリケーションの環境設定ファイルの中にそのツールバーのカスタマイズ状態が記録されているかをチェックします。記録されていればその状態を再現しますし、無ければデフォルトセットをツールバーに表示します。環境設定ファイルが無い場合もデフォルトセットを表示します。ただし、この自動処理は、setAutosavesConfiguration : でYESを指定している時に限られます。

ちなみに、環境設定ファイルには以下のような内容が書き込まれます。

/Users//Library/ToolbarSample.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>NSToolbar Configuration myToolbar</key>
<dict>
<key>TB Display Mode</key>
<integer>1</integer>
<key>TB Is Shown</key>
<integer>1</integer>
<key>TB Item Identifiers</key>
<array>
<string>FontStyle</string>
<string>FontSize</string>
<string>NSToolbarSeparatorItem</string>
<string>BlueLetter</string>
<string>NSToolbarPrintItem</string>
</array>
<key>TB Size Mode</key>
<integer>1</integer>
</dict>
<key>NSWindow Frame NSFontPanel</key>
<string>603 269 300 221 0 0 1152 746 </string>
</dict>
</plist>

(この項続く)
[鶴薗賢吾]
関連リンクCocoaはやっぱり!