2009-05-24NVKColorToStringTransformerNVKColorToStringTransformerの紹介NVKColorToStringTransformerは、NSColorをNSStringに変換する値変換です。カラーピッカーで選んだ色の名前を表示する事ができます。右の図がサンプルプログラムのスクリーンショットです。カラーウェルをクリックするとカラーピッカーが現れますが、そこで色を選ぶと、その右に色の名前が現れます。NVKColorToStringTransformerは逆変換に対応しているため、名前から色に変換する事もできます。ポップアップボタンで色の名前を選ぶと、選択色が変わります。10.5.6で動作確認しています。10.3以降で動作すると思いますが、確認はしていません。ライセンスNVKColorToStringTransformerは無保証です。NVKColorToStringTransformerはクリエイティブコモンズライセンスのもとで公開します。原著作者のクレジットとしては以下の文を含めて下されば結構です。NVKColorToStringTransformerの原著作者:NovemberKou公開URL:http://www.novemberkou.com/RMWCD/sourceCode/NVKColorToStringTransformer.htmlダウンロードNVKColorToStringTransformerのソースコードと関連ファイルをダウンロードするには下記のリンクをクリックして下さい。Ver.1.0NVKColorToStringTransformerを含んだサンプルプログラムのソースコードをダウンロードするには下記のリンクをクリックして下さい。NVKColorToStringTransformerサンプルプログラム使い方NVKColorToStringTransformerを使う手順を説明します。ソースファイルを自分のプロジェクトにコピーするダウンロードしたファイルを解凍してできたフォルダの中には二つのファイルと二つのフォルダが入っています。全てのファイルをあなたのプロジェクトにコピーして下さい。「グループとファイル」の追加したい場所で右クリックして「追加」ー「既存のファイル」を実行します。全てのファイルを選択して「追加」ボタンを押して下さい。コマンドキーを押しながらクリックしていけば複数のファイルを選択できます。NVKColorToStringTransformerを登録する値変換なので事前に登録する必要があります。登録はアプリケーションが起動するプロセスのできるだけ早い段階がよいのですが、下記リンクの情報によるとアプリケーションのデリゲートとなるオブジェクトのinitializeメソッドで登録するのが普通の様です。TransformerサンプルプログラムではAppControllerというクラスをアプリケーションのデリゲートとしています。このinitializeメソッドで以下の様に登録しています。バインディングの設定で、値変換として上記登録名を指定するあとはバインディングの設定をする時に、値変換として上記の登録名を指定すればOKです。サンプルプログラムでは、テキストフィールドのバインディング設定は右の様になっています。注意すべき点が一つあります。NSColorクラスのインスタンスにバインドしているのか、それともNSColorをアーカイブしたNSDataクラスのインスタンスにバインドしているのかを意識する必要があるという事です。サンプルプログラムではNSColorをアーカイブしたNSDataクラスのインスタンスにバインドしています。NSDataにわざわざ変換しているのは、データをユーザデフォルトに保存しているためです。デフォルトデータベースはNSColorを直接取り扱う事ができないので、NSDataに変換する必要があるのです。そのような事情があるため、サンプルプログラムのカラーウェルのバインディング設定は右の様になっています。値変換としてNSUnarchiveFromDataを指定する事でNSDataに変換しています。同じ事がCoreDataを使う場合でも起こります。NSColorは非標準属性なので、永続化する際にNSDataに変換する必要があるのです。以上のような状況を考えて、NVKColorToStringTransformerはNSColorをアーカイブしたNSDataクラスのインスタンスにバインドしている事を想定して、これをデフォルトの動作としています。NSColorクラスのインスタンスにバインドしている場合は、NVKColorToStringTransformerクラスのインスタンスにsetArchive:NOというメッセージを送って下さい。setValueTransformer:colorToStringforName:@"NVKColorToString"];}クレヨンカラーリストを優先するNVKColorToStringTransformerは有効なカラーリストの色をしらみつぶしにチェックして、色が一致したらその名前を返す動作をしています。複数のカラーリストで色が重複していなければよいのですが、AppleカラーリストとCrayonsカラーリストでは幾つか重複する色が見られます。したがってクレヨンカラーピッカーで「サクランボ」を選んでいるのに、NVKColorToStringTransformerが「レッド」を返してくるという事が起こります。クレヨンカラーリストを優先してチェックする場合はNVKColorToStringTransformerクラスのインスタンスにsetCrayonsFirst:YESというメッセージを送ります。優先順位を特に指定しない場合はsetCrayonsFirst:NOというメッセージを送ります。デフォルトではYESになっています。名前のついた色の名前をタイトルにしたメニューを作るNVKColorToStringTransformerのクラスメソッドにmenuFromColorLists:というものがあります。これは引数で指定された名前のカラーリストに含まれる色の名前をタイトルにしたメニューを返すユーティリティメソッドです。サンプルプログラムではこのメソッドを使ってポップアップボタンにメニューをセットしています。Builderではなくプログラムで行なっています。Builderで設定すると、起動時に必ず最初の項目が選択されてしまう不具合が発生したための対策です。