Home > Latest topics

Latest topics > サブツリーの展開

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

宣伝2。Firefox Hacks Rebooted発売中。本書の1/3を使って、再起動不要なアドオンの作り方のテクニックや非同期処理の効率のいい書き方などを解説しています。既刊のFirefox 3 Hacks拡張機能開発チュートリアルと併せてどうぞ。

Firefox Hacks Rebooted ―Mozillaテクノロジ徹底活用テクニック
浅井 智也 池田 譲治 小山田 昌史 五味渕 大賀 下田 洋志 寺田 真 松澤 太郎
オライリージャパン

サブツリーの展開 - 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


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

Post a comment

writeback message: Ready to post a comment.

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

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき

オススメ

Mozilla Firefox ブラウザ無料ダウンロード