こんにちは、高木です。
geometry_managerクラスの実装もかなり進んできました。ここであらためてジオメトリーマネージャーにはどんなコマンド(サブコマンドといった方が誤解がないかもしれません)があるか確認しておきましょう。
packer, placer, gridderを比べてみると、共通しているサブコマンドは次のものがあることがわかります。
- configure
- forget
- info
- slaves
- content
上記の5つのうち、slavesとconrentは名前が異なるだけで同じものですので、実質的には4つということになります。また、configureとforgetは前回までに実装したので、残るは実質的にinfoとslavesだけになります。
では、早速infoとslavesそれぞれのコマンドを実装していきましょう。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
tcl::obj info(const window& w) const { if (sub_command(u8"info", w) != TCL_OK) return {}; return Tcl_GetObjResult(w.get().interpreter().get()); } tcl::obj slaves(const window& w) const { if (sub_command(u8"slaves", w) != TCL_OK) return {}; return Tcl_GetObjResult(w.get().interpreter().get()); } |
これだけです。ただし、結果はtcl::objで返していますがリストになります。tcl::objではまだリストを扱うためのメンバー関数を用意していませんでしたので、これについても考えていく必要がありそうです。
リストの要素を分解するにはTcl_ListObjGetElements関数を使います。この関数を使えば、Tcl_Obj*からリストの要素数と要素の並びを表すTcl_Obj*の配列を取得することができます。これについては少し長くなると思いますので次回に回したいと思います。