アプリケーションからツールを操作する橋渡しとなるクラスです。
アプリケーションはSelectToolで変換表内の番号を指定します。 ToolHolderクラスがキー入力を判定してツールを切り替えます。 イベントを渡すとToolHolderクラスがそれぞれのツールの処理にまわします。 例えばTOOLTABLE_MOVEにするとキーを何も押さない状態では移動ツールとして働き、 コントロールキーを押すと方向点の切り替えツールとして働きます。 アプリケーションはツールの違いを気にする必要がありません。
アプリケーションはGetConditionで ツールの状態を得て、カーソルやステータスバーの文字を変更してください。 状態の番号は全てのツールで重ならないので、ツール区別せずに同じルーチンで処理できます。
ツール使用中のパスの表示の更新はRedrawクラスを使います。 Redraw::SetToolでToolHolderオブジェクトのポインタを設定すると、 ツール固有の表示処理を経由して表示されます。
ツールの使用中はパスを表示しなおします。 2つの画面を同時に表示しなおすことはできないので、 「別のウィンドウに表示」や「ウィンドウを分割する」機能を持っているアプリケーションや サムネイル表示などで、 他のウィンドウに同じパスが表示されている場合は、 ツールの動作が終了するまで他のウィンドウのパスを消しておく必要があります。
サンプルの場合では、ユーザーがツールのボタンを押すとツールが選ばれ、 シフトキーなどを押すとツールが切り替わります。 ボタンとキーの関係を示したのがツール変換表です。
表にはキーを押していない状態と幾つかのキーを押した状態での、 ツールとオプションの値を並べてあります。 アプリケーションはSelectToolで変換表の番号を選びます。
表には同じツールを何度でも並べることもできます。 ライブラリーとしては一つのツールにまとめられているものを別のツールとして割り当てることもできます。
変換表はSetToolTableで アプリケーション独自のものに取り替えられます。変換表にはツールのラベルとオプションを設定します。
変換をするキーはconfig::SetConfigで設定します。
コンストラクタ
デストラクタ
変換表の番号を指定してツールを切り替えます。
ツールが動作中の場合は中止します。
切り替えの際にパスの表示が変わる場合があるのでGraphオブジェクトは 表示できるように正しく設定されていなければいけません。
index 番号
path Pathオブジェクトのポインタ
graph Graphオブジェクトのポインタ
初期値か前回設定した変換表の番号を得ます。
現在の変換表の番号
イベント処理をする。
イベントによってはpointやkeyが必要ない場合もあるので省略してください。
中止をする場合でも表示を更新するのでGraphオブジェクトは毎回正しく設定されてされていなければいけません。
event イベントの種類
path Pathオブジェクトのポインタ
graph Graphオブジェクトのポインタ
point 表示座標でのカーソルの座標
key 押したまたは離したキー
中止のイベント処理をする。 ソースを簡単にするために作った関数で、 EntryにEVENT_CANCELを渡すだけです。
全ての場面で中止することができます。
ツールが動作中かを調べます。
アプリケーションは、同じパスを2ヶ所以上に表示する場合は、 ツールが動作する前に操作対象ではない場所に表示されているパスを消して、 動作が終わってから表示してください。
パスをツール以外で利用する場合にツールが動作中なら、 Cancelで中止してください。
動作中ならtrue。
ツールの動作を中断できる区切りかを調べます。 区切りであればツールが動作中でも、終わらせて履歴やメニューなど他の操作をできます。 中断できないツールの場合に中止をするとそれまでの変更が無効になる場合もあります。
イベント処理前にツールが動作をしていて、 イベント処理後に中断可能なら履歴の保存をしてください。
中断できるならtrue。
マウスキャプチャーをする必要があるかを調べます。 必要であればアプリケーションが操作対象のウィンドウにマウスキャプチャーを固定してください。
必要ならtrue。
ツールの処理中にパスが変更されるような処理をした後かを調べます。
アプリケーションはCanStopで履歴を更新できる状態か調べて、 履歴を作ったら、ClearModifiedFlagでフラグを戻してください。
変更するような処理をするとフラグが立ちますが、必ず変更されているわけではありません。 履歴を作ろうとして差がなければ履歴を登録しないようにすると良いでしょう。
変更があったならtrue。なければfalse。
DidModifyのフラグを元に戻します。
アプリケーションが戻さないとずっとそのままです。
ツールの状態を得ます。ツールの種類やカーソルがパスのどこを指しているかなどがわかります。
ツールが違っていても同じ数にはなりません。
この情報によってカーソルやステータスバーを変更してください。
ツールの状態
ツールに設定されているオプションを得ます。
利用者がキーを押したり、ツールを切り替えたりするとツールとオプションが変わります。
lowBit オプションの下位ビット
hiBit オプションの上位ビット
オプションの値
ツール変換表を設定します。
toolTable 表のポインタ
count 表の数
カーソルを移動した。 ウィンドウがWM_MOUSEMOVEを受けたら渡します。
座標が必要です。
左ボタンを押した。 ウィンドウがWM_LBUTTONDOWNを受けたらドラッグをし始めるか調べてください。 ドラッグしていなかったらEVENT_LEFTDOWNを渡して、 ドラッグしていたらEVENT_DRAGを渡してください。
座標が必要です。
ドラッグを始めた。 左ボタンを押してドラッグを始めた場合に渡します。 EVENT_LEFTDOWNを読んでください。
左ボタンを離した。 ウィンドウがWM_LBUTTONUPを受けたら渡します。
座標が必要です。
左ボタンを2度押した。 ウィンドウがWM_LBUTTONDBLCLKを受けたら渡してください。
座標が必要です。
右ボタンを押した。 ウィンドウがWM_RBUTTONDOWNを受けたら渡してください。
座標が必要です。
キーを押した。 ウィンドウがWM_KEYDOWNを受けたら渡してください。
仮想キー番号と座標が必要です。ウィンドウメッセージハンドラの引数には座標がありませんが、 APIを使って出してください。
キーを離した。 ウィンドウがWM_KEYUPを受けたら渡してください。
仮想キー番号と座標が必要です。ウィンドウメッセージハンドラの引数には座標がありませんが、 APIを使って出してください。
ツールの動作を中止する。 Cancel関数でも良いです。
「元に戻す」をした。 アプリケーションがパスの情報を元に戻してから渡します。 ライブラリーが自動的に元に戻すわけではありません。 ツールが動作したまま元に戻せる場合には呼び出さないとおかしくなります。
「やり直し」をした。 アプリケーションがパスの情報をやり直してから渡します。 ライブラリーが自動的にやり直すわけではありません。 ツールが動作したままやり直せる場合には呼び出さないとおかしくなります。
パスの表示をする。
ライブラリーの内部から呼ばれます。 アプリケーションから呼び出す必要はありません。
カーソルがウィンドウの外に出た。
ライブラリーの内部から呼ばれます。 アプリケーションから呼び出す必要はありません。
外に出ていたカーソルがウィンドウの中に戻った。
ライブラリーの内部から呼ばれます。 アプリケーションから呼び出す必要はありません。