Yoshiki(DreamField)パネルを表示しよう(その10)前回までで、メインウィンドウが切り替わる度にパネルの表示も切り替わるようになりました。思ったのではないかと思います。実は、自分で通知しなくても、フレームワークは様々な通知を行っており、プログラムではこれを自由に活用できます。NSWindowクラスのリファレンスの下の方に、Notificationsという項目がありますので、見てください。NSWindowDidBecomeMainNotificationの説明もここにあります。入門書はこれを使っていますし、私も最初の頃はこれを使っていました。入門書では、メインウィンドウが切り替わった時のことは書いてありますが、最初にパネルを開いた時や、メインウィンドウがまったく無くなった時の説明がおざなりになっていることが多いです。思うようになりました。それに、情報が変化したという通知ですから、メインウィンドウが切り替わったというのとは、ちょっと意味合いが異なります。今はたまたまメインウィンドウが切り替わった時しか情報が変化していませんが、そうで無い場合でも対応できるというわけです。これが正解というわけではありませんので(と、言うより、多分正解は無いのですが)、一般的な入門書に書いてある、(おそらくは)正当である方法も一読することをお勧めします。今の話にも出て来ましたが、現在の実装では全ての画像を閉じて、メインウィンドウが無くなった時の事が考慮されていません。その場合は、最後に開いていた画像の値が表示されたままになってしまいます。これをクリアするようにしましょう。この処理はどこに組み込めば良いでしょうか。全てのドキュメントが閉じられた時に、それを知ることが出来るのは誰でしょう。単純に考えると、それは全てのドキュメントを生成しているオブジェクトですね。Applicationの構造」で説明しましたが、それが何であるのかは今まで説明していませんでした。Applicationを選んだ場合、これはNSDocumentControllerクラスのインスタンスオブジェクトが行っています。これのリファレンスを見てみましょう。開いているドキュメントの数が0になった時に呼ばれるメソッドがあれば、パネルをクリアする処理を組み込むのは簡単だったのですが、残念ながらそういうのは無いようです。ドキュメントを閉じる処理に組み込むことを考えたらどうでしょうか。ドキュメントを閉じる処理は、removeDocument:というメソッドで行っています。言うことは、これをオーバーライドし、ドキュメントを閉じた後に残りのドキュメントの数を数え、これが0になっていた時にパネルの値をクリアするようにすれば、望みの動作になるはずです。これを実装して行きましょう。NSDocumentControllerクラスを継承したMyDocumentControllerクラスを作ります。MyDocumentController.hとMyDocumentController.mをTinyViewのプロジェクトに加えてください。MyDocumentController.hを次の様に書き直してください。*)document;@end続けてMyDocumentController.mを次の様に書き直して下さい。}}@end順番に見て行きましょう。removeDocument:document];まず、removeDocument:本来の処理を行わなければなりませんから、superクラスにremoveDocument:メッセージを投げています。0){その後、自分にdocumentsメッセージを投げてドキュメントを管理しているNSArrayクラスのインスタンスを教えてもらい、これに対してcountメッセージを投げてドキュメントの数を教えてもらっています。これが0の時に、以下の処理を行います。sharedImageInfo];imageInfoは第43回に出て来ました。皆が共有して使用する、メインウィンドウのイメージの情報をセットするオブジェクトです。setImageSize:NSZeroSize];これに画像の縦横のサイズとして、0サイズをセットしています。change];そしてchangeメッセージを投げて、「情報が変わったぞ」という通知を行ってもらいます。これで、ドキュメントの数が0になった時に、パネルに表示される値は0になるはずです。ところで、せっかくコーディングしたMyDocumentControllerクラスですが、これをインスタンス化するのはどうすれば良いのでしょうか。フレームワークはアプリの起動時に、勝手にNSDocumentControllerクラスをインスタンス化してしまっています。これをMyDocumentControllerクラスにすげ替えなければなりません。実はこれは、第25回で行ったことの応用で出来ます。その説明は、次回行います。#44今の指導要領ではもしかすると男女差別だとか言ってなくなってしまったかも知れぬが,ワタシが中学生の頃には「技術・家庭」という授業があって,男子は製図や木工,ハンダ付けなどをやり,同じ時間に女子が裁縫とか料理とかを勉強していた。ワタシの行ってた中学にはこの科目,しかも男子向けだけに結構でかい建物がひとつあって(昨年11月に帰省してみたら跡形もなくなってたが),そこに何台か旋盤がおいてあった。中学何年生の時だったかは憶えてないが、われわれは授業で旋盤の使い方を教わり、確かタオルハンガーみたいなものを各自一つずつ作ったはずだ。あ、もしかすると知らないヒトもいるかも知れないので説明すると、旋盤というのは金属を削る機械である。基本的には削りたい金属を回転する軸に固定し、横から刃物(バイトと言う)をあててシュルシュルシュルと削る。構造としては100円くらいの鉛筆削りと同じだ(高い鉛筆削りは鉛筆の方を固定している)。金属の削りかすがクルクルクルと丸まって光る。なんつうか、これまた叱られるかもしれないが「男の機械」という感じの機械なんである。それで思い出したが、「巨人の星」と同じ梶原一騎・川崎のぼるコンビで「男の条件」というマンガがあって、これの主人公が名前は忘れたけど旋盤工だった。自分たちと同じ旋盤工が主人公の根性マンガがあって愛読しているんだが、それに描かれた旋盤の形がウソッパチであることを悲しみ、マンガ家のところに「本物の旋盤を見に来てくれ」と頼みに行く。その旋盤を描いたのは自分と同年代のスカしたアシスタントで「そんな機械、それらしく見えればいいんだ」とぬかす。怒った主人公は「本物を描いてやる」と旋盤工を辞めてマンガ家を志す......って書いてみるとちととんでもない話だが、このマンガの影響もあって、少年フジモトは旋盤の授業が好きであったのです。その旋盤工を50年務めた小関智弘というヒトが書いた「職人学」という本があって、「イメージできないから見積もりをふっかける」という話がでて来る。「図面を見て、どんな段取りをするか、どんな治具(製品を作る過程で使われる製品以外の製作物、プログラマが作るツールに近いか)を作って加工すべきか、それにはどれくらいの時間が必要かを適確にイメ−ジできる工場でないと」いけないのだ、という。この話、ソフトウェアも全く同じだと思うのだ。クライアントの要求する仕様を聞き、それを実現するためのおおまかな方法を頭の中で組み立てる。可能か可能でないかを判断し、可能であれば自分のスキルやスケジュール、その他諸々を勘案してどのくらいの期間が必要かを考え、最後にそれに対して要求したい報酬の額を計算する。ないといけない、というか、そうであるのが当たり前だと思いませんか。ところが現実は全然そうぢゃない。プログラミング仕事は基本的に一品料理なのに、マクドナルドみたいな見積もりしかできないSEばっかりだ。あ、データベースですか、データベースの構築でしたらウチでは予想される総件数に応じていくらいくらとお勉強させていただいております。はい、メンテナンスはまた別契約で。こちらWEBアンドDBのセットがお得になっております、はい。ええ、それはもう当社には優秀なエンジニアが揃っておりますから。いえいえ情報の流出など絶対にございません。WEBアンドDBのセットで最大件数10,000件までのコースですね。定期メンテナンスは月単位、はい。......それで、お飲物はよろしいでしょうか?絶対こんなヤツにプログラムを頼んぢゃいけません。(2004_04_024)高橋真人の「プログラミング指南」第43回オブジェクト指向のとっかかり(29)こんにちは、高橋真人です。前回新しく書き直したプログラムの解説を始めましょう。今回のプログラムの全体的なコンセプトを説明します。このプログラムは「改行コードの変換プログラム」ということで作っています。改良前のバージョンでは「入力ファイルの改行はMac(CR)でなければならない」ことや「書き出し時の改行コードは、コンパイル時に指定したものに固定」ということで、実用的だとはどうあがいても言い難いものでした(笑)。今回の書き直しによって、改行コードに関しては読み込み時も書き出し時も柔軟に対応できるようになりました。(ただし、文字コードに関してはシフトJISに限定)まずユーザーにファイル名を指定させることによって入力ファイルを決定します。あとは、プログラム自体がファイルのデータを解析することによって、改行コードを識別するようになっています。ファイルの内容は、TextContentクラスのサブクラスのうちのいずれかの中に格納されるのですが、これらのクラスの違いは「改行コードが何であるのか」だけです。前回のプログラムでは書き出す、つまり変換後の改行コードの種類によって生成するサブクラスのインスタンスを切り替えていましたが、今回は読み込み時にも別のインスタンスを生成しています。処理の流れを箇条書きにすると、以下のようになります。変換後の改行コードに従って、新たなインスタンスを生成。書き出し処理つまり、2と5において別々のサブクラスから(同じサブクラスでは変換する意味がないので)新規にインスタンスが生成され、それらが改行コード以外のファイルの中身を受け渡すのです。前バージョンにおいては、実装ファイルがからっぽでサブクラスのためのプレースホルダ的な役割しか果たしていなかったTextContentクラスですが、今回のバージョンにおいてはずいぶん活躍しています(笑)。サブクラスの方が単に「改行コードの保持」という役割ぐらいしか担わなくなって、ファイルからの読み込み、書き出し処理に関しては、TextContentクラスが中心となって処理を行っているのです。それでは、次回から細部に目を転じて解説していきます。ナビゲーション(2004/04/23)【開発環境】Apple社からWWDC2004におけるカンファレンスのスケジュールが発表されました。...内容未定)と記されているセッションの数が多いような気がします。したセッションが、現状では発表できないような新しい話題を提供するためにキープされているのなら大歓迎ですが、単にネタ不足からそうなっているだけであれば寂しいかぎりです(笑)。前号でも紹介しましたが、WWDC2004の参加費用の早期割引($300引き)は4月30日までです。参加を予定されている方は忘れないように登録いたしましょう。X」の取り扱いを開始しました。政府機関の購入者で$300、教育関係者だと$200だそうです。筆者が予想していたよりも安く提供されるようです(学生に戻りたい...)。これにより「WWDC2004でXcodeへの無料バンドルが発表!」という筆者の夢は、はかなく消えてしまいました(笑)。コンパイラの仕様には、Apple社のXcodeに対応していることが明記されていますので、USでの購入者が、実際の使用感やベンチマークなどをウェブで紹介してくれると嬉しいですね。早期に日本での販売元が決まることを期待したいと思います。前回から4月23日の期間中、Apple社のDeveloperサイトにはドキュメントが5つ登録されました。すべて4月に発表された新製品に関するハードウェア仕様書です。前回の機種と比較すると、AirMacなどのオプションもディフォルトとなり、随分と価格が抑えられていることが分かります。G4も3代目は「名品」でしたので(と筆者は思う)、ポータブルマシンの買い換え時期の方は、今回が狙い目かもしれません。G5の方は、今のところ発表される雰囲気がないようですしね(油断大敵)。Proについての解説が登録されています。Format」(読み物)http://developer.apple.com/appleapplications/fcpxml.html前回から4月23日の期間中、新規のテクニカルノートとテクニカルQ&Aはひとつも登録されませんでした。Codeサイトにはサンプルソースコードが3つ登録されました。DiscRecording関連が2つ含まれていますが、今回は、3つとも新作のサンプルソースコードとなっています。前回から4月23日の期間中、Apple社のSDKサイトにはひとつもSDKが登録されませんでした。OSは米国アップルコンピュータ社の登録商標です。そのほかの各製品名等はそれぞれ各社の商標ならびに登録商標です。このメールの再配信、および掲載された記事の無断転載を禁じます。Artistsアクセスリンクについて個人情報の取り扱いについて支援のお願いお問い合せこのサイトに掲載されている文章、画像を含む一切のデータの無断転載を禁止します。