グリッドレイアウトとツリー
(ちょっと技術的な話がでてくるけど、あくまで日記なので雑です。)
こういう目次のレイアウトあるじゃないですか。
https://gyazo.com/4f972e05142eb6cadb15e61a45dab45d
「章」「節」「項」の階層構造でインデントされていて、右端にページ数が書いてある。
こういうレイアウトは、"table of contents" とかで画像検索するとたくさんでてくる。
よくある構造なんだけどちょっとおもしろくて、見出しの入れ子構造があって、それを横断的に貫くようにページ数の列がある。そういう構造をみることもできるし、ただ各行があって、それぞれインデントされて、ページ数は右寄せになってると思えばたいして面白くもないかもしれないけれど。
https://gyazo.com/af70e948de44491d23f3d96d72fd131a
より複雑になった場合として、列見出しや行見出しのなかに木構造があるような、ちょっと複雑な表ある。
https://gyazo.com/cc86a053ccaa65509998323c87b5c1cd
これは人工的なサンプルだけど、もうちょっとそれっぽい例だとこういうやつ。
https://gyazo.com/4674ac88c15d966e50dfa6028ec31943
こういう表と木構造が入り混じったような構造はすごくおもしろい。
なにが面白いかって、そんなに珍しいものじゃないのに、技術的な仕組みのうえではイレギュラーな存在として厄介者あつかいされることが多いから。とくにHTMLのような汎用的な
HTMLでもExcelでも、がんばれば表現できるんだけどやりたいことを率直に構造におとして表現するのは難しい。
一方でこういう構造のための専用のGUIコンポーネントもあるんだけど、今度は汎用性が失われてしまっている。
グリッドとツリーを融合させるかんたんな方法は、グリッドをネストさせること。
グリッドのセルのなかに子グリッドをいれればいい。
これの問題は、今度はいとこ同士がそろわなくなること。HTMLのtableタグで書いたtableが2つあるとして、それぞれの列や行がそろったりはしない。そろったらむしろ困る。だけどそろってもらわないと困る場合もある。そろってほしいときに使われるのが、セルの結合だ。tableタグならcolspanとかだし、Excelでもセル結合は多用される。
セルの結合はセルの分割の裏返しだ。だけど多くの場合セルの分割は親の範囲を超えて位置がそろわないのでセルの結合のかわりにはならない。