ATF FSM Editor Sample_j - kaisu1986/ATF GitHub Wiki
FsmEditor は、有限ステートマシン (FSM) のサンプルエディタです。データファイル形式の定義に XML スキーマを使用し、XML FSM ファイルの読み込みと書き込みを行います。また、ステートと遷移を視覚的に表示して編集できるようにします。AdaptableControl を使用して、FSM を表示および編集します。同時に複数のドキュメントを編集できます。標準の編集コマンドの実装には多くの ATF Editor コンポーネントが使用されています。FsmEditor では、ドキュメントに挿入可能な FSM フラグメントのカスタムクリップボードの作成に PrototypeLister コンポーネントが使用されています。ドキュメントキャンバスには、付箋紙のような役割を果たす注釈を追加できます。
このサンプルの内容は、FSM Editor Programming Discussion を参照してください。
- FSM.xsd XML スキーマを使用するデータモデルを定義します。
- DOM を使用してメモリ内にデータモデルを格納します。
- ContextRegistry を使用して、アクティブな編集コンテキストを追跡し、編集している場所にアプリケーションコンポーネントが常に適用されるようにします。
- AdaptableControl を使用して、グラフ抽象化を使い FSM を表示および編集します。
- ATF\Samples\FsmEditor\bin\Release にある FsmEditor.exe をダブルクリックします。
- [Fsm] ウィンドウが表示されます。

FsmEditor には以下のペインがあります。
- [Palette] ([FSM]): FSM のパーツパレットで、[State] と [Comment]があります。
- [Property]: 選択した要素のプロパティをリストコントロールで編集します。
- [Grid]: 選択した要素のプロパティをグリッドコントロールで編集します。
- [Prototypes]: FSM で定義し使用するカスタム FSM フラグメントを一覧表示します。
- キャンバス: FSM を定義、表示、および編集する場所です。
- ファイル管理: [Save] (保存)、[Save] (名前を付けて保存)、および [Save] (すべて保存)。
- 配置: [Lefts] (左揃え)、[Tops] (上揃え)、[Rights] (右揃え)、[Centers] (中央揃え)、[Bottoms] (下揃え)、および [Middles] (上下中央揃え)。
- 最大表示: [Frame] (選択範囲) および [Frame] (全体)
- ウィンドウレイアウトのロックとロック解除の切り替え。
- 編集: [Cut] (切り取り)、[Copy] (コピー)、[Paste] (貼り付け)、[Delete] (削除)、[Undo] (元に戻す)、[Redo] (やり直し)。
- [File] (ファイル): [New] (FSMの新規作成)、[Open] (既存の FSM を開く)、[Save] (保存)、[Save] (名前を付けて保存)、[Save] (すべて保存)、[Close] (閉じる)、[Recent] (最近使用したファイル) および [Exit] (終了)。
- [Edit] (編集): 標準の編集機能 ([Undo]/[Redo] (元に戻す/やり直し)、[Cut] (切り取り)、[Copy] (コピー)、[Paste] (貼り付け)、[Delete] (削除)、[Select]/[Deselect] (すべて選択/選択解除)、[Invert] (選択対象を反転する)) のほかに、次の項目があります。
- [Keyboard] (キーボードショートカット): [Customize] ウィンドウを使用して、キーボードショートカットを設定します。
- [Load] (設定の読み込み/保存): このウィンドウを使用して、現在の FsmEditor の設定を保存するか、またはファイルからアプリケーション設定を読み込みます。
- [Preferences] (設定): コマンドアイコンのサイズや最後にアクティブになったドキュメントの自動読み込みなど、アプリケーションやドキュメントを設定します。
- [View] (表示): [Frame] (選択範囲) または [Frame] (全体) を選択します。
- [Format] (フォーマット): ステート要素の配置とサイズを指定します。
- [Window] (ウィンドウ):
- [Tile] (左右に並べて表示): ウィンドウペインを水平に並べて表示します。
- [Tile] (上下に並べて表示): ウィンドウペインを上下に並べて表示します。
- [Tile] (重ねて表示): ウィンドウペインを重ねて表示します。
- [Lock] および [Unlock]: ウィンドウレイアウトのロックとロックの解除を切り替えます。
- チェックボックス付きのメニューアイテムのリスト: コントロールをクリックするとチェックマークが付き、そのコントロールが表示されます。
- [Help] (ヘルプ): [About] ダイアログに FsmEditor の情報を表示します。
FsmEditor を開くと空のキャンバスグリッドが表示されます。[Palette] の [FSM] タブから [State] 要素を選択してグリッド上にドラッグアンドドロップし、配置位置までドラッグします。[Property] または [Grid] をクリックして、選択したアイテムのステートプロパティを表示、編集します。
ステートを接続するには、ステート間に遷移ラインを描きます。ひとつのステートの端に、上矢印が表示されるようにカーソルを置いて他方のステートに向けてドラッグし、カーソルが再び上矢印になったらドロップします。
ステートのラベルは、ステートを選択してラベルをクリックすれば編集できます。ステートおよびステート間の遷移はコピー、貼り付けできます。また、選択したステートおよび遷移を [Prototypes] ペインに貼り付けるとプロトタイプが作成されます。これは名前を付けて再利用できます。
[Comment] 要素をステートにドラッグして、ステートに注釈を付けます。
モジュールには次のような機能があります。
- Program.cs: Main プログラムを含みます。このプログラムが、使用されている ATF クラスおよび内部クラスをリストした TypeCatalog を作成します。
- Editor.cs: IDocumentClient を実装して、ドキュメントを開き、視覚化し、保存し、閉じることができるようにします。
- Fsm.cs: DOM ルートノードを、AdaptableControl を使用して表示するために、有限ステートマシン (FSM) および有向グラフに適合させます。
- Document.cs: FSM を IDocument に適合させます。
- TransitionRouter.cs: 遷移の変更を追跡し、検証中に経路をアップデートするアダプタです。
- ViewingContext.cs: FSM に表示機能を提供するアダプタです。
- SchemaLoader.cs: FSM スキーマをロードし、データ拡張を DOM 型に登録し、型に表示情報と PropertyDescriptors の注釈を付けます。
- EditingContext.cs: FSM を編集用に適合させます。AdaptableControl による編集のために、IselectionContext、IvalidationContext、ItransactionContext、IhistoryContext、IinstancingContext、および IEditableGraph を実装します。