goo blog サービス終了のお知らせ 

Hironytic Status

ひろんの開発日誌

[CoveredCalc for BeOS] 表示しないウィンドウ

2004-09-16 13:06:26 | 開発状況
ここ数日(と言っても 1 日に数十分しかかけてないけど)初期状態では表示しないウィンドウをどうやって生成したらいいのか悩んでました。
BWindow はコンストラクタで生成した時点では、ウィンドウも非表示だし、そもそもスレッドが開始しておらずメッセージループも回っていません。また、コンストラクタを呼び出したスレッドによってロックされた状態になっています。
初回の Show() を呼び出すことで、スレッドが開始し、それによってメッセージループが回ります。また、ロックも解除されます。

しかし、カバーブラウザウィンドウは生成したあと、すぐには表示したくなかったのです。
(ユーザの操作によって表示状態の切り替えを行うので。デフォルトは非表示です。)

1) 生成時、Show() を呼ばずに放っておく。

→ ユーザの操作で Show() を呼び出すと、ウィンドウを生成したスレッド(今回の場合、BApplication のスレッド)とユーザの操作によるメッセージを受信したウィンドウのスレッドが違うので、初回の Show() で行われるロック解除に失敗しました。

2) 生成時、Show() を呼ばずに、Unlock() してみる。

→ ユーザの操作で Show() を呼び出すと、結局、ユーザの操作によるメッセージを受信したウィンドウのスレッドがロックしてないので、初回の Show() で行われるロック解除に失敗しました。

3) 生成時、Show() を呼ばずに、Unlock() して、Show() するときに初回であればロックする。

→ 初回の Show() かどうかを自分で判断しなければならないわけで、…それはイヤ。(試してません)

4) 生成時、Show() を呼ばずに、Run() を呼んでやる。(呼ぶなと Be Book に書いてあった気がするが)

→ ユーザの操作で Show() を呼び出してもうまくいった。…かのように見えたのですが、そのウィンドウのスレッド名に "w>" がついてません。通常は初回の Show() が何かやってるに違いありません。他の影響もまだ見えてないだけで、いずれ問題になりそうなので却下。

5) 【解決】生成時、一度 Hide() を呼んでから Show() を呼んでやる。

→ Hide() と Show() はカウンタを持っているので、Hide() → Show() だと、それをする前と同じ状態になります。つまり、非表示状態のままです。でも、その Show() は初回の Show() として認識されるようで、"w>" 付きのスレッドも生成されるし、ロックも解除されたようです。

とりあえず、これで解決できた、と思っています。

[CoveredCalc for BeOS] UI をどうしようかな

2004-09-06 21:12:15 | 開発状況
ビルドは少し前に通るようになりました。
ビルドが通ったからといって、ウィンドウやビューにやってきたメッセージをハンドリングする部分を実装しないと意味がないのでした。

というわけで、キーボードのハンドリングとマウス右クリックのハンドリングを行うことで、キーボードによる電卓上のキーの入力とマウス右クリックのコンテキストメニューが出るようになりました。
コンテキストメニューの方は、[最小化] と [閉じる] は動きますが、[カバーブラウザ] や [バージョン情報] が動きません。

ここで、カバーブラウザもバージョン情報もウィンドウの UI を作る必要があるので、InterfaceElements などのツールを使いたいところです。さて何を使おうかと…。

さらに、Windows 版のカバーブラウザでは、カバーの一覧部分に列のあるリスト(OS 標準の List-View Control)を使っているんですが、BeOS だと標準では提供されていません。
自分で一から実装するのは大変なので、ググってみると Santa's gift bag の ColumnListView を使うか、Vision のソースに含まれている BColumnListView を使うという選択肢があるようです。
それと、もう一つ、カバー名と説明くらいしか表示してないんだから、幅固定で単なる BListView を使うというのもあります。
ちょっとこのあたりで悩み中…。

[CoveredCalc for BeOS] ビルドを通すのが大変

2004-08-29 01:06:03 | 開発状況
BeOS 版の CoveredCalc を Windows 版 (ver 1.00) と同等レベルまで実装しようとしています。
基本的には OS に特化する部分はクラスを切り離して設計してあるので、Windows 版で行った実装が BeOS 版にも適用されます。つまり、OS に特化する部分だけ作ればいいはずです。

ただし、それらのクラスが実装できていない現状でもそれらのクラスを参照するコードは既にあるわけで、ビルドすると大量のエラーが…(まあ、予想していたことですが)。
ビルドが通るようになった頃には、BeOS 版も割とまともに動くようになった頃だということで、ビルドエラーを片っ端からつぶしていく作業が続きそうです。

[CoveredCalc] ver 1.00 リリース

2004-08-21 00:13:43 | 開発状況
CoveredCalc for Windows の ver 1.00 をリリースしました。
会社の仕事が、これから新しいプロジェクトに参加する予定になっていて、どうも忙しくなりそうな感じなので急いでリリースしておきました。
それだけに不具合がいっぱいありそうで不安です(ぉ

不具合や気付いたことなどありましたら、メールを送るなり、Exciteの方のブログのコメントに書くなりしてもらえるとありがたいです。

[CoveredCalc] リリース前のバグ

2004-08-20 01:00:07 | 開発状況
Windows 版の 1.00 リリースの準備(ドキュメント、Webサイトなど)を行おうとするとバグを見つけてしまいました。

一度起動して終了した後に、終了前に使っていたカバーを削除(アンインストール?)した場合、次に起動したときにそのカバーを使おうとして失敗し、カバーが読み込めない旨を表示したエラーメッセージが出てアプリケーションが終了してしまいます。
エラーメッセージ自体はまあいいとして、これでは次に起動してもやはり同じエラーメッセージが出るので起動できなくなってしまいます。

ユーザ側でできる対処は、終了時のカバーは設定ファイルに記述されているだけなので、それを消してやることです。一番簡単なのは、
設定フォルダ(Windows XP なら C:\Documents and Settings\<ユーザ名>\Application Data\Hironytic\CoveredCalc)にある Setting.xml を削除してしまえば起動できます。ウィンドウ位置などの他の設定は残したいなら、Setting.xml 中の /coveredcalcSettings/lastCoverDef タグと /coveredcalcSettings/lastCoverNo タグを削除してやれば OK です。

が、設定ファイルをユーザーが直接いじらないといけないのはよくないので、こういう場合は強制的にデフォルトカバーにすることにしました。デフォルトカバーの読み込みに失敗したら、それはもう失敗です。

簡単に修正できそうに思ってたんですが、ソースを見るとところどころ手直ししないといけないようで、面倒だったので 1.00 リリース後に修正することにしました。
実際、それほど面白みがないスキン電卓を使うユーザがもともと少なそうな上に、カバーが全くそろっていない 1.00 リリースで、それを使ってくれるユーザはほぼいないと思うので、なるべく早めに修正すればそれでいいだろうと思いました。

[CoveredCalc] ビジュアル重視?

2004-08-06 00:16:30 | 開発状況
徐々にどうでもいいようなところを修正中です。

XP ビジュアルスタイルに対応させるために、comctl32.dll のバージョン 6 の利用を明記したマニフェストファイルをリソースに埋め込みました。
さらに、バージョン情報ダイアログにアイコンイメージの大きめの画像を貼り付けました。

[CoveredCalc] 1.00 リリースに向けて

2004-08-01 23:06:01 | 開発状況
まだまだ実装したい機能などいっぱいあるのですが、とりあえず電卓として普通の四則演算くらいはできるようになってきたので、いったん 1.00 としてリリースすることにしました。
いきなり 1.00 っていうのもどうかと思いますが、どこまでの機能を実装した段階で 1.00 だというようなプロジェクト管理を行っていない趣味アプリなのでなんでもありです。

Surviveplus.net の SHIN-ICHI さんに依頼していたアイコンの完成版が送られてきたので、そのアイコンを使うようにしてみました。
その他、Windows 95 で動くかどうか動作確認とか(ちなみに動きません)そういうのも行いながら、少しずつ完成に向けて修正してます。

あとはドキュメントも少しずつ作ってます。っていうほどの量はないんですけど。
予定では 7 ~ 8 月公開でしたが、8 月中に公開できるかなぁ?

なお、すべて Windows 版の話です。

[CoveredCalc] カバー定義の必須チェック

2004-04-25 13:26:31 | 開発状況
ツールチップ対応は面倒そうだったので後回しにしました。(^^;

代わりにカバー(スキン)定義ファイルのチェックを少し。
カバー定義は XML ファイルなんですが、これまでは必ず記述されていなければならないタグや、タグの属性のチェックを怠っていました。
とりあえず、動くものを作ろうとしていたからです。
そういう必要な記述がない場合に最悪アプリケーションが落ちていたのですが、今回、そういう必須タグ・属性が記述されているかどうかのチェックをちまちまと行うようにしました。
エラーの表示やエラーメッセージについてはすでに実装しているんで、チェック部分だけ。何も難しいことはないんですが、ただただ面倒。

面倒なものを後回しにしてると、後が大変ということですね。
って、それはつまり、後でツールチップ対応に苦しみそうだってことですね…。

[CoveredCalc] ツールチップ

2004-04-20 10:27:07 | 開発状況
ここのところ、ツールチップへの対応を実装しようとしてました。
当初、ツールチップはすべて Windows のコモンコントロールに丸投げできるというイメージがあったのですが、非矩形領域に対するツールチップを実現しようとすると、そんな簡単にはいかないことがわかりました。
それから、BeOS ではツールチップ用の便利なコントロールがないようです(?)

と言うわけで、ツールチップを表示/非表示する仕組みを作る必要がありそうです。
当面、Windows の方だけ実装します。
思ったより面倒で泣けてきます。