-
Notifications
You must be signed in to change notification settings - Fork 263
Core ATF Frameworks_j
中核的な ATF フレームワークは、ATF アプリケーションを構成する存在です。 フレームワークは、インターフェイスを実装をするクラスやコンポーネントとともにインターフェイスを定義することにより、機能を提供します。 このセクションでは、各フレームワークの主要なインターフェイスおよびクラスについて説明します。 クラスの多くは Managed Extensibility Framework (MEF) (英語) のコンポーネントです。
これらのクラスは目的に応じて変更や置換が可能ですが、複数のアプリケーションで使用できるように十分な汎用性を残しておくと便利です。
ここで記述されるほとんどのクラスは Sce.Atf.Applications
名前空間にあります。 主要な名前空間の説明は、ATF Namespaces (英語) を参照してください。 Class Survey (英語) では、代表的で便利な ATF クラスの概説を、名前空間別に参照できます。
各セクションは、より詳しい情報 ATF Programmer's Guide (英語) の該当セクションからの引用を記載しています。
アプリケーションシェルフレームワークには以下の中核となるアプリケーションサービスと、アプリケーションに必要な GUI インターフェイスがあります。
-
ControlHostService
: メニューやツールバーなどの、コントロールを保持するドッキングを提供します。 このコンポーネントのインターフェイスはIControlHostService
です。 このドッキングコントロールを使用すると、ドック上でウィンドウが移動できるようになります。また、現在のウィンドウ構成は保存できます。 詳細は、ControlHostService Component (英語) を参照してください。 -
CommandService
: 現在利用可能なアプリケーションコマンドをメニューとツールバーに表示し、キーボードショートカットを提供します。 インターフェイスはICommandService
です。 詳細は、CommandService Component (英語) を参照してください。 -
StatusService
: ステータスバーをメインフォームの下部に追加します。 このコンポーネントはIStatusService
インターフェイスを実装します。 詳細は、StatusService Component (英語) を参照してください。 -
SettingsService
: ユーザーが編集可能な設定 (基本設定) および、これらのアプリケーション設定の永続性を管理します。 インターフェイスはISettingsService
です。 詳細は、SettingsService Component (英語) を参照してください。
ほかの ATF コンポーネントをアプリケーションに追加して、単一インスタンスのアプリケーション (SingleInstanceService
)、未処理例外からの復帰 (UnhandledExceptionService
)、ユーザーフィードバック (UnhandledExceptionService
)、および自動バージョンアップデート (VersionUpdateService
) を実装できます。 これらのコンポーネントはすべて独立しており、省略や置換が可能です。
カスタム化として、System.Windows.Forms.ToolStripContainer
を追加して、ユーザー向けにコマンドツールバーを表示することが可能です。
アプリケーションシェルフレームワークは、Windows Presentation Foundation (WPF) のアプリケーションでも使用可能です。 WinForms と WPF の両方のコンポーネントおよびインターフェイスのバージョンがあります。 SettingsService
は GUI とのやりとりをしないため、WinForms と WPF の両方に使うことができます。
アプリケーションシェルフレームワークの詳細は、ATF Application Basics and Services (英語) を参照してください。
ドキュメントとは、アプリケーションが開き、ユーザーが何らかの方法で編集できるファイルのことです。 ドキュメントには、書式なしのテキストから、レベルエディターで作成したシーンのグラフィックまで、さまざまな内容があります。
ドキュメントフレームワークにより、ユーザーが作業中のドキュメントや、アクティブなドキュメントを、アプリケーションのコンポーネントで追跡できます。 アプリケーションドキュメントとの作業用の、インターフェイスとコンポーネントが含まれています。
インターフェイスを以下に示します。
-
IDocument
: 読み込み専用プロパティおよびダーティプロパティを提供する、アプリケーションドキュメントのインターフェイス。Sce.Atf
名前空間にあります。 詳細は、IDocument Interface (英語) を参照してください。 -
IDocumentService
: Open (開く)、Close (閉じる)、Save (保存)、Save As (名前を付けて保存) などの標準的なドキュメントサービスを提供します。また、ドキュメントのタイトルの有無を判断します。 コンポーネントは通知により、ユーザーのドキュメントへの作業内容を追跡可能です。 ドキュメントを管理するアプリケーションはいずれも、IDocumentService
を使用します。 詳細は、IDocumentService Interface (英語) を参照してください。 -
IDocumentRegistry
: ドキュメントレジストリへのインターフェイスです。 ドキュメントレジストリは開いてるドキュメントを把握し、ドキュメントが追加または削除された時に通知します。また、最後にアクティブになったドキュメントおよび、開いているドキュメントのコンテキストの追跡や、ドキュメントの種類によるフィルタリングを行います。 詳細は、IDocumentRegistry Interface and DocumentRegistry Component (英語) を参照してください。 -
IDocumentClient
: ドキュメントを開く、閉じる、開いているドキュメントの表示を行います。 このクライアントは実際のドキュメントデータを作業に使用するため、アプリケーションは読み込みまたは書き込み可能なドキュメントの種類ごとに、ドキュメントクライアントを実装する必要があります。 詳細は、IDocumentClient Interface (英語) を参照してください。
-
StandardFileCommands
: ドキュメントレジストリを変更する [File] (ファイル) メニューコマンドを実装します。 コマンドは、[New] (新規作成)、[Open] (開く)、[Save] (保存)、[SaveAs] (名前を付けて保存)、[Save] (すべて保存)、および [Close] (閉じる) です。 [New] (新規作成) コマンドと [Open] (開く) コマンドは、アプリケーションのIDocumentClient
オブジェクトごとに作成されます。 詳細は、StandardFileCommands Component (英語) を参照してください。 -
AutoDocumentService
: 前のアプリケーションセッションからドキュメントを開くか、もしくはアプリケーション開始時に空のドキュメントを作成します。 詳細は、AutoDocumentService Component (英語) を参照してください。 -
RecentDocumentCommands
: 最近開いたドキュメントを、アプリケーションの [File] (ファイル) > [Recent] (最近使用したドキュメント) サブメニューに追加します。 -
DocumentRegistry
: アプリケーション内で開いているドキュメントを追跡します。 アクティブなドキュメントや、指定された種類の最後にアクティブになったドキュメントを取得できます。 詳細は、Document Registry and Services (英語) および DocumentRegistry Component (英語) を参照してください。 -
MainWindowTitleService
: 現在のドキュメントおよびその状態 (変更の有無など) を、メインダイアログのタイトルに反映して更新します。 詳細は、MainWindowTitleService Component (英語) を参照してください。
ATF ドキュメントオブジェクトモデル (DOM) を使用してドキュメントデータを格納できます。 詳細は、ドキュメントオブジェクトモデル (DOM) フレームワーク を参照してください。
アプリケーションは通常、メニュー、ボタンおよび、その他のコントロールに、カスタムコマンドを追加する必要があります。 これがコマンドフレームワークの目的です。
CommandService
コンポーネント (もしくは類似するカスタムコンポーネント) は、メニューおよびツールバーのコマンドを処理するサービスです。 CommandService
は、コマンドの登録および登録解除、コンテキストメニューの表示、キーボードショートカットの処理を行うメソッドを含む ICommandService
インターフェイスを実装します。 CommandService
の詳細は、Registering Menus and Commands (英語) を参照してください。
CommandInfo
クラスは、ユーザーインターフェイス名およびキーボードショートカットなどの、コマンドに関する情報を提供します。 このクラスは、[File] (ファイル) や [Edit] (編集) のメニューアイテムコマンドなどの、一般的なコマンドの情報も設定します。 詳細は、CommandInfo Class (英語) を参照してください。
ICommandClient
は、ユーザーがコマンドのメニューアイテム、ツールボタン、もしくはツールストリップのアイコンをクリックすると、CommandService
がコマンドコードをコールバックするように実装するインターフェイスです。 ICommandClient
もコマンドが実行可能かどうかを判断します。 詳細は、Creating Command Clients (英語) を参照してください。
ATF コンポーネントには、アプリケーションにコマンドのセットを追加するものがいくつかあります。
-
StandardFileCommands
: 標準の [File] (ファイル) メニューのコマンドである、[Save] (保存)、[SaveAs] (名前を付けて保存)、[Save] (すべて保存)、および [Close] (閉じる) を追加します。 詳細は、StandardFileCommands Component (英語) を参照してください。 -
StandardSelectionCommands
: 標準の選択コマンドである、 [Select] (すべて選択)、[Deselect] (すべて選択解除)、および [Invert] (選択を切り替え) を追加します。 -
StandardShowCommands
: 標準の [Show] (表示) メニューのコマンドである、[Show] (選択項目の表示)、[Show] (直前に隠した項目を表示)、[Show] (すべて表示)、および [Isolate] (選択的表示) を追加します。 -
PropertyEditingCommands
: プロパティグリッドなどのプロパティエディターのコントロールで使用できる、プロパティ編集コマンドを提供します。 プロパティ編集の詳細は、プロパティ編集フレームワーク を参照してください。
これらのコンポーネントのコードも、アプリケーションにコマンドを追加する方法を示します。
コマンドの使用に関する詳細説明は、Commands in ATF (英語) を参照してください。
ATF は Microsoft の Managed Extensibility Framework (MEF) を使用して、アプリケーションに容易に追加できるコンポーネントを作成します。 詳細は、MEF with ATF (英語) を参照してください。 有用なコンポーネンツの一覧は、Important ATF Components (英語) を参照してください。
適応フレームワークは、オブジェクトを別の型に変換します。 「適応」とは、ある型のオブジェクトを、別の型のオブジェクトのように振る舞うことを可能にするプロセスです。 つまり、オブジェクトは独自のデータで、別の型の API のメソッド、プロパティおよび、イベントを使用できるようになります。 適応を、動的な型変換と考えることもできます。
オブジェクト A
を T
型に変換する適応を行うアダプターは、A
のすべての振る舞いとデータを持つオブジェクトで、かつ T
型のオブジェクトのように振舞います。 この場合、A
はアダプターの適応対象です。 オブジェクトが自身のアダプターになることもあります。
アダプターは IAdapter
インターフェイスを実装します。 適応対象は、指定された型のアダプターを取得する IAdaptable
インターフェイスを実装します。 上記やその他の適応インターフェイスの詳細は、General Adaptation Interfaces (英語) を参照してください。
D2dAdaptableControl
クラスは、コントロールアダプターのある基本コントロールを表します。 適応されたコントロールは、コントロールアダプターを追加することにより、回路コントロールなどのほかのコントロールをシミュレートできます。 D2dAdaptableControl
の利点を次に示します。
- これらのコントロールにコントロールアダプターを加え、新しい振る舞いを追加できます。 継承を使用せず、コントロールの外部から機能を追加できます。 また、ラベル編集などの新しい機能をアダプターに実装することも可能です。
- アダプターを追加するだけで新機能を加えることが可能です。標準コントロールクラスから派生する必要はありません。 これにより、
CanvasControl
、GraphControl
、CircuitControl
、StatechartControl
、TimelineControl
、CurveControl
、TreeControl
、PropertyGrid
などの標準コントロールを簡単に強化できます。
適応フレームワークのインターフェイスとコントロールは、名前空間 Sce.Atf.Adaptation
および Sce.Atf.Controls.Adaptable
にあります。
適応の概要は、Adaptation in ATF (英語) を参照してください。
インスタンス化フレームワークは、コピー、挿入、削除などの、編集可能なオブジェクトインスタンスと連携します。 インスタンス化フレームワークによりクリップボードからの貼り付け、キャンバス上への回路要素のドロップなどの、オブジェクトの挿入が可能です。 また、オブジェクトのコピーやクローンの作成、ならびにインスタンスの削除もできます。
インスタンス化フレームワークの主要なインターフェイスは IInstancingContext
です。 メソッドの CanCopy()
および Copy()
、CanInsert()
および Insert()
、CanDelete()
および Delete()
を提供します。 IInstancingContext
は System.Windows.Forms.IDataObject
インターフェイスを使用して Windows のクリップボードと統合し、ATF アプリケーションとほかのアプリケーション間でデータのエクスポートとインポートの両方を可能にします。 オブジェクトの編集が可能な場合は、コンテキストでこのインターフェイスを実装します。 詳しくは、IInstancingContext and IHierarchicalInsertionContext Interfaces (英語) を参照してください。
ATF は以下の部分でインスタンス化フレームワークを使用します。
-
StandardEditCommands
はIInstancingContext
を使用して、コピー、切り取り、貼り付け、削除の操作を実装します。 詳細は、StandardEditCommands and Instancing (英語) を参照してください。 - ドラッグアンドドロップ操作では、インスタンス化フレームワークを使用してオブジェクトをコンテキストに挿入します。 また、
IDataObject
インターフェイスもドラッグアンドドロップ操作に使用されます。 - グループ化コマンドなどの各種コマンドでもインスタンス化フレームワークを使用して、グループのすべてのオブジェクトを削除したり、グループにオブジェクトを挿入したりします。
StandardEditCommands
も、アクティブなコンテキストなどのコンテキスト情報にアクセスするために、コンテキストフレームワークを参照します。 StandardEditCommands
は、アクティブなコンテキストが IInstancingContext
インターフェイスを実装するかどうかを判断します。 StandardEditCommands
は、操作を実行する IInstancingContext
インターフェイスおよび、利用可能な場合には ITransactionContext
インターフェイスを使用して、[Edit] (編集) メニューコマンドの [Cut] (切り取り)、[Copy] (コピー)、[Paste] (貼り付け)、および [Delete] (削除) を提供します。 ITransactionContext
を使用すると、元に戻したり、やり直したりできるように、コマンドをトランザクションとして実行することが可能です。
インスタンス化の詳細は、Instancing In ATF (英語) を参照してください。
コンテキストフレームワークは、アプリケーションコンテキストを追跡し、アプリケーションコンテキストへの作業を行います。
コンテキストとは、何かを存在もしくは発生に関する環境条件または相関条件のことです。 コンテキストにはある種のアプリケーションデータの論理ビューがあり、ユーザーが表示や、編集に使用します。 ATF には多様なコンテキストがあり、さまざまな機能に対応します。 コンテキストには高い汎用性があり、異なる種類のデータの作業に使用されます。 詳細は、What is a Context (英語) を参照してください。
アプリケーションコンポーネントが正しいオブジェクトに正しい操作を実行するには、ユーザーの作業内容を追跡するコンテキスト情報が必要です。 アプリケーションコンポーネントはコンテキストフレームワークを使用して、現在システム内にあるドキュメントの追跡、パスが変更されたかどうかの確認、タブの更新 (非アクティブからアクティブ状態へなど)、最後に実行したコマンドの取り消し、現在選択中のオブジェクトの追跡などを行うことができます。
コンテキストレジストリは、アプリケーション内のアクティブコンテキストを追跡します。 ATF の ContextRegistry
コンポーネントは、コンテキストレジストリにアクセスする IContextRegistry
インターフェイスを実装します。 IContextRegistry
はアクティブで開いているコンテキストを追跡し、アクティブなコンテキストもしくは最後にアクティブになったコンテキストの取得を可能にします。 IContextRegistry
には、コンテキストの変更を追跡するイベントもあります。 IContextRegistry
により、アプリケーションによるユーザーの作業および、現在アクティブなものの追跡が容易になります。 たとえば、コマンドは IContextRegistry
を使用してコマンドが実行可能かどうかを確認できます。 詳細は、Context Registry (英語) を参照してください。
各コンテキストのタイプには、実行可能な内容を示すインターフェイスが関連付けられています。 コンテキストインターフェイスは、現在の選択の取得やデータの変更時期の判定などの、アプリケーションの一般的なタスクを実行するように設計されています。 容易に実装が可能な設計で、タスクごとに固有です。
主要なコンテキストインターフェイスは、以下のとおりです。
-
IHistoryContext
: ドキュメントが最後に保存された後の変更内容を追跡し、元に戻す/やり直しのコマンドを実装可能にします。 -
IInstancingContext
: アイテムのコピー、挿入、削除など、オブジェクトをインスタンス化できるコンテキストのインターフェイスです。 インスタンス化の詳細は、インスタンス化フレームワークを参照してください。 -
ILayoutContext
: アイテムの配置やサイズ変更に対応するコンテキストのインターフェイスです。 アイテムの境界となる四角形を取得、設定し、設定可能なアイテムの境界を判断するメソッドを含みます。 -
ILockingContext
: オブジェクトの変更や削除を不可にする、オブジェクトへのロックの有無を判断します。 -
IObservableContext
: リストやツリーデータのオブザーバーによる変更を追跡し、データとの同期を保つ編集可能なビューを実装可能にします。 -
IPropertyEditingContext
: プロパティ編集コンポーネントがプロパティおよびプロパティのあるアイテムを取得し、プロパティ編集コントロールがオブジェクトとプロパティを表示できるようにします。 詳細は、プロパティ編集フレームワーク を参照してください。 -
ISelectionContext
: コンテキストにおける重要な選択内容を抽出します。 選択内のオブジェクトの取得、選択の設定および、前回の選択の取得を行うメソッドを提供します。 -
ITransactionContext
: データのトランザクションの実装や、エディターデザインの簡素化に便利なインターフェイスです。 最終処理の実行前ならばいつでもトランザクションをキャンセルできるようにします。 -
IValidationContext
: ユーザーが論理コマンドを開始および終了した時に、イベントリスナーが検証を実行できるように、コンテキストがマーキングのイベントを提供します。 -
IViewingContext
: アイテムが表示可能なコンテキストに使用します。 現在のビューで、オブジェクトが表示されているか、もしくは表示可能かどうか、フレーム付きか、もしくはフレーム可能かどうかをメソッドが確認します。
ILockingContext
、IObservableContext
、ITransactionContext
および、IValidationContext
は Sce.Atf
名前空間にあります。
コンテキストの詳細は、ATF Contexts (英語) を参照してください。
プロパティ編集フレームワークは、コントロールを使用してプロパティを編集します。 プロパティ値エディターは、各プロパティのデータ型に応じた値の編集コントロールを提供します。 ATF には、さまざまな型のプロパティ値エディターおよび、値の編集コントロールがあります。 プロパティ編集の概要は、Using Properties in ATF (英語) を参照してください。
プロパティエディターは、選択されたもののプロパティを表示するため、現在のコンテキストに依存します。 何か選択されたものがあり、そのアクティブなコンテキストがプロパティ編集を許可する場合にのみ、プロパティエディターを使用できます。 ATF はコンテキストを使用して、どのプロパティエディターが適切かを判断します。
コンテキストがプロパティ編集を許可している場合、プロパティ編集フレームワークで次のいずれかのインターフェイスを実装します。
-
IPropertyEditingContext
: プロパティをコントロールで編集できるコンテキストのインターフェイスです。 -
ISelectionContext
: 現在の選択を取得し、選択が変更された場合に通知する、選択用コンテキストのインターフェイスです。 (コンテキストフレームワークも参照してください。)
プロパティ編集フレームワークを使うと、コンポーネントがプロパティを編集できます。
-
PropertyEditor
: 2 つの列を持つ編集コントロールである ATF のPropertyGrid
を使用して、オブジェクトの値と属性を編集します。 このコンポーネントを使用すると、選択された 1 つのみのアイテムのプロパティを閲覧、編集できます。 -
GridPropertyEditor
: スプレッドシートタイプの編集コントロールである ATF のGridControl
を使用して、オブジェクトの値と属性を編集します。 このコンポーネントを使用すると、選択されたすべてのアイテムのプロパティを閲覧、編集できます。 -
PropertyEditingCommands
:PropertyGrid
などのプロパティエディターのコントロール内で使用できるコンテキストメニューに、[Reset] (すべてリセット) や [Reset] (現在のプロパティ操作をリセット) などの、プロパティ編集コマンドを提供します
プロパティ編集フレームワークのコンポーネントは、現在のコンテキストを取得する IContextRegistry
インターフェイスを使用して、コンテキストフレームワークにアクセスします。
プロパティ編集の詳細説明は、Property Editing in ATF (英語) を参照してください。
ドキュメントオブジェクトモデル (DOM) フレームワークは、大量のアプリケーションもしくはゲームのデータの読み込み、格納、検証、変更内容の管理をアプリケーションコードから独立した状態で行う、強力で柔軟性と拡張性のある仕組みを提供します。 ATF ではアプリケーションによる DOM の使用は必須ではありませんが、アプリケーションデータの表現には最適な方法です。
アプリケーションデータは DOM ノード (DomNode
クラス) のツリーに格納されます。各 DOM ノードは、属性および子 DOM ノードを持ちます。 DOM ノード属性には、整数、文字列、もしくはそれらの配列などの、プリミティブなデータの型が格納されます。 特定の DOM ノードにある属性および子ノードは、DOM ノードの型に依存します。 通常、アプリケーションデータの型と対応する DOM ノードの型は XML スキーマ定義 (XSD) 言語で定義されますが、ほかの言語でも定義可能です。 DomNode
の詳細は、DomNodes and DOM Metadata Classes (英語) を参照してください。
ATF DOM は従来の XML DOM の実装とは異なり、ドキュメントデータをプリミティブ型の値や配列に変換します。そのため、大きな三角形メッシュなどのデータを表現するのに最適です。 また、アプリケーションのデータが XML ドキュメントとして格納できる場合、ATF の対応する DOM およびスキーマ/XML の使用は非常に有用です。
DOM アーキテクチャは DOM ノードアダプター (略称「DOM アダプター」) の概念も含みます。DOM アダプターは適応を使い C# API を DOM データ用に定義します。これにより、コードからゲームとアプリケーションのデータを切り離すことができます。 詳細は、DOM Adapters (英語) を参照してください。
ATF DOM の利点を以下に示します。
- マネージデータストアの設計がシンプルです。
- 通知イベントが DOM ノードごとにあり、DOM データの適応が簡単で強力です。
- 一意な名前付け、参照追跡、トランザクション実装、および名前検索を行う、オプションの DOM ノードアダプターがあります。
- DOM アダプターが、データの使用方法から DOM ノード内のデータストレージを切り離します。
Sce.Atf.Dom
名前空間にあります。 この名前空間のクラスには次の機能が含まれます。
- アプリケーションのデータ型を定義する XML スキーマの型定義ファイルを、読み込み、登録します。
- スキーマメタデータオブジェクトを使用して、アプリケーションのデータ型用の DOM データ型を定義します。
- 実際のアプリケーションデータを含む DOM オブジェクトの集まりや、リポジトリを作成、管理します。
- XML もしくは定義されたフォーマットで DOM データを読み込み、格納します。 ATF DOM は XML データの格納および取得に対する、組み込みサポートがあります。
- DOM アダプターを実装、登録し、基本の DOM ノードオブジェクトに動的オブジェクト API を作成します。
- スキーマで DOM 注釈を定義、管理し、データ型にカスタムのプロパティもしくは追加情報を加えます。 たとえば、データ型の編集もしくはレンダープロキシの指定に使用するコントロールを示す注釈を追加できます。
- ユーザーアクションなどの入力に基づいて出力データのセットを更新するように、DOM データに制約を追加しました。 たとえば、3D オブジェクトが拡大縮小もしくは回転されるたびに、変換一覧表を更新します。
- DOM のデータを検証します。
- ドキュメントの検索 (英語)
- ドキュメントの使用法 (英語)
- 動画
- チュートリアル
- 手順 (英語)
- プログラマーズガイド
- リファレンス (英語)
- コードサンプル
- ドキュメント
© 2014-2015, Sony Computer Entertainment America LLC