カード一覧表をクリック→カード選択でカード画面が変化しない

カード一覧表をクリック→カード選択でカード画面が変化しない.矢印キー,カード画面のスピンボタンでは変化する.系図画面上のクリック→カード選択でも変化する.一覧表の最左セル(インジケータ列)のクリックなら変化する.⇒CardGridView_CurrentCellChangedでCardBox.GetNewCardを実行するように修正.CurrentCellChangedではマウスアップイベントとの重複動作を避けるためにSelectionProcないしSendSelectionを実行しないように修正している.

今後は,カード画面上に表示されるカードを現参照カードと呼ぶことにする.現参照カードは三図面(全体図・親族図・部分図)共通でカード選択操作によって指定されるが,↑↓キーないし,カード画面上のスピンボタン(カード番号の差左右に配置)を操作することで選択状態に変化を与えずに移動することができる.つまり,現参照カードと選択カードは独立の状態として管理される.現参照カードは一覧表の最左列をクリックするか,ないし人名カードのカード番号欄にカード番号を記入→ENTERで直接変更することもできる.

カード一覧表の最左列のクリックで現参照カードを切り替えたとき,一覧画面上のカラー表示行が更新されない.⇒CardGridView_CurrentCellChangedでインジケータ移動を処理しているブロックでChangeRowColorを実行するようにした.

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

図面種別を切り替えたときには現参照カードがレコードに含まれているか否かをチェックしなくてはならない.また,含まれていた場合にも行が変化している可能性がある.以前はKindredMapSubの中でGetNewTableを実行していたが,現行では「図面種別変更では必ず系統並び替えが実行されるのでここでは不要」としているため,この関数内では検査ができない.同様のことは一覧表の表示範囲を切り替えたときにも起こり得るので,GetNewTableの中で検査した方がよい.

GetNewTableではUpdateSelectionを実行しているので,この中で検査できるのではないか?⇒一番確実なのはUpdateIndicatorでチェックすることだろう.いや,UpdateIndicatorの中から実行されるSetCurrentCellでは現参照用カードのレコードが存在しない場合にはインジケータをリセットしているのだが… UpdateSelectionに渡している引数が悪い.BuildNewTableの戻り値を使っているが,間違いだ.

現参照番号を渡すようにした.カード履歴で移動のときには,Z.SelectedRefnumをUpdateSelectionに渡している.SelectedRefnumは検索などのときにも使用される作業変数なので,適切ではない.Currefnumを使うべきだろう.⇒大体整理されたのではないかと思う.

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

15  #7743 k COMPLIST 7743 {2}[0]<15> <15>CARDLINK:#629 @48妻の祖父→孫娘の婿[0] <15>CARDLINK:#638 @49妻の祖母→孫娘の婿[0]

ただし,このクラスタは親子関係を持っていないため,多重グラフ2には算入されていない.⇒多重グラフ2は親子関係による枝グラフとして生成されているが,親子関係を持っていないノードもグラフに含める必要がある.⇒最初に多重グラフ1の連結成分リストを転記して多重グラフ2の節点リストを構成しておくようにした.これでどんな多系統図でも扱えるようになったのではないか?

image

「カード削除」によって系列優先ノードが削除されることは普通に起こり得るので,OnDeleteCard中はNAMEBOX::Disposeで停止しないとしておくことにする.

同上サンプルの部分図基準ノード=#45 妻→夫の基準ノードを削除した後の動作が悪い.UNDOで戻ったとき系図画面で現参照カードの枠が消えている.他のカードをクリックするとその枠が逆に表示される.⇒UNDOを実行したとき,画面を更新する前に枠を削除していないのだろう.UNDOを実行したときには必ず系統並び替えが実行されるので,その時点でフラグをリセットする必要がある.

いや,それはやっている.どこかで余分な動作が入っているのではないか?⇒TREEVIEW::DrawControlでは冒頭で選択枠を非表示とし,出口で選択枠を再表示しているが,dispselectしか見ていなかった.DispSelectBoxは選択枠と現参照カード枠の両方を処理しているので,dispprimeを見る必要がある.⇒動作するようになった.

一覧画面上で選択操作した場合には,従来のように現参照カードにジャンプできるようにした方がよい.これまではCardBox.GetNewCardでセンタリングするようになっていたのだが,インジケータなどによる移動でもGetNewCardになるので,センタリングする場合としない場合を切り分けなくてはならない.可能だろうか?

DataGridView_MouseUpではSelectionProc()を呼び出しているが,これもどちらの場合も含んでいる.矢印キーによる移動とカード画面のスピンボタンによる移動ではSpinUpDownを呼び出している.この関数の中でもGetNewCardを使っているので,GetNewCardの外でセンタリングするようにすればよいのではないか?

以前はSelectionProcの中でCenteringCardSubを実行していたのだが… CardGridView_CurrentCellChangedの中ではインジケータ列のクリックとそうでない場合の2箇所でGetNewCardを実行している.インジケータ列のクリックでない場合にはセンタリングを実行するようにした.

HOMEキーも予定したような動作になっている.これで選択操作と現参照カードの操作はほぼ完全に整理が付いたのではないかと思う.これと類似した機能として,検索時のカード巡回とカード巡回パネルによる選択領域のカード巡回がある.チェックしておこう.

一覧表とカード画面は巡回パネルと同期しているが,系図画面のジャンプが止まっている.この操作ではGetNewCardは呼び出されていない.代わりにMakeNewCardを実行している.SetSelectCardで「カード巡回パネルのカードを更新」しているが,この中でCenteringCardSubを実行している.なぜ利かないのだろう?

一覧表でカード選択→ カード巡回パネルで「巡回の対象となる(複数の)カードがありません」のエラーが出る.このエラーはZ.SearchCountの場合に発生する.カード巡回の対象はZ.DeleteTableではなく,Z.SearchTableなので,それを転記する必要がある.TakeSearchSelectionでそれをやっているが,現在のところ止めてある.MakeSearchSelectionというその逆関数もある.

mZelkova::mGetSearchListはTakeSearchSelectionと同等のことを実施している.Zelkova1_NodeClickではmZelkova::mGetSelectListから選択カードリストを取得して,mGetSearchListで検索リストに転記している.mGetSelectListの中でつねにmGetSearchListを実行する必要はないと考えられるので,停止しておこう.その代わり,カード巡回_ClickでZ.mGetSearchListを実行するようにしてみた.

これでカード巡回はできるようになったが,スピンボタンの押下で一覧表の選択が落ちてしまった.これはおかしい.⇒SetSelectCardでUpdateSelectionを実行していたところ,「カード巡回では選択領域を変化させない」という理由でUpdateIndicatorに変えたためだ.UpdateSelectionを単独で実行すると単選択になってしまう.

CZelkovaCtrl3::CenteringCardでは引数にカード参照番号が入っているが,実際の動作ではまったく参照されていない.実際には選択カードリストを見ているため,予定したような動作にならないので,ActionCenteringの引数をACTION_CENTERからACTION_HOMEKEYに変更した.CallCenteringMoveではACTION_HOMEKEYのときは現参照カードにジャンプするようになっているので,この方が実情と整合する.

カード巡回パネルが出ているときに選択状態を変えてもテーブルが更新されない.また,一覧表で選択操作を行うとカード巡回パネルが閉じてしまう.⇒上記ではmGetSelectListの中でmGetSearchListを実行しないとしているが,修正を戻して実行するようにした.また,一覧表上の選択操作でもカード巡回パネルを閉じないようにした.

インジケータ列のクリックで選択が落ちる場合がある.⇒特定のカードで落ちているような感じもする.なぜか,#15 五宮で落ちる.かなり不思議だ.⇒以下の条件が成立してCardGridView_CurrentCellChangedから離脱している.

EditRowIndex = CardGridView.CurrentCell.RowIndex

EditRowIndexが14になっている.EditTableFlagを見ていないためだ.

▲カードと連動をオフにするとカード切り替えがオンになるが,パネルを開いたときにカードと連動オフの場合はカード切り替えはオフになったまま.また,カード切り替えボタンを押してもカード画面の内容は更新されず,パネルを閉じて終了してしまう.

▲源氏物語全系譜6.1.ZELの全体図 #1 光源氏でカード番号でソートしようとして,非参照カウントの残留が発生した.EraseTreeViewからNAMEBOX::Dispose→ RetrieveGhostで起きている.なにかの拍子にカード番号の昇順ソートが掛かってしまった.しかも,その前に選択反転のようなことも起きている.

コメントを残す

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

CAPTCHA