『小説家になろう』でありそうなタイトル風にしてみました。
今回は、ListViewが複数あって、そのすべてがアクティブだとどうなるのか?という話を書いてみます。
まず、これが現バージョンの『将棋神やねうら王』の画面です。
ListViewが2つあることがわかりますね。ListViewに限らず、この手のControl(GUI部品の意味)には本来、focusという概念があります。focusがあるControlに対してユーザーからの司令が行くという仕組みですね。
例えば、キーボード入力を考えてみます。何か文字をキーボードから入力したとき、現在focusのあるテキストボックスに入力されますね。これはごく自然なことです。
ListViewも同様で、普通はカーソルキーの矢印キー(↑とか↓のキー)を押したときに、現在のfocusのあるほうのListViewの選択行が移動します。
ところが、将棋ソフトで棋譜ウインドウとか検討ウインドウとかにマウスカーソルを持って行ってクリックしてfocusを移動させてからカーソルキーで操作するの嫌ですね。何かまどろっこしいです。
また.NETの標準のListViewだとfocusを失うと選択行の背景色が白に戻ってしまいます。棋譜ウインドウでこれが生じるとどの行が選択されているかわからず、現在の局面がどれであるかがわかりません。
そこで、focusを失っても選択行の背景色自体は青か、focusを失っていることがわかる薄い青かであって欲しいわけです。これを実現するために、『将棋神やねうら王』ではListViewをオーナードローと言って、自前で描画しています。棋譜ウインドウ一つにわりと手間がかかっています。
ShogiGUIでは、マウスカーソルが検討ウインドウの領域に入ると(クリックせずとも)自動的に検討ウインドウにfocusが移動します。なかなかよく考えてありますが、検討ウインドウ、棋譜ウインドウが、『将棋神やねうら王』のようにメインウインドウに綺麗に埋め込まれている場合、検討ウインドウにfocusがあることを表現する方法が難しいです。検討ウインドウがウインドウだとはっきりわかるデザインにしても良いですが、それはそれで何かダサくて私は嫌です。
また、将来的にはPCはタブレット端末が主流になると考えている私にとって、マウスカーソルの存在を前提とするようなUIデザインにしたくないというのがあります。
そうなってくると、必然的にControlに対するfocusという概念を取り払うしかないのです。ListViewは複数存在できて、そのいずれも等しく(同時に)アクティブであっていい。Windowsなどの標準的なUIデザインからするとなかなか狂った世界観ですが、将棋ソフトとしての操作性などを追求していくと自然とこうなります。(こうなりました)
ではこのとき、選択行を移動するショートカットキーは何になるのでしょうか?
focusという概念がない以上、それぞれのListViewに対して異なるショートカットキーを割り当てる必要があります。慣れれば使いやすいのですが、それぞれ異なるショートカットキーになるのは、慣れるまで気持ち悪いかも知れません。
ともかく、将棋ソフトは一般的なソフト(ビジネスアプリなど)とは異なり、UIに要求されている仕様が特殊で、それゆえ特殊なデザイン観が必要となるように思います。ListViewが複数アクティブになっている世界が唯一解なのかどうかはわかりませんが、こういう解もありうるのではというのを形にしてみました。感想などコメント欄で聞かせていただければ幸いです。
色はともかく、キーボードを触っちゃうなら、Tabでのフォーカスの移動順が連続になっていれば良さそうに思えるけど、それだとこのゲームとしては操作性が悪かったということですか?
Tabで小さい方から大きい方、Shift+Tabで大きい方から小さい方へフォーカスが移動するような。
棋譜コメントとかでテキストボックス増える可能性があるので、そのときにTabキーで順番にfocus移動するの、嫌じゃないですか?
ま、マウスを使っちゃえばいいんじゃないかなぁ?w
キーの押しっ放しのリピートが生きていなくて、フォーカスを1つ移動するたびにキーから指を離すことが必須となると嫌ですねw
Ctrl+1で左List、Ctrl+2で右Listのような絶対的なフォーカスの移動をするショートカットキーも、キーとフォーカスの移動先の関係を覚えるのが面倒だし、キーとフォーカスの移動先の関係を変更したい人が出てきたりして面倒になるか。
マウスだけなら平気ですがキーボード操作をいれるとフォーカス問題が面倒ですよね。
記事からはそれますが、ShogiGUIの棋譜のところは最終手を反転表示すると先後の記号が反転してわかりづらいので、
オーナードローで反転表示をしないようにしてます。
おー、なるほど! > 棋譜
ShogiGUI、細かいところよく考えてあって、毎回唸らされます。
「これを実現するために…自前で描画しています。」
( ;∀;)イイハナシダナー