一覧表のインジケータを選択と独立に操作

終端ノードないし孤立ノードを選択して系統並び替えを実行すると,SIMPLEGRAPH::GetHasseDiagramで「基準ノードが空」というエラーが出ていたので,BuildSameGeneMarriageGraphのステージ【4】で「複数の親を持つ終端カードを節点とする自己ループを追加する」としていたところを,「結婚を持たない終端カードを節点とする自己ループを追加する」のように変更した.これにより,すべての有効なカードが重婚クラスタグラフに含まれるようになった.

これで選択操作と図面操作が切り離され,選択状態は図面をどう改変しても変化しないようになったが,厳密に言うとまだそれが残っているところがある.一覧画面とカード画面上でカード移動を実行すると選択は単選択状態に戻ってしまう.現行では①一覧画面・カード画面上でのカードの移動,②系図画面上でのセンタリング,③カード画面に表示されるカードは完全に連動している.選択状態を維持したままカード移動を実行するとしたら,どんな仕様になるのか?考えてみよう.

  1. 一覧画面上のインジケータが移動する
  2. カード画面に表示される主選択カードが変化する
  3. 系図画面はカードの移動によっては変化しない
  4. 系図画面で主選択カードにジャンプするにはHOMEキーを押す

ということになるのではないだろうか?カード検索を実行したときに表示される「カード巡回」パネルはやや上と類似した動作になっている.ただし,検索結果に含まれるカードはすべて選択状態になっているので,①選択されたカードを巡回する,②系図画面ではセンタリングが実行されるという相違点があるが,考え方としては近いものがある.上のような仕様が実装されることになれば,カード巡回パネルの操作でも系図画面は変化しないということになるのではないだろうか?この方が操作的には軽くなり,より使い易くなるのではないかと思う.

一番の問題点は項目1の「一覧画面上のインジケータが移動する」,つまり選択とインジケータの操作を完全に分離可能かどうか?という点にある.まず,この点を確認しておこう.⇒難しいかもしれない.一覧表のクリックとUP/DOWNキーの押下は同じイベントで処理されている.いや,先にキーイベントが発生しているから,切り分けることはできるのではないか?⇒可能だ.その前に,カード移動したときセンタリングしないようにしたときの操作性がどのように変化するかを見ておこう.

センタリングしないというのでよいのではないか?実際,部分図や親族図でカードが画面上に存在しない場合などもある.つまり,カード移動では系図画面は変化しないというのでよいと思う.ただし,カード画面と一覧画面はつねに連動するものとする.

もう一つ問題がある.仮に選択状態を変化させずにカード移動ができるようになったとしても,すべてのカードを巡回しないとそのカードに到達できないのではほとんど意味がない.カード画面ではカード番号を入力→ENTERでそのカードにジャンプできるが,それと同等のことが一覧画面でもできなくてはならない.一覧表の最左列つまり,インジケータが表示されている列のセルをクリックするとそこにジャンプできるようにすることは可能だろうか?

▲カード編集:カード巡回で「巡回の対象となるカードがありません」の表示が出る.一覧画面で複数カードを選択しているのだが…

▲プレビュー画面でズーム倍率を100%に切り替えたら,Zelkova1_MoveControlでAutoPosition.X < 0 Or AutoPosition.Y < 0というエラーが起きた.また,ズーム倍率25%でウィンドウ枠をドラッグしたら何重にも線が重なって画面が壊れた.ここでズームーボタンを押したら,倍率が595%になった.

親族図:直系血族図をカード一覧表:すべてのカードに切り替えて全点で62のところが,124点に増えてしまった.TREEVIEW:CheckSelectListでカウント不一致のエラーが出ている.選択カード数は1でselectflagのカウントはゼロ.

BuildNewTableでは,テーブルを一旦空にした後,再構築しているが,このとき,行の追加によりCurrentCellChangedイベントが発生→ CurrentCell.ColumnIndex = 0→最左列のクリックと誤認してGetNewCardを実行→ MakeNewCard→ 参照番号がゼロであるため,GetNewTable(True)で新しいテーブルが追加されるという動作になっている.⇒CardGridView_CurrentCellChangedでテーブル構築中は無動作で抜けるようにした.

基準ノードの行はシアン色で表示されているが,この行を含む複数行を選択した後,他の行をクリックすると,色が落ちてしまう.⇒しかし,起こる場合と起こらない場合がある.どうも行の並びと関係があるような気がする.⇒背景色設定を共通ルーチン化することで漏れを排除するようにした.⇒解決.

▲親族図と全体図で系統並び替えの基準ノードを共有しているように思われる.これらは独立ということになっていたのではないか?部分図の基準ノードは独立しているようだが… 確かにこの仕様はバランスが悪いような気もするが,実用的にはその方が適切である場合もあり得る.全体図でカードAを基準ノードにしているときに,親族図に移動する目的は,Aの親族図が見たいという場合が多いのではないか?このとき,まったく別のカードの親族図が出ていたとすると混乱する可能性がある.

しかし,現行では系統並び替えによっても選択領域は変化しないから,カードAが選択されていれば,そのまま系統並び替えを実行すればよいということになるのではないか?部分図のように親族図も独立の基準ノードを持つとした方が,仕様的には筋が通っていると思う.また,今回の「選択領域と提示カードの分離」という方向性にも合致している.

ただし,これを実装するにはファイルのフォーマットの変更が必要となるので,右から左という訳にはゆかない.同種の課題として,全体図・親族図・部分図で独立の環境パラメータ(親族種別など)を持つという懸案もある.これも保存ファイルのフォーマットに関わるので,もしやるとすれば同時に実現した方がよい.

この件は一時保留としてもう少し片付けることにしよう.一覧表のインジケータ行とカード画面に表示される提示カード(仮称)は完全に同期するようになったが,ここまで来ると系図画面にも出さないという訳にはゆかなくなる.提示カードは従来仕様の「主選択カード」に類似しているが,選択領域に含まれていないというところが大きな違いだ.

現行では主選択カードの取り出しには2つの方法がある.①系図画面で左ボタンアップ→TREEVIEW::LButtonUpで取得,②カード画面に人名カードを表示する際に,Z.mSetPrimarySelectionでカードの参照番号を送付.どちらの場合も最終的には人名カードが更新されるので,mSetPrimarySelectionがあれば間に合いそうだ.取得した値は,TREEVIEW::selectedcardとselectednameに格納されるので,とりあえず,それを流用することにしよう.

▲主点カードはカード画面上に表示されているカードと一致しなくてはならない.従って,一覧表の表示範囲が系図画面上のカードのとき,系図画面上にそのカードが存在しない場合には,インジケータは消えていなくてはならないのにそうなっていない.人名カード上のスピンボタンでカード移動した場合にはそのような動作になっている.カード履歴で移動した場合でも,一手遅れてそのような状態になっている.

▲親族呼称図.ZELの直系血族図で基準ノードの#46 義父(舅)→婿を削除しようとして,NAMEBOX::Disposeで停止した.その後,系統並び替えで多重グラフ2の節点リストが空で停止した.全体図でも類似の障害が発生する.このケースではSIMPLEGRAPH::GetHasseDiagramで「基準ノードが空」エラーが起きる.基準ノード以外のカードの削除では特に問題は発生しない.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA