Home > Latest topics

Latest topics > サブツリーの展開

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

サブツリーの展開 - Jan 14, 2006

TBEでサブツリーを展開したとき、Windowsのエクスプローラのフォルダツリーのように、以下の挙動を行うようにした。

  • サブツリーの全てのタブが画面内に収まる場合は、そのまま。
  • 展開されたサブツリーがタブの表示領域外にはみ出る場合、サブツリーの全体が見えるところまで自動スクロール。
  • サブツリーの全体がタブの表示領域に収まらない場合は、サブツリーの親となっているタブが表示領域の上端に来るように自動スクロール。

効率のいいやり方が分からなかったので、以下のような方法をとってみた。

  1. サブツリーを展開した(しようとした)タブの全ての子孫タブを一次の配列として取得
  2. それをタブの表示順でソート
  3. 最初のタブと最後のタブについて、タブの表示領域の中に収まっているかどうかを調査
  4. 両方とも画面内にあるなら、何もしない。最初のタブが表示領域の上または左の外側にある場合、そのタブの位置までスクロール。最後のタブが表示領域の下または左の外側似ある場合、そのサブツリーの高さが表示領域よりも大きければ、最初のタブを表示領域の上または左端に合わせるようにスクロール。表示領域内に収まるようなら、最後のタブの位置までスクロール。

実装しているのはscrollableTabBar.xml。タブバーのスクロールに関する処理は基本的にここに書くようにしている。

同じような処理を何度も書くのが嫌だったので、タブが表示領域の中に収まっているかどうかを調べる方法について少し工夫をしてみた。いつもの自分なら、タブの位置を調べて「表示領域内にある」か「表示領域にない」かの真偽値を返すように書くところだし、実際、今までもそうしてたんだけど、今回は、ここで「表示領域内にある(0)」「左の画面外にある(-1)」「右の画面外にある(1)」「上の画面外にある(-2)」「下の画面外にある(2)」と5つの定数値を返すようにしてみた。これで、返り値が0であるかどうかを見れば画面内かどうかが、0より大きければ右か下の画面外であることが、小さければ左か上の画面外であることが、また、返り値を2で割った余り(returnedValue % 2)が1であればタブバーが上か下に表示されていることが、それぞれ分かるというわけ。

分類:Mozilla > XUL, , , , , 時刻:22:55 | Comments/Trackbacks (0) | Edit

Comments/Trackbacks

TrackBack ping me at


の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2006-01-14_subtree.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2020年11月30日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき