Readmeじゃないよ 9

■20020505

どうも、忙しくなったり、個人的なイベントが続いたりすると、すぐにそっちにかかりきりになっちゃう。4月は結局、MorePasteに手を付けられなかった。しようがないね、全くさ。1ヶ月もあいちゃうと、思い出すだけで時間がかかるし。

日付と時刻をペーストするDateTimeのプラグインの続き。小さな画面にUIの部品を押し込むのに苦労して、イマイチ、納得はできていないんだけど、でもまぁ、何とか形にはなった。後は、プロパティファイルへの書き出しの処理を作ればいいところまで来ていて。

書き出しの処理で、ちょっと他と違うのは、Mapで管理しているデータを書き出すってこと。日付と時刻のフォーマットは、エディットのできるコンボボックスで選択と追加ができるようになっていて。リストに無いパターンをエディットすればそれが追加される。さらに、リストのそれぞれについて、ロケールをポップアップで指定できるようになっていて、フォーマットをキーに、ロケールの対応関係をMapで管理しているというわけ。

Mapがそのまま書き出せれば一番いいんだけど、結局、同じインデックスを持たせて、フォーマットとロケールをバラバラに書き出すことにした。プロパティのファイルに問題が起きて、インデックスがずれたりしたら、どうするかってのは、考えないことにしよう。とりあえずは、あとでプログラムを見て理解できるか、ってのが一番の問題かね。うーん。

ところで、プロパティのアップデート処理で、バグを発見。プロパティファイルの読み出しは、MorePasteの起動時にだけ実施していて、そのときにアップデート処理は呼び出されるんだけど。実は、プロパティのタブで、改行文字の指定を変更したときにも同じ処理を呼ぶようにしてる。で、アップデート処理のところに、初期化の処理を埋め込んでいるところがあって、それは当然、プロパティのタブの変更でも呼ばれちゃう。これは、マズいね。どうしたものか。

■20020506

バグの解決。アップデートの処理は、内部で分岐するように、形式をそろえてプログラムを書くようにしている。分岐の一方は、プロパティファイルから読み出した場合しか呼び出されないのを思い出した。あんまり意識してなかったんだけど、起動時の処理かどうかの分岐を組み込んでいたわけ。今までは、埋め込んじゃった初期化の処理は、分岐の外に書いていて、分岐と関係なく呼び出されちゃっていたんだけど、中に書けば問題なくなる。

この辺の仕組みは、Observer-ObservableとPropertiesを組み合わせて作っていて。プロパティファイルは、保存するデータを書き出すのに、それぞれのプラグインで重複しないように識別子を付けているし、updateを呼び出すためのnotifyObserversの引数にはこの識別子を渡したりしている。

Observerを実装している全てのプラグインでupdateは呼び出されちゃうけど、識別子を見れば、自分の更新処理かどうかわかる。一方で、プロパティファイルから前回の状態を復元するときは、すべてのプラグインに更新をかけるために、引数のないnotifyObserversを呼んで、識別子を渡さないで処理するようにしてる。

なんとか、つじつまが合った、って感じ。

ところでここのところ、apache.orgのstrutsのドキュメントを読んだりしてた。Webサイトのリンク集のページをどうやって作ろうか考えていたからで、サーバサイドのプログラム開発と言うよりは、htmlの生成とデータ管理が目的というところ。XMLで関連を定義していくって作りは、MorePasteを1.4ベースにしたら、取り入れるかね。

■20020512

なんだかんだで、日付と時刻のタブには時間がかかっちゃってる。そろそろ、次のに取りかからないとな。とはいっても、気になるところは、気になるし。

日付と時刻のペーストは、置き換え型の処理として作っているんだけど。つまり、それが呼ばれたときのクリップボードの中身を問答無用で破棄して、日付とか時刻に置き換えちゃうわけ。一方で、引用符の張り込みとか、タブの変換なんかは、クリップボードの中身を編集するタイプの処理をする。

日付時刻を張り込むのは、システムの日時になるんだけど、これを何とか、クリップボードの中身からとれないかと考えてみた。さすがに、クリップボード内の文章の日付を全部、フォーマットし直して置き換える、ってのはちょっとどうかと思うんだけど。

文字列をパースして、Date型を取り出すことはできるんだけど、そのメソッドは、DateFormatクラスに含まれる。つまり、予めフォーマットのパターンで初期化されてるDateFormatが、自分のパターンに合わせてパースしてみて、合えば、Dateのインスタンスが取り出せるというわけ。どんなパターンが来るかわからないような場合には、ちょっと、使えない。やっぱり、無理ってことかね。うーん。

ところで、開発の環境に変化が。OSがXPのProfessionalになった。なんか、いろいろ動作上おかしなところもあるけど、とりあえずは問題なく動いてる。しかし、メモリが128Mってのは、そろそろなんとかしないとマズイな。C#なんかも入れて、だんだん、無節操になってきたし。

■20020518

さてさて、この前から、APIドキュメントを作るべく、いろいろとソースにコメントを書き始めた。javadocコマンドを使ったのは久しぶりなんだけど、なんだかよくできてる。JavaSoftのWebサイトにあるオンラインでアクセスできるAPIドキュメントにリンクすることもできるし。Stringとかのクラス名は、リンクしないとパッケージ名を含めた長ったらしい記述になっちゃうんだけど、リンクするとクラス名だけになるんだよね。見た目は、全くすっきりする。まぁ、サイトの構造が変わっちゃったりすると、どうしようもないんだけどさ。

MorePasteのAPIドキュメントは、2種類作っていて、プライベートな宣言の載っているものといないもの。通常の目的だと、プライベートな宣言なんて、外から呼び出せないから、載せる必要なんてないんだけど、少しでもソースの理解を助けるため、ということで。しかし、コードを書いている時期の違いなんかもあるんだけど、変数名とか統一感もなにもあったもんじゃないね。どうしたものか。

コメントを書いていて、最近いじっていないクラスの記述で困った。DropAccepterというクラスで、Drag & Dropを簡単に実現できるように作ったクラスなんだけど。ほかのアプリケーションから、テキストをDragして、MorePasteにDropすると変換されちゃう、という。まぁ、Windowsだと、あんまりこういう使い方はしないと思うんだけど、Macなんかだとよく使うからね。

以前は、JavaのDrag & Dropの問題として、複数のコンポーネントが重なっているときに、一番上のコンポーネントにしか、Dropできない、ってのがあったと思ったんだよね。コンポーネント間のイベント搬送の仕様だったんだと思うんだけど。試してみたら重なっていてもちゃんと動く。なんだろ、JTabbedPaneというか、JComponentの仕様が変わったのかね。理由はわからないけど、いいこと、ということで。

おしまい
Mail to author Mail to author. Top of this page.

[This page was updated: 2003-04-13 ]

 

 
Copyright © 2001-2003 Takashi KOBAYASHI. All Rights Reserved.