10.13 メッセージ履歴のカスタマイズ 〜基本編〜(その10)

ここまでで ExtendedHistoryLayer クラスの中身は大体チェックできたんだけど、 まだいくつかメソッドが残ってるから、それを一通り見ていくことにするね。
まだ残ってるメソッドがあるんだ?
ん、あと6つかな。
え、そんなにあるの?
まぁどれも単純なメソッドだから、今回だけで十分チェックできるよ。
ふーん、そーなんだ。
じゃまずは prevPage メソッドと nextPage メソッドからね。
それって前に見たことあると思うんだけど…。
確か前のページと次のページの履歴メッセージを表示するメソッドだったよね?
うん、そうだよ。
ただ前に見たのは HistoryLayer クラスの方の prevPage メソッドと nextPage メソッドだからね。
HistoryLayer クラスの prevPage メソッドと nextPage メソッドについては §10.10 参照。
えっと、じゃあ prevPage メソッドと nextPage メソッドは ExtendedHitoryLayer クラスでオーバーライドしてるってこと?
そういうこと。
で、まずこれが ExtendedHistoryLayer クラスの prevPage メソッドね。

ExtendedHistoryLayer クラスの prevPage メソッド>

function prevPage()
{
    super.prevPage(); // スーパークラスの prevPage メソッドを呼び出します
    // スクロールバーが表示されている場合は表示を更新します
    scrollBar.value = dispStart if canScroll;
}

最初にスーパークラス(HistoryLayer クラスだよね)の prevPage メソッドを呼び出してて…
あとは canScrolltrue の時に scrollBar.valuedispStart の値を代入してるだけ、みたいだね。
スクロールバーの value プロパティってどんなプロパティだったか覚えてる?
ん〜…スクロールバーの位置を設定するプロパティだったかな?
そ。dispInit メソッドでも出てきたよね。
value プロパティについては §10.9 参照。
じゃあ、canScrolltrue の時、 つまり履歴メッセージがスクロールできる時は、スクロールバーの位置を設定するってことだよね。
そうだね。
でもなんでここでスクロールバーの位置を設定してるの?
スクロールバーは今履歴メッセージのどの部分を表示してるかを表してるわけでしょ。
うん。
で、prevPage メソッドが呼び出されたってことは、1つ前のページが表示されたってことだから、 履歴メッセージの表示部分が変わったってことだよね。
だからそれに合わせてスクロールバーの位置も変えなくちゃいけないの。
スクロールバーの位置ってページを切り替えたら自動的に切り替ったりしないの?
残念ながら全部手動だよ。
だから履歴メッセージの表示位置が変わるたびにスクロールバーの位置も設定し直さなきゃいけないんだ。
あ、そーなんだ。
まぁ設定し直すって言っても、value プロパティに dispStart の値を代入するだけだから、そんなに大変でもないでしょ。
まー確かにね。
そんなワケだから、nextPage メソッドでも同じことをやる必要があるんだ。

ExtendedHistoryLayer クラスの nextPage メソッド>

function nextPage()
{
    super.nextPage(); // スーパークラスの nextPage メソッドを呼び出します
    // スクロールバーが表示されている場合は表示を更新します
    scrollBar.value = dispStart if canScroll;
}

スーパークラスの nextPage メソッドを呼び出して、スクロールバーの位置を設定し直すんだね。
ん。あと scrollUp メソッドと scrollDown メソッドもね。
scrollUp メソッドと scrollDown メソッドって、 履歴メッセージを1行先にスクロールするメソッドと1行前にスクロールするメソッドだったよね?
scrollUp, scrollDown メソッドについては §10.11 参照。
そう。この2つのメソッドも履歴メッセージの表示位置を変えるメソッドだから…
スクロールバーの位置を設定し直さなきゃいけないんだね。
だからそれぞれこうなるわけね。

ExtendedHistoryLayer クラスの scrollUp メソッド>

function scrollUp()
{
    super.scrollUp(); // スーパークラスの scrollUp メソッドを呼び出します
    // スクロールバーが表示されている場合は表示を更新します
    scrollBar.value = dispStart if canScroll;
}

ExtendedHistoryLayer クラスの scrollDown メソッド>

function scrollDown()
{
    super.scrollDown(); // スーパークラスの scrollDown メソッドを呼び出します
    // スクロールバーが表示されている場合は表示を更新します
    scrollBar.value = dispStart if canScroll;
}

やっぱりスーパークラスのメソッドを呼び出してからスクロールバーの位置を設定し直すんだね。
うん。どのメソッドも同じやり方だよ。
じゃ次のメソッドいくね。
まだスクロールバーの位置を設定し直すメソッドがあるの?
ううん、次は別のことをやるメソッドだよ。まぁスクロールバー関係ではあるんだけどね。
onValueChanged っていうメソッドなんだけど、前に出てきたの覚えてる?
う〜ん…それって元々 HistoryLayer クラスのメソッドなんだっけ?
ううん、onValueChanged メソッドは ExtendedHistoryLayer クラスで新しく作ってるメソッドだよ。
実はメソッドの名前が前に出てきただけで、メソッドの中身はまだ全然見てないんだけどね。
そーなの?
onValueChanged メソッドは、§10.5makeButtons メソッドの中でスクロールバーのオブジェクトを作る時に、 HorizontalScrollBar クラス(水平スクロールバークラス)とか VerticalScrollBar クラス(垂直スクロールバークラス)のコンストラクタに指定してるメソッドで、 スクロールバーの上下(左右)のボタンをクリックしたりスライダーをドラッグしたりした時に呼び出されるメソッドなんだ。
あー、そーいえばあの時はメソッドの中身はまた今度見てくって言ってたんだっけ。
ってワケだから、これからメソッドの中身を見てくね。

onValueChanged メソッド>

function onValueChanged(value)
{
    if(everypage)
        setPage(value); // ページ毎の表示の場合は表示するページを設定します
    else
        setLine(value); // そうでない場合は表示する行(列)を設定します
}

…わりとシンプルなんだね。
何やってるかもわかるでしょ?
ちなみに引数の value はスクロールバーのボタンを押したりスライダーをドラッグしたりした後のスクロールバーの value プロパティの値になってるよ。
everypagetrue だったら setPage メソッドを呼び出して、everypagefalse だったら setLine メソッドを呼び出してるね。
どっちのメソッドを呼び出す時も引数は value だね。
setPage メソッドと setLine メソッドはどんなメソッドだった?
setPage メソッドは表示する履歴メッセージのページを設定するメソッドで、 setLine メソッドは表示する履歴メッセージの行を設定するメソッドだよね。
だから、everypagetrue なら履歴メッセージの value ページ目を表示して、 everypagefalse なら 履歴メッセージの value 行目を表示するってことかな。
setPage メソッドについては §10.10setLine メソッドについては §10.12 参照。
そうそう。
やってることはそれだけだから、特に問題ないよね。
うん、おっけー。
それじゃ最後は onButtonClick メソッドね。
このメソッドも中身はまだ見てないんだけど、名前だけは前に出てきてるよ。
えっと…どこだっけ?
§10.5HistoryButtonLayer クラスだよ。
メッセージ履歴画面を閉じるボタン用のクラスだね。
ってことは、メッセージ履歴画面を閉じるボタンが押されたら onButtonClick メソッドが呼び出されるってこと?
そう。HistoryButtonLayer クラスのオブジェクトは、クリックすると親レイヤの onButtonClick メソッドを呼び出すようになってるからね。
ちなみにメッセージ履歴を閉じるボタンの親レイヤはメッセージ履歴レイヤだよ。
onButtonClick メソッドってメッセージ履歴画面を閉じるボタンが押された時に呼び出されるわけだから、 メッセージ履歴画面を閉じなきゃいけないんだよね?
ん。だからスクリプトはこうなるの。

onButtonClick メソッド>

function onButtonClick(button)
{
    // 閉じるボタンが押された時に呼び出されるので
    // メッセージ履歴画面を閉じます(非表示にします)
    hide();
}

hide っていうメソッドを呼び出してるみたいだけど、このメソッドがメッセージ履歴画面を閉じるメソッドなの?
そうだよ。ちなみに hide メソッドは HistoryLayer クラスのメソッドだよ。
そーなんだ。
あと、引数の button ってのは?
button はメッセージ履歴を閉じるボタンの参照になってるんだけど、 ここでは使う必要ないから使ってないんだ。
そっか。
じゃこれで残ってたメソッドも一通りチェックできたから、メッセージ履歴のカスタマイズ基本編は終了だね。
基本編が終わりってことは、次回からは応用編みたいなのになるってことだよね?
そーだね。
まずはメッセージ履歴画面の背景に好きな画像を表示できる機能を追加してみることにするね。
それって結構カンタンそうな気がするんだけど…そーでもないんだよね?
ん〜、思ったよりは大変って感じかな。
ま、詳しくは次回から見てくことにするね。
りょーかい。
それじゃ、また次回ね!


前へ | TOP | 次へ