(57)【要約】【課題】革新的フレームワーク・アーキテクチャを使用して、最新のオブジェクト指向オペレーティング・システムを提供する。【解決手段】  コンピュータ・システムは、メモリとメモリのシステムアドレス空間に格納されたオペレーティング・システムを有し、デバイス・イベント信号を生成するユーザ入力装置と、メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する。オブジェクト指向アプリケーション・プログラムは、特定の機能を実行する論理およびデータを有する複数のオブジェクトを含む。【選択図】図１Ａ
2008176807.tif 000002
【特許請求の範囲】
【請求項１】
メモリと該メモリのシステムアドレス空間に格納されたオペレーティング・システムを有するコンピュータ・システムで使用する装置であって、デバイス・イベント信号を生成するユーザ入力装置と、前記メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する装置において、
（ａ）前記アプリケーションアドレス空間に生成され、前記オブジェクト指向アプリケーション・プログラムによって使用されるデータを操作する複数のメソッドを含む対話可能オブジェクトと、
（ｂ）前記システムアドレス空間に生成され、前記デバイス・イベント信号に応答して前記対話可能オブジェクトの操作メソッドのうち予め定められた１つを呼び出し、前記データを変更する対話オブジェクトと
を備えたことを特徴とする装置。
【請求項２】
前記コンピュータ・システムは、表示画面を含み、
前記対話可能オブジェクトは、前記表示画面に表示する画像を定義するデータを含むことを特徴とする請求項１に記載の装置。
【請求項３】
前記対話可能オブジェクトは、前記画像データを操作することにより前記表示画面上の画像のアピアランスを変更する選択メソッドを含むことを特徴とする請求項２に記載の装置。
【請求項４】
前記対話可能オブジェクトは、前記表示画面上の画像を動かすムーブ・メソッドを含むことを特徴とする請求項３に記載の装置。
【請求項５】
前記ユーザ入力装置は、マウスであり、
前記対話オブジェクトは、前記マウスからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すことを特徴とする請求項４に記載の装置。
【請求項６】
前記ユーザ入力装置は、キーボードであり、
前記対話オブジェクトは、前記キーボードからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すことを特徴とする請求項４に記載の装置。
【請求項７】
前記対話可能オブジェクトは、前記アプリケーションアドレス空間において、前記システムアドレス空間に格納された対話可能クラス情報から生成されることを特徴とする請求項１に記載の装置。
【請求項８】
前記対話可能オブジェクトは、前記システムアドレス空間において、前記システムアドレス空間に格納された対話クラス情報から生成されることを特徴とする請求項１に記載の装置。
【請求項９】
前記対話オブジェクトは、前記デバイス・イベント信号に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の１つを呼び出し、前記要求された動作を実行することを特徴とする請求項１に記載の装置。
【請求項１０】
前記対話オブジェクトは、前記デバイス・イベント信号の時間系列に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の１つを呼び出し、前記要求された動作を実行することを特徴とする請求項１に記載の装置。
【請求項１１】
前記コンピュータ・システムは、表示画面を含み、
前記表示画面の一部に情報を表示する手段と、前記デバイス・イベント信号に応答するビューオブジェクトにおいて対話オブジェクトのインスタンスを作成する手段とを有するビューオブジェクトをさらに備えたことを特徴とする請求項１に記載の装置。
【請求項１２】
メモリと該メモリのシステムアドレス空間に格納されたオペレーティング・システムを有するコンピュータ・システムで使用するコンピュータ・プログラム製品であって、デバイス・イベント信号を生成するユーザ入力装置と、前記メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供するコンピュータ・プログラム製品において、
（ａ）前記アプリケーションアドレス空間に対話可能オブジェクトのインスタンスを生成するプログラム・コードであって、前記対話可能オブジェクトは、前記オブジェクト指向アプリケーション・プログラムによって使用されるデータを操作する複数のメソッドを含むプログラム・コードと、
（ｂ）前記システムアドレス空間に対話オブジェクトのインスタンスを生成するプログラム・コードであって、前記対話オブジェクトは、前記デバイス・イベント信号に応答して前記対話可能オブジェクトの操作メソッドのうち予め定められた１つを呼び出し、前記データを変更するプログラム・コードと
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項１３】
前記コンピュータ・システムは、表示画面を含み、
前記対話可能オブジェクトは、前記表示画面に表示する画像を定義するデータを含むことを特徴とする請求項１２に記載のコンピュータ・プログラム製品。
【請求項１４】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記画像データを操作することにより前記表示画面上の画像のアピアランスを変更する選択メソッドを含む前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項１３に記載のコンピュータ・プログラム製品。
【請求項１５】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記表示画面上の画像を動かすムーブ・メソッドを含む前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項１４に記載のコンピュータ・プログラム製品。
【請求項１６】
前記ユーザ入力装置は、マウスであり、
前記対話オブジェクトは、前記マウスからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すプログラム・コードを含むことを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【請求項１７】
前記ユーザ入力装置は、キーボードであり、
前記対話オブジェクトは、前記キーボードからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すプログラム・コードを含むことを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【請求項１８】
前記システムアドレス空間に前記対話可能クラス情報をロードするプログラム・コードをさらに備え、
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記アプリケーションアドレス空間において、前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項１２に記載のコンピュータ・プログラム製品。
【請求項１９】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記対話オブジェクトは、前記システムアドレス空間において、前記システムアドレス空間に格納された対話可能クラス情報から前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項１２に記載のコンピュータ・プログラム製品。
【請求項２０】
前記対話オブジェクトは、前記デバイス・イベント信号に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の１つを呼び出し、前記要求された動作を実行するプログラム・コードでインスタンス化されることを特徴とする請求項１２に記載のコンピュータ・プログラム製品。
【請求項２１】
前記対話オブジェクトは、前記デバイス・イベント信号の時間系列に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の１つを呼び出し、前記要求された動作を実行するプログラム・コードでインスタンス化されることを特徴とする請求項１２に記載のコンピュータ・プログラム製品。
【請求項２２】
前記コンピュータ・システムは、表示画面を含み、
前記表示画面の一部に情報を表示する手段と、前記デバイス・イベント信号に応答するビューオブジェクトにおいて対話オブジェクトのインスタンスを作成する手段とを有するビューオブジェクトのインスタンスを生成するプログラム・コードをさらに備えたことを特徴とする請求項１２に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、表示システムにおける改良に関し、より具体的には、オブジェクト指向オペレーティング・システムを提供することに関する。
【背景技術】
【０００２】
ワークステーション・ソフトウェアの開発者の間で、ユーザ・インターフェイス内の一貫性を維持しながらフレキシブルなソフトウェア環境を提供することの重要性が増してきている。この種の動作環境を提供する初期の試みがヘルナンデスらの米国特許第４，６８６，５２２号に開示されている。この特許はカーソルの位置にある動的オブジェクトをユーザが引き出して、そのオブジェクトから種々の関数を引き出すことができるグラフィックとテキストの結合処理システムについて議論している。この種のユーザとの自然な相互作用あるいは対話はユーザ・インターフェイスを改善し、アプリケーションをより直感的にする。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
また、オブジェクト指向アプリケーションは、どのアプリケーションが現在アクティブであるかに関係なく、ユーザとの一貫性のある対話（インターアクション）インターフェイスを反映している必要がある。本件出願人が知っている公知文献には、いずれも、すべてのオブジェクト指向アプリケーションが、オブジェクト指向機能をオペレーティング・システムに組み入れるように構築することによって統一的に機能することを可能にする革新的なハードウェアおよびソフトウェア・システム機能が記載されていない。
【課題を解決するための手段】
【０００４】
従って、本発明の主要目的は革新的なオブジェクト指向アプリケーション・インターフェイスを提供することである。オブジェクト指向オペレーティング・システムのグラフィカル・ユーザ・インターフェイスのユーザは、マウスを移動し、オブジェクト上でクリックしてオブジェクトを選択し、オブジェクトをドラグしてオブジェクトを移動またはコピーし、ダブル・クリックしてオブジェクトをオープンしているのが普通である。これらのオペレーションは直接操作(direct manipulation)とも、対話(interaction−やりとりすること）とも呼ばれている。ユーザがマウスを押し、移動し、解放することに対応する一連のイベントは、入力シンタクス(input syntax)と呼ばれている。ある種のイベント列は、セマンティック・オペレーション(semantic operation)と呼ばれる特定のアクションを示すために使用されている。本発明によれば、選択(Select)、ピーク(Peek)、移動(Move)、自動スクロール(AutoScroll)、およびドラグ／ドロップ（コピー）(Drag/Drop(Copy))をサポートするオブジェクトについて入力シンタクスをセマンティック・オペレーションに変換する方法および装置が開示されている。
【０００５】
本発明では、マウス・ボタンが押されたことを検出すると、次のようなロジック（論理）が採用される。
【０００６】
（ａ）ユーザがマウス・ボタンを押したときオプション(Option)キーが押されていれば、システムは、変数fInteractionType（fインターアクション・タイプ）を定数kDrag（ｋドラグ）にセットすることによってドラグ・モードに入る。そのあとシステムは、選択されたオブジェクトをオペレーションのターゲットとしてドラグ・オペレーションを開始する。
【０００７】
（ｂ）オプション・キーが押されていなければ、システムは、変数fInteractionTypeを定数kSelect（ｋ選択）にセットすることによって選択モードに入る。そのあと、選択オペレーションが開始される。
【０００８】
ユーザがすでにマウス・ボタンを押していて、マウス・ボタンを押えたままにしていれば、次のようなロジックに入る。システムが選択モードにあれば、システムは、まず、ユーザが移動スレッショルド(move threshold)と呼ばれる、一定のスレッショルドを越えてマウスを移動させたかどうかを判断する。これは、GetInitialLocation（初期位置獲得）メソッドから返された初期マウス位置を、GetCurrentLocation（現在位置獲得）メソッドから返された現在マウス位置を比較することによって行われる。マウスが移動スレッショルドを越えて移動していれば、システムは選択モードを終了し、移動モードに入る。これは、変数fInteractionTypeを定数kMove（ｋ移動）にセットすることによって行われる。そのあと、システムは、そのSelectEnd（選択終了）メソッドをコールすることによって選択モードを終了するようにオブジェクトに指示する。次に、システムは、そのMoveBegin（移動開始）メソッドをコールすることによって移動オペレーションを開始する。
【０００９】
逆に、マウスが移動していなければ、システムはマウスがどれだけ長く押されていたかをチェックする。これは、GetInitialTime（初期時間獲得）メソッドから返された初期マウス押え時間を、GetCurrentTime（現在時間獲得）メソッドから返された現在時間と比較することによって行われる。マウスがピーク・スレッショルドと呼ばれる一定のスレッショルドを越えて押されていれば、システムは選択モードを終了し、ピーク・モードに入る。これは、変数fInteractionTypeを定数kPeek（ｋピーク）にセットすることにより行われる。システムは、SelectEnd（選択終了）メソッドをコールすることによって選択オペレーションを終了するようにオブジェクトに指示し、PeekBegin（ピーク開始）メソッドをコールすることによってピーク・オペレーションを開始する。逆に、マウスが移動していなければ、あるいはマウスがピーク・スレッショルドを越えて押えられていなければ、システムはオブジェクトのSelectRepeat（選択反復）メソッドをコールすることによって選択オペレーションを継続する。ユーザが移動モードに入っていることをシステムが検出すると、システムは、まず、ユーザがマウスをウィンドゥ内で移動したか、ウィンドゥの境界上で移動したか、ウィンドゥの外で移動したかを判断する。これは、GetCurrentLocation（現在位置獲得）メソッドから返された現在位置を、GetContainerBounds（コンテナ境界獲得）から返されたオブジェクトのコンテナの境界と比較することによって行われる。
【００１０】
マウスがまだウィンドゥ内にあれば、システムは、オブジェクトのMoveRepeat（移動反復）メソッドをコールすることによって移動オペレーションを継続する。マウスがウィンドゥの境界上にあれば、これは自動スクロール(AutoScroll)オペレーションを示している。システムは、マウス位置で示された方向にスクロールするようにオブジェクトのコンテナに指示する。これは、コンテナのAutoScrollメソッドをコールし、現在マウス位置をパラメータとして渡すことによって行われる。完了すると、システムはオブジェクトのMoveRepeatメソッドをコールすることによって移動オペレーションを継続する。
【００１１】
マウスがウィンドゥの外に移動していれば、システムは移動モードを終了し、ドラグ・モードに入る。これは、変数fInteractionTypeを定数kDrag（ｋドラグ）にセットすることにより行われる。システムは、そのMoveEnd（移動終了）メソッドをコールすることによって移動オペレーションを終了するようにオブジェクトに指示する。システムは、そのDragBegin（ドラグ開始）メソッドをコールすることによってドラグ・オペレーションを開始するようにオブジェクトに指示する。システムがドラグ・モードにあれば、システムはオブジェクトのDragRepeat（ドラグ反復）メソッドをコールすることによってドラグ・オペレーションを継続する。システムがピーク・モードにあれば、システムは、まず、ユーザが移動スレッショルドと呼ばれる一定のスレッショルドを越えてマウスを移動したかどうかを判断する。これは、GetInitialLocationメソッドから返された初期マウス位置を、GetCurrentLocationメソッドから返された現在マウス位置と比較することにより行われる。
【００１２】
マウスが移動スレッショルドを越えて移動していれば、システムはピーク・モードを終了し、移動モードに入る。これは、変数fInteractionTypeを定数kMove にセットすることにより行われる。システムは、そのPeekEnd（ピーク終了）メソッドをコールすることによってピーク・オペレーションを終了するようにオブジェクトに指示する。システムは、そのMoveBegin（移動開始）メソッドをコールすることによって移動オペレーションを開始するようにオブジェクトに指示する。逆に、マウスが移動していなければ、システムはオブジェクトのPeekRepeat（ピーク反復）メソッドをコールすることによってピーク・オペレーションを継続する。
【００１３】
ユーザがマウス・ボタンを解放したことをシステムが検出すると、システムが選択モードに入っていれば、システムは選択モードを終了する。これは、変数fInteractionTypeを定数kNone（ｋ無し）にセットすることにより行われる。システムは、SelectEnd（選択終了）メソッドをコールすることによって選択オペレーションを終了するようにオブジェクトに照会する。システムが移動モードに入っていれば、システムは移動モードを終了する。これは、変数fInteractionTypeを定数kNoneにセットすることにより行われる。そのあと、システムは、そのMoveEnd（移動終了）メソッドをコールすることによって移動オペレーションを終了するようにオブジェクトに照会して、変数fInteractionTypeを定数kNoneにセットすることによりドラグ・モードを終了する。システムは、そのDragEnd（ドラグ終了）メソッドをコールすることによってドラグ・オペレーションを終了するようにオブジェクトに指示する。システムがピーク・モードに入っていれば、システムはピーク・モードを終了する。これは、変数fInteractionTypeを定数kNoneにセットすることにより行われる。システムは、PeekEnd（ピーク終了）メソッドをコールすることによってピークを終了するようにオブジェクトに指示する。
【発明を実施するための最良の形態】
【００１４】
本発明は、ＩＢＭ（登録商標）社のＰＳ／２（登録商標）あるいはアップル（登録商標）社のマッキントッシュ（登録商標）コンピュータのようなパーソナル・コンピュータ上に駐在するオペレーティング・システムで実現されることが望ましい。代表的なハードウェア環境を第１Ａ図に示す。この図は、従来のマイクロ・プロセッサのような中央演算装置１０と、システム・バス１２に内部接続された多数の他のユニットを有する本発明のワークステーションの典型的なハードウェア構成を示している。第１Ａ図に示されるワークステーションは、ランダム・アクセス・メモリ（ＲＡＭ）１４と、リード・オンリ・メモリ（ＲＯＭ）１６と、ディスク・ユニット２０のような周辺装置をバスに接続するためのＩ／Ｏアダプタ１８と、キーボード２４、マウス２６、スピーカー２８、マイクロフォン３２、および／あるいはタッチ画面装置（図示せず）のような他のユーザ・インターフェイス装置をバスに接続するためのユーザ・インターフェイス・アダプタ２２と、ワークステーションをデータ処理ネットワークに接続するための通信アダプタ３４と、バスを表示装置３８に接続するための表示アダプタ３６とを具備している。ワークステーションは、その上に駐在するＩＢＭ社のＯＳ／２（登録商標）オペレーティング・システムあるいはアップルのシステム／７（登録商標）オペレーティング・システムのようなオペレーティング・システムを有する。
【００１５】
本発明は、オペレーティング・システムとエンド・ユーザ、開発者、およびシステム・ベンダのためのパーソナル・コンピュータの使用に革命をもたらすように意図された開発環境からなる新規なオブジェクト指向システム・ソフトウェア・プラットフォームである。このシステムは、完全なスタンド・アローン・タイプのネイティブ・オペレーティング・システムであり、また高性能パーソナル・コンピュータのためのバックグラウンドから達成された開発環境である。本発明は、フレームワークの価値、クラス・ライブラリおよび新世代オブジェクト指向プログラミング環境を含む完全なオブジェクト指向システムであり、サードパーティのアプリケーション・ソフトウェアの開発の経済性を基本的に改善するよう意図されている。本発明は完全にポータブルなオペレーティング・システムである。
【００１６】
従来のオペレーティング・システムは、ソフトウェア開発者がソフトウェアを創作するために使用できる１組のサービスを提供する。それらのプログラムはオペレーティング・システム環境全体の中に非常に緩く統合されている。例えば、ＤＯＳアプリケーションはマシン全体を支配する。これは、ユーザに関する限り、アプリケーションはオペレーティング・システムであることを意味する。マッキントッシュ（登録商標）およびウィンドウズ（登録商標）・オペレーティング・システムでは、アプリケーションは同じように見え、それらはアプリケーション間での切り出し（カット）と貼り付け（ペースト）をサポートしている。この共通化によりユーザが単一環境で多数のアプリケーションを使用することが容易となった。しかしながら、その共通化はサービスとフレームワークに組み入れられていないので、ソフトウェアを開発することはまだ非常に困難である。
【００１７】
本発明では、“アプリケーション”を書くことは、オペレーティング・システム環境に統合されるオブジェクトの組を創造することを意味する。ソフトウェア開発者は、ソフトウェアを開発するための複雑なサービスの組とフレームワークの両方のためのオペレーティング・システムにたよることができる。本発明のフレームワークは、ソフトウェア開発者が基盤を構築するよりはむしろ問題に集中することを可能とする強力な抽象化を提供する。さらに、ソフトウェア開発者のための基本的抽象化は、ユーザがソフトウェアを操作するために理解しなければならない基本的な概念に非常に近い。このアーキテクチャにより、複雑なアプリケーションの開発が容易となる。
【００１８】
このセクションでは、本発明を採用するソフトウェアを書くため４つのステップを述べる。アプリケーションの開発を意図するユーザは一般に以下の質問に関心がある。  
・何をモデル化するか  
ワードプロセッサではこれは入力しようとするテキストであり、スプレッドシートではそれはセル内の値と公式である。  
・データをどのように表現し提供するか  
再び、ワードプロセッサでは文字が適当な改行および改ページを用いて画面上に“見るものが得るもの”(wysiwyg)形式で表示され、スプレッドシートでは表またはグラフとして表示され、構造化グラフィック・プログラム（例えばマックドロー(MacDraw))では、グラフィック・オブジェクトの組として表示される。  
・何が選択可能か  
ワードプロセッサアプリケーションでは、選択されるのは文字の範囲であり、構造化グラフィック・プログラムではグラフィック・オブジェクトの組である。  
・この選択の上で動作するコマンドは何か  
ワードプロセッサではコマンドは文字のスタイルをボールドに変更することかもしれない。構造化グラフィック・プログラムにおけるコマンドはグラフィック・オブジェクトを回転させることかもしれない。第１Ｂ図は本発明による表示を示す。表示の前面にピクチャーをもってくるためのコマンドは４１に描かれている。グラフィック情報のプレゼンテーションは４０に描かれている。最後に、特定のグラフィック・オブジェクト、円の選択が４２に示されている。
【００１９】
開発者は、ユーザからたずねられる同じ４つの質問に答えなければならない。幸運にも、本発明はこれら４つの質問の各々を志向するサービスとフレームワークを提供する。答えられなければならない最初の質問は、何をモデル化するかである。ワードプロセッサ・プログラムではデータは文書を構成する文字を含む。スプレッドシートでのデータはセル内の値と公式を含む。カレンダ・プログラムではデータは時間と日付に関係するアポイントを含む。本発明は、データをモデル化するのを助ける機能を提供する。テキスト、構造化グラフィックス、サウンド、および映像を含む特定のデータ形式をモデル化するためのクラスが存在する。これらの特定のクラスに加えて、本発明は、コレクション・クラス、同一制御、リカバリ・フレームワークおよびＣ＋＋言語を含む、問題のモデル化をサポートする多数の他の抽象化を提供する。特定のデータ形式のためにデータ・モデルをカプセル化するクラスは、そのデータ・カプセルに含まれるデータをアクセスし修正するための特定のプロトコルと、他のデータ・カプセルを埋め込み、他のデータ・カプセルに埋め込まれるためのジェネリックなプロトコルをオーバライド(override)にするためのサポートと、データが変わるときのすべての登録されたオブジェクトに対する通知と、データのプレゼンテーションを生成するためのジェネリックなプロトコルのオーバライドとを提供する。
【００２０】
答えなければならない次の質問はデータをどのように提供するかである。構造化グラフィック・プログラムではグラフィック・オブジェクトの組は一般にキャンバス上に描かれる。スプレッドシートではそれは通常、セルの表あるいはグラフである。プレゼンテーション・プログラムではスライドの組あるいはアウトラインである。本発明は、データ・カプセルに含まれるデータの“ながめ（ビュー、view）”を提供する。ビューは“ビュー(view)システム”とグラフィック・システムのセルを用いて生成される。しかしながら、サウンドあるいはビデオ・クリップを動作させることもデータのプレゼンテーションとして考えられる。
【００２１】
次に、何が選択されるかである？  
ワードプロセッサ・プログラムでは、選択されるのは文字の範囲であり、構造化グラフィック・プログラムではグラフィック・オブジェクトの組である。スプレッドシートではセルの範囲である。本発明は、システムがサポートする全ての基本的なデータ形式のために選択クラスを提供する。ユーザによりなされた選択を表す抽象ベース・クラスは選択されたデータの、アドレス空間から独立した指定を提供する。テキストでは、これは文字に対する一対のポインタよりはむしろ文字の数値範囲であるであろう。この限定は、他のユーザとの（リアルタイムでの）共同作業のとき、選択された範囲が他のマシンとの間で交換されるので重要である。ベース・クラスはまたジェネリック・プロトコルをオーバライドして、この選択に対応する持続的選択を生成する。持続的選択はアンカー・オブジェクトのサブクラスであり、持続的選択が変更の編集から生き延びなければならないので、対応する短命な選択より重いと考えられる。例えば、持続的テキスト選択は、テキストがその前後に挿入されるときそれ自身を調整しなければならない。アンカーはハイパーメディアのリンク、データ・フローのリンクおよびアノテーションの実行に際して使用される。
【００２２】
ベース・クラスはまた、データ・カプセル内に含まれるデータを吸収し、埋め込み、送り出するためのオーバライド・ジェネリック・プロトコルを提供する。ベース・クラスはそれらを生成するために使用されるユーザ・インターフェイス技術から独立である。選択は、一般的に（例えばテキストの範囲あるいはセルをトラック（追尾）して）ユーザによる直接操作を介して生成されるが、スクリプトを介してあるいはコマンドの結果として生成されてもよい。このユーザ・インターフェイスとの直交性が非常に重要である。ベース・クラスはまたデータ・カプセルをアクセスするための特定のプロトコルを提供する。カプセル・クラスの特定のサブクラスとモデル選択クラスのサブクラスとの間には非常に強い関連性がある。
【００２３】
最後に、この選択された範囲について動作をすることができるコマンドは何か。ワードプロセッサのプログラムでは、コマンドは文字の選択された範囲のスタイルを変更するものでもよく、構造化グラフィック・プログラムではコマンドはグラフィック・オブジェクトを回転させるものでもよい。本発明は、多くのユーザ・インターフェイス・コマンドと共に、カット、コピー、ペースト、ハイパーメディア・リンク・スタート、リンク完了、リンクの運行、リンク上でのデータのプッシュ、リンク上でのデータのプルをするためのジェネリック・コマンドを提供すると共に、全ての組込データ形式のための多数の組込コマンド・オブジェクトを提供する。ユーザにより作られたコマンドを表すアブストラクト・ベース・クラスは、ユーザ・アクションのセマンティクス（意味）を捉える責任を負い、コマンドがドゥ（do：実行）され、アンドゥ（undo：取り消し）され、リドゥ（redo：再実行）されることができかどうかを決定する。コマンド・オブジェクトは、コマンドがドゥされた後、コマンドをアンドゥするために必要な情報のすべてをカプセル化する責任を負う。コマンドが実行される前は、コマンド・オブジェクトは、ユーザ・アクションの非常にコンパクトな表現である。ベース・クラスは、それらを生成するために使用されるユーザ・インターフェイスの技術から独立である。コマンドはユーザによる直接の操作（例えば、グラフィック・オブジェクトの移動）を介して、あるいはメニューから一般に生成されるが、スクリプトを介して生成されることはできない。ユーザ・インターフェイスとの直交性は非常に重要である。
【００２４】
（フレームワークの利益）
本発明内の抽象化にプラグを差し込む利益は、概念的モデルを提供するよりも大きい。フレームワークにプラグを差すことはベース・オペレーティング・システム中に構成された多くの複雑な特徴を提供する。これは、比較的小さいメソッドをコールすることによりフレームワークが多数のユーザ特徴を実行することを意味する。フレームワークのための符号化への投資がいくつかの特徴に渡って影響をもたらす。
【００２５】
新種のデータが操作されると、新しいデータ形式がシステムの一部となる。データのカプセルを取り扱うことができる既存のソフトウェアは修正無しに新しいデータ形式を取り扱うことができる。これは、マッキントッシュ・コンピュータ・システムのような現在のコンピュータ・システムとは異なる。例えば、スクラップ・ブック・デスク・アクセサリはある種のデータを格納することができるが、テキストあるいはクイックドロー画像成分を有するデータを表示することができるだけである。対照的に、本発明のスクラップ・ブックは、オブジェクトの形でデータを取り扱うので、あらゆる種のデータを表示する。生成された新しいデータ形式はシステム提供データ形式と全く同様に振る舞う。加えて、スクラップ・ブック内のデータは、オブジェクトがデータを編集するための標準プロトコルを提供するので、編集可能である。
【００２６】
スクラップ・ブックの例はデータのカプセル化の長所を際立たせる。ソフトウェアがデータのカプセル化を扱うことができるように開発されていれば、アプリケーションを、新しいデータ形式を簡単に扱うように設計することができる。新しいアプリケーションは修正無しに新しい形式のデータを表示し編集することができる。
【００２７】
（マルチレベル・アンドゥ）
本発明はマルチレベル・アンドゥをサポートするように設計されている。この特徴を折り込むことは、しかしながら、開発者の側に余分な努力を要求しない。システムは、生成されるすべてのコマンド・オブジェクトを単に思い出すだけである。対応するコマンド・オブジェクトが存在する限り、ユーザは、データへの特定の変更をアンドゥ、即ち取り消すことができる。システムが、コマンドを保存し、どのコマンドをアンドゥあるいはリドゥ（再実行）すべきかを決定するので、ユーザはアンドゥの手順を折り込まない。
【００２８】
データのカプセル化のプロトコルの一部は、データをストリームにファイルすることと他の場所および／あるいは他の時間までデータを休ませることを行う。システムは、このプロトコルを使用してドキュメントの保存を行う。デフォルトでは、ユーザのデータ・オブジェクトは、保存されるときファイルに流される。ドキュメントがオープンされているときは、データ・オブジェクトは休まされる。システムは、データ管理フレームワークを使用してディスクに書かれたデータが一貫性をもつ状態であることを確認する。ユーザは、システムが壊れたときにデータがディスク上に保たれているように、しばしばファイルを保存しようとする。システムがすべてのコマンド・オブジェクトを保持するので、本発明はこの種の保存を必要としない。ドキュメントの状態は、ドキュメントの最新のディスクバージョンから始めて、その時点からのコマンド・オブジェクトを再度与えることにより再構成することができる。信頼性のために、システムはコマンド・オブジェクトが起動される毎にそれらをディスクに自動的にログするので、システムが壊れたとしてもユーザは最後のコマンド以外失うことはない。本発明はまたドキュメントのバージョン化をサポートする。ユーザはドキュメントの現在の状態からドラフトを生成することができる。ドラフトは特定の時点におけるドキュメントの不変の“スナップショット”である（ドラフトを生成する１つの理由はコメントのために他のユーザにそれを回覧することである）。システムは新しいドラフトの生成に含まれる詳細を自動的に扱う。
【００２９】
（協同作業）
上記のように、ドキュメントは、ある過去の時の状態から始め、そのとき以降なされたコマンド・オブジェクトのシーケンスを適用することにより再構築することができる。このためユーザは故障の場合に仕事を回復することができ、リアルタイム協同作業をサポートすることができる。コマンド・オブジェクトは選択されたものについて動作し、それらの選択されたものはアドレス空間に独立である。従って、選択されたオブジェクトをネットワークを介して協同作業者に送ることができ、遠隔マシンで使用することができる。同じことがコマンド・オブジェクトについても言える。１人の協同作業者が行ったコマンドを他の者に送り同じようにそれらの者のマシンで実行することができる。協同作業者が同一のデータコピーから始めるならば、コピーは協同作業者が変更を行うにつれて“同期して”残る。選択の生成はコマンド・オブジェクトを使用して行うので、すべての協同作業者は同じ現在の選択をもつ。
【００３０】
システムは、“モデル・ペース・トラッキング”として知られている特徴を用いて各協同作業者のマシン上でマウス・トラッキングを行う。マウスの押下を扱うように生成されたトラッカー・オブジェクトはユーザがマウスを動かすにつれて一連のインクレメンタルコマンドを生成し実行する。これらのコマンドは協同作業者に送られて各協同作業者により実行される。各協同作業者はそれが起きるにつれてトラッキング・フィードバックをビューすることになる。システムはまた共同作業ポリシーを確立する。共同作業ポリシーは、データに変更を加えるときあるいは自由に変化するとき、ターンするように強制されるかどうかを決定する。本発明はアプリケーション開発者から責任を取り除く共同作業マシンを取り扱う。
【００３１】
（スクリプト）
コマンド・オブジェクトのシーケンスを管理するようにシステムを設計すると、システムワイドのスクリプト機能を実行することが可能となる。コマンド・オブジェクトのシーケンスはローカルアクションのスクリプトと等価である。スクリプト機能は、あるドキュメントに適用されるコマンド・オブジェクトを単にトラッキング（追尾）し続ける。スクリプト機能はまた、スクリプトに際して選択オブジェクトを使用する。この機能は、適用する選択を変えることによりスクリプトの注文化を提供する。コマンド・オブジェクトはそれらが特定の選択に適用できるかどうかを示すためのプロトコルを含むので、システムはユーザのスクリプトの変更が妥当であることを確認する。
【００３２】
（ハイパーメディアのリンク）
アンカーとして知られている持続的な選択はリンク・オブジェクトにより接続されることができる。リンク・オブジェクトは、その終点を形成する２つのアンカーへの参照を有する。システムでは、リンクは双方向であり、両端は等しい能力を有する。リンクのより高いレベルの使用はリンクに方向を課すことができる。単一リンク・オブジェクトは２つの標準的特徴、即ち運行とデータ・フローとをサポートする。ユーザはリンクの一端から他端へ運行する。通常、これは指定アンカーを含み、持続的な選択をハイライトとするドキュメントをオープンすることを含む。正確な振る舞いは宛先でのアンカー・オブジェクトにより決定される。例えば、アニメーションへのリンクはアニメーションを演ずることができる。データベースクエリーへのリンクはクエリーを実行する。
【００３３】
また、リンクはデータ・フローを容易にする。リンクの一端で選択されたデータは他端に転送され、そこで選択を置き換える。ほとんどの場合、その効果は、ユーザが一端で選択をコピーし、他端へ運行するようにリンクを使用し、データを貼り付けることと同じである。システムは、リンクの一端から他端への運行（例えば、宛先ドキュメントを置き、それをオープンし、宛先アンカーをビュー（視野）内にスクロールする等）が含まれる詳細を取り扱う。同様に、システムは、リンクを横切るデータの転送の詳細を取り扱う。後者は、それが参照するデータをアクセスし、修正するための選択のプロトコルを用いて実行される。
【００３４】
（注釈（アノテーション））
本発明はシステムワイドの注釈の機能をサポートする。この機能により著者（使用者）は見直しのためドキュメントのドラフトを分配することができる。見直し者はドキュメントにポスト・ノート(posted note) 添付することができ、実行されたとき著者にドキュメントを戻す。著者はポスト・ノートを調べ、それぞれについてアクションを取る（著者はドキュメント内のポスト・ノートを生成することができる）。見直し者が著者と同じソフトウェアをもつ必要はない。代わりに、見直し者は標準注釈アプリケーションを使用することができる。このアプリケーションは著者のドラフトからデータを読み、注釈可能なプレゼンテーションを生成する（そのようなプレゼンテーションの生成は標準データ・カプセルプロトコルの一部である）。
【００３５】
見直し者は、ドキュメント内に選択を生成することができ、その選択にポスト・ノートをリンクすることができる。ポスト・ノートと選択の間のリンクによりシステムはそれが参照する選択に“近い”ポスト・ノートを位置決めすることができる。リンクはまた注釈構造を明白にし、システムは注釈を処理するように標準コマンドを実行することができる。ポスト・ノートの内容は、単なるテキストあるいはグラフィックではなく、システム内で実行されるデータ形式でよい。ノートの内容はデータ・カプセルを用いて実行され、ノートをオープンすることはデータの編集可能プレゼンテーションを生成することになる。
【００３６】
（データ表現）
データ表現は、モデル化するデータは何かとの質門への答えと関係する。本発明はデータのモデル化を助ける機能を提供する。テキスト、構造化グラフィックス、サウンドおよび映像を含めて、特定のデータ形式をモデル化するためのクラスがある。これらの特定のクラスに加えて、本発明は問題をモデル化するのを助ける多数の他の抽象化、コレクション（収集）クラス、同時の制御と回復フレームワーク、およびＣ＋＋言語自身を提供する。本発明の主題では、特定データ形式のためのデータ・モデルをカプセル化するクラスはカプセル化クラスのサブクラスである。
【００３７】
（カプセル化クラス(Encapsulator Class)）
開発者は、カプセル化クラスから導かれるクラスを生成することにより特定形式のデータ表現に対するコンテナを生成する。例えばグラフィック・オブジェクト、様式化されたテキスト、スプレッドシートのセルのようなシステム内の各形式のデータのために、ある形式のデータのためのコンテナとして働く異なる導かれたクラスが存在しなければならない。カプセル化クラスの各々は、それに含まれるデータをアクセスし、修正するための形式の特定プロトコルを提供する。このプロトコルは、一般に、データを表示するためのプレゼンテーションにより、またデータを修正するためのコマンドにより使用される。形式特定プロトコルに加えて、カプセル化クラスは、“ブラック・ボックス”としてのデータ・カプセルの他のエイリアン（異なる見知らぬ）形式への埋め込みをサポートするジェネリック・プロトコルを提供する。このプロトコルは導かれたクラスの中で実行され、カプセル化データのためにプレゼンテーション、編集および選択の生成をサポートしなければならない。コンテナは、エイリアン・データ形式の埋め込みをサポートするように、このジェネリック・プロトコルを理解する必要があるにすぎない。
【００３８】
（データ表現の選択）
データ形式の設計者は、特定形式のデータのための表現を設計するときに、C++ オブジェクト・モデルと、選択されるべき豊富な標準クラスの組との両方をもっている。データを表現するためのユニークなクラスを設計する前に、本発明により提供されるクラスが、常に考慮されるべきである。これにより、システム内の既存のクラスに同様なあるいは同一の機能を提供する新しいクラスを生成する無駄な努力を軽減することができる。これらのうちで最も基本となるのがC++ オブジェクト・モデルである。設計者は、ユーザが扱うクラスを表現するためにユーザのメンタル（精神的）モデルに近づける１または２以上のクラスを生成することができる。
【００３９】
本発明の基本的なクラスはデータを表現する多くの標準的な方法を提供する。収集クラスは、簡単な組から辞書までランク付けして、メモリ内に関連付けられたオブジェクトを収集するための多数の方法を提供する。持続的な間違いの少ないオブジェクトの収集を提供するためのディスクベースの収集がまた使用可能である。グラフィック編集のような、２次元（２Ｄ）あるいは３次元（３Ｄ）のグラフィック・モデル化を必要とするデータ形式がまたサポートされている。多数の２Ｄと３Ｄのモデル化オブジェクトが変形され、マトリクス・クラスおよび３Ｄカメラと共に提供される。同様に、本発明は全世界テキスト、審美的なタイポグラフィおよび拡張可能なスタイル（様式）機構をサポートする複雑なテキスト・データ形式を提供する。本発明はまた、サウンドおよび映像のような時間ベースのメディアのためのサポートを提供する。複雑な時間制御機構が使用可能であり、種々の形式の時間ベースメディア間の同期を提供する。
【００４０】
（プレゼンテーション・プロトコル）
カプセル化クラスは、カプセル内に含まれるデータの種々のクラスのプレゼンテーションを生成するためのプロトコルを提供する。プレゼンテーションは、寸描プレゼンテーション、“ブラウズ・オンリ”（拾い読み）プレゼンテーション、選択可能プレゼンテーションおよび編集可能プレゼンテーションを含む。プレゼンテーションのためのサイズのネゴシエーションを行い、選ばれたサイズ内にデータを適応させるためのプロトコルがまた存在する。このプロトコルを実行するカプセル化クラスのサブクラスは、他のカプセルへのデータの埋め込みをサポートする。現在サポートされているプレゼンテーションは、以下のものを含む。
【００４１】
・寸描（Thumbnail）−このプレゼンテーションはユーザにカプセル内に何が含まれているかを“ピーク”することができるように（覗くことができるように）意図されている。一般にサイズは小さく、そのサイズに合うようにデータを縮小および／あるいはクリップしてもよい。
【００４２】
・拾い読み（Browse-only）−このプレゼンテーションによりユーザは通常のサイズでデータを見ることができるようになるが、いずれのデータも選択し修正することはできない。
【００４３】
・選択可能（Selectable）−このプレゼンテーションは、拾い読みプレゼンテーションにより提供される能力にデータを選択する能力を加える。データそれ自身への修正を許すことなく、注釈がデータの選択に結びつけられることができるように注釈の中で使用される。選択可能プレゼンテーションは、一般に拾い読みプレゼンテーションのサブクラスとして実行される。
【００４４】
・編集可能（Editable）−このプレゼンテーションは、選択可能プレゼンテーションにより提供される能力にデータを修正する能力を加える。これは、ユーザが新たなデータを生成し既存のデータを編集することを可能とするプレゼンテーションである。現在、このプレゼンテーションはそれ自身の編集のためのウィンドゥを提供する。将来的にはその場で編集を可能とするプレゼンテーションのためのサポートが加えられる。編集可能プレゼンテーションは一般に選択可能プレゼンテーションのサブクラスとして実行される。
【００４５】
（変更通知）
カプセル化クラスに含まれるデータが変更されたとき、クライアント（例えばデータの使用者）に変更を通知する必要がある。カプセルは標準通知サポートのための組込クラスにあり、カプセルがデータ表現への変更をクライアントに通知することを可能とする。クライアントは、特定の変更についての通知あるいはすべての変更についての通知のためのカプセルに接続することができる。変更が起きたとき、カプセルはすべての関連するクライアントに変更についての通知を伝搬するように、このモデルに依頼する。
【００４６】
（データのプレゼンテーション）
このセクションでは、どのようにしてシステムがデータをユーザにプレゼンテーションするかについて説明する。データが一旦システムに表現されると、適当な意味ある方法でデータをユーザにプレゼンテーションすることがユーザ・インターフェイスの役割である。ユーザ・インターフェイスはユーザとモデル化データの間のダイアログを確立する。このダイアログはユーザがデータを見、あるいは他に知覚することを可能とし、ユーザにデータを修正あるいは処理する機会を与える。このセクションはデータ表現に焦点を当てている。
【００４７】
（ユーザ・インターフェイス）
開発者は、データ・カプセルと相互作用するようにデータのプレゼンテーションを容易にするクラスを生成する。プレゼンテーションからデータ・モデルを分離することにより、本発明は同じデータの多数のプレゼンテーションを容易にする。アップル社のマッキントッシュ・ファインダのようなアプリケーションは、同一データを多数にプレゼンテーションすることを制限された形で既にサポートしている。同じ時間に同じデータを異なる観点で表示することを可能とすることはある場合には有用である。これらの異なる観点は、同じデータの４つの異なる観点を示す３Ｄ−ＣＡＤプログラムのような同じクラスのインスタンスであってもよい。各種のプレゼンテーションのため、ユーザには、モデルを表示することができるビューと、モデルを選択し修正できるトラッキング（追尾）ツールと追尾コマンドの組を前もって書くことを要求されていた。
【００４８】
（静的プレゼンテーション）
最も簡単なプレゼンテーション形式はデータの名称である。名称はデータの内容あるいは形式を示すテキスト・ストリングである。例としては、“第４章”、“１９９０年連邦税収”、“すべきこと”等がある。他の簡単なプレゼンテーション形式であるアイコンは、データの小さいグラフィックプレゼンテーションである。それは通常データ形式を示す。例としては、本、レポート、金融モデル、サウンドあるいは映像の記録、図面等がある。しかしながら、また、それらは印刷しているプリンタのようなステータスを表示し、あるいは図面の縮尺図のような内容を示してもよい。最後に、寸描プレゼンテーションはモデル・データの小さいビューである。たとえば、縮尺された図、本の内容の表、縮尺された手紙、あるいは長い書類の縮尺された最初のページである。拾い読みプレゼンテーションは、ユーザが通常のサイズでデータを見ることを可能とするが、データのいずれも選択しあるいは修正することはできない。
【００４９】
（選択可能プレゼンテーション）
選択可能プレゼンテーションは、ユーザがデータを見、調べ、データから情報を抽出することを可能とする。これらのプレゼンテーションは、コンテクスト、即ち、何がデータか、データはどこか、データはいつ生成されたかを提供する。それはリスト、グリッドのような構造化手法でデータを外観としてあるいは部分的にプレゼンテーションするのを助けることができる。それはまた、データ要素間の関係、データのコンテナあるいは同胞との関係、あるいは他の依存性を表示するのに有用である。
【００５０】
選択可能プレゼンテーションはまたメタデータを表示することができる。例としては、ユーザが現在処理しているデータ要素を示す現在選択がある。他の形式のメタデータはデータ要素間のハイパーメディア・リンクである。ビューはまた、データについて共同作業をしている他のユーザを示すことができる。
【００５１】
選択可能プレゼンテーションは、通常データ形式により非常に特定される。それらはウィンドゥ、ビュー、およびデータ形式を最良に反映するようにカスタマイズされたユーザ・インターフェイス・オブジェクトからなる。いくつかの例は、
・サウンドの記録−コントロール・パネルは可聴プレゼンテーションを実行する。ビューは音楽のスコアとしてあるいは一連の波形としてサウンドを表す。ビューはサンプル番号あるいは時間表示を含む。
【００５２】
・金融モデル−モデルは公式と他のパラメータの組として見ることができる。時間についての特定のインスタンスで、あるいはスプレッドシートのような特定の入力値で、あるいは種々のグラフィックなスタイルに、モデルからのデータを表すことができる。
【００５３】
・本−モデルは、内容の表、インデックス、図のリストとしてみられることができる。それは、一連のページ、一連の章、あるいは連続するテキストの流れとして見られることができる。
【００５４】
・映像の記録−モデルは、一連の個々のフレーム、あるいは連続するプレゼンテーションとして見られることができる。ビューは追尾マーク、フレーム数、および時間表示を含む。
【００５５】
・他のオブジェクトを含むコンテナ−オブジェクトは名称により、形式あるいは他の属性により、一連のアイコン、１組の寸描としてアルファベット順に表示されることができる。
【００５６】
（編集可能プレゼンテーション）
編集可能プレゼンテーションは、データの修正を行うことを除いて、対話的プレゼンテーションと同様である。編集可能プレゼンテーションは、マウスあるいは他のポインタでデータの直接の処理を可能とすることによりこれを行う。また、データがメニュー項目と他のコントロールを介してシンボル的に処理されることを可能とする。
【００５７】
（データ・アクセス）
プレゼンテーションは、データとプレゼンテーションされるべき他の情報とを決定するためにデータ・カプセルと相互に作用する（対話する）。プレゼンテーションは要求されるデータをモデルにクエリー（照会）する。プレゼンテーションは含まれるデータのすべてあるいは一部だけをプレゼンテーションしてもよいし、あるいはデータ・カプセルのデータから導かれてもよい。
【００５８】
（変更通知）
アクティブな単一のモデルの多くのプレゼンテーションが一時に存在することができるので、データは、協同作業者を含めて多くのソースから変更され得る。モデル・データに関して、各プレゼンテーションは自身を更新し続ける責任がある。これは、モデルのすべてあるいは部分が変更するとき、通知を登録することにより達成される。プレゼンテーションと関連するデータにある変更が生じたとき、プレゼンテーションは通知を受け取り、そのビューを更新する。変更通知は以下にリストされている手法のいずれかで発生することが可能である。第１に、変更通知は実際にモデル・データを変更するデータ・カプセル内のメソッドから生成される。第２に、変更通知は変更を引き起こすコマンドから発生される。前に述べたように、これら２つのアプローチには利益がある。データ・カプセル内から通知を発生することはデータが変化するときにはいつでもクライアントは通知されることを保証する。コマンドからの通知の発生は、“高級”通知を可能とし、複雑な変更により生成される通知の混乱を減少させる。
【００５９】
（通知フレームワーク外観）
通知フレームワークは、オブジェクト間の変更情報を伝搬するための機構を提供する。フレームワークは、オブジェクトが、それらが依存するオブジェクトに関係することを表し、オブジェクトの変更についての通知を受け取ることを可能とする。標準インターフェイスはクライアントに通知を提供するクラスのために提供される。通知者クラスはクライアントのリストを管理しそれらのクライアントに通知をデスパッチする手段を通知ソース・オブジェクトに提供する。通知者オブジェクトは通知を受け取るオブジェクトのクラスについての特別の知識を要求しない。接続オブジェクトは通知者からの通知のデスパッチを特定の通知受信オブジェクトに提供する。これらの接続オブジェクトは通知が受信者の異なるクラスにどのようにして配信されるかを特定することを可能とする。最後に、通知オブジェクトは変更について記述した情報を転送し、インタレストは通知ソース・オブジェクトを記述する。
【００６０】
（通知伝搬フローチャート）
第１８図は通知ソース・オブジェクトに対するオブジェクト発生識別フローチャートである。処理はターミナル１８００で始まり、機能ブロック１８１０まですぐに通過する。そこでは、通知受信オブジェクトがそれ自身への接続を生成する。その後、機能ブロック１８２０で、通知受信オブジェクトは１またはそれ以上の通知ソース・オブジェクトからの１またそれ以上の通知に対して適切なインタレストを加える。これらのインタレストは通知ソース・オブジェクトにより定義される。
【００６１】
クライアントオブジェクトは、機能ブロック１８３０において、接続の際にインタレストにより特定される通知のために通知ソースに接続するよう接続オブジェクトに依頼する。その後機能ブロック１８４０で、接続に際しての各インタレストについて、接続はその通知と関連するとしてインタレスト内の通知者と共に登録される。次に機能ブロック１８４５で、システムは変更が検出されるまで待ち状態に入る。システム変更が起きたとき、コントロールは直ちに１８５０まで通過し、そこで通知ソース・オブジェクトは変化し、コールがその変更を記述する通知を、その通知者に通知する。
【００６２】
通知に関係する通知者と共に登録された各接続では、機能ブロック１８６０で、接続は通知をデスパッチするよう依頼される。次に、機能ブロック１８７０では、接続は通知受信者の適切なメソッドに通知をデスパッチする。最後に、機能ブロック１８８０で、通知受信者は通知のための適切なアクションを起こし、テストが決定ブロック１８８５で行われ、他の接続が通知に関係する通知者と共に登録されているか否かを決定する。他の接続が存在するときは、コントロールは１８５０に進む。サービスすべき他の接続が無いときは、コントロールは機能ブロック１８４５に進み、次の変更を待つ。
【００６３】
（データ仕様）
データ仕様はデータ処理の選択を発行することを目的とする。ユーザが表現に含まれるデータを処理しなければならないとき、データはそのデータのサブセットを特定できなければならない。ユーザは一般にこの仕様を“選択”と呼び、システムはすべての選択クラスが降りたベース・クラスを提供する。本発明はまたシステムがサポートする基本的データ形式のすべてのための選択クラスを提供する。
【００６４】
（モデル選択）
表現内のデータのサブセットの仕様を含むオブジェクトはモデル選択クラスである。テキスト表現の場合には、ある可能な選択仕様は一対の文字オフセットである。構造化グラフィック・モデルでは、各形状にはユニークなＩＤが割り当てられなければならず、選択仕様は１組のユニークなＩＤである。仕様のどれもが選択データを直接ポイントせず、それらをデータの多数のコピーに適用することができる。
【００６５】
（特定データのアクセス）
選択は、データをアクセスし修正する表現プロトコルを理解し、ローカル・アドレス空間でデータを見つける方法を知る。コマンド・オブジェクトはデータ選択を介して表現データをアクセスし、従って仕様からローカル・モデル内のリアル・データに変換する知識を要求しない。それは選択オブジェクトの仕事であり、アドレス空間独立仕様からリアル・データへのアクセスを提供する。テキスト・カプセルでは処理はある範囲内に含まれる実際の文字に対するカプセルをクエリーすることを要求できる。グラフィック・エディタのようなベース・モデルでは、選択はリアル・オブジェクトの代用物を保持する。カプセルはリアル・オブジェクトへ代用物を変換するためのルックアップ機能を提供する。
【００６６】
（標準編集プロトコル）
モデル選択クラスは選択間のデータの交換のためのプロトコルを提供する。形式ネゴシエーション、データの吸収、埋め込み、および運び出しを行うためのプロトコルを実行することにより、導かれたクラスは標準編集コマンドのほとんどのサポートを提供する。これは、システムにより提供される（カット、コピー、ペースト、データをプッシュ等の）編集コマンドが、表現されたデータ形式のために機能し、各アプリケーションの再実行を要求しないということを意味する。モデル選択クラスは、また、アンカーとリンクの交換のために直接にサポートを提供するが、表現データの交換をサポートするためいくつかのキーメソッドの導かれたクラスの実行上にある。
【００６７】
CopyDataは、導かれたクラスにより実行されなければならず、特定データのコピーを運び出す。実行は特定データのコピーを含む要求され形式の新たなデータ・カプセルを生成してリターンする。
【００６８】
AdoptDataは、仕様に関連する表現にデータを吸収しあるいは埋め込むことをサポートするように導かれたクラスにより実行されなければならない。データが吸収されるべきならば、それは受信者の表現に直接組み込まれることができる形式でなければならない。吸収されたデータは仕様で定義されたように表現に加えられる。多くのデータ形式に対して現在特定されているデータを新たに吸収しデータで置き換えることは共通である。いずれかの置換されたデータはアンドゥをサポートするようにデータ・カプセルに戻される。データが埋め込まれるべきならば、カプセルはブラック・ボックスとして組み込まれ、表現の子として加えられる。
【００６９】
ClearDataは、関連する表現から特定されたデータをデリートするように導かれたクラスにより実行されなければならない。デリートされたデータを含む表現の元来の形式のカプセルは戻されなければならない。
【００７０】
（ユーザ・インターフェイス）
仕様を生成するユーザ・インターフェイスは一般にはデータの表現の応答性である。多数の機構がデータ形式とプレゼンテーション・スタイルに基づいて使用可能である。選択を生成するための最も好ましいユーザ・インターフェイスは直接実行である。簡単なグラフィック・モデルでは、マウスでオブジェクトを直接クリックしあるいはマウス・トラッカーを用いていくつかのオブジェクトを横切って選択ボックスをドラッグすることによりオブジェクトを選択することができる。テキストでは、選択はファインド・コマンドの結果として生成することができる。選択が生成される他の共通の手法は、“ファインド”のようなメニューコマンドの結果としてである。コマンドが発行されたあと、ドキュメントは適切な場所にスクロールされ、サーチされたテキストが選択される。
【００７１】
最後に、選択はスクリプトから生成され（あるいはプログラム的に発生され）る。その結果はユーザが直接選択を生成したかのようである。スクリプトのための“名称付け”選択は選択を記述するための言語を生成することを含む。例えば、テキストでは、選択は“２ページの第４節の２番目の語”である。本発明のアーキテクチャはスクリプトのためのサポートを提供する。
【００７２】
（データの修正）
データ修正(Data Modeification)は質問を発する：この選択に関して動作することができるコマンドは何か？
ユーザが表現内に含まれるデータを修正すべきとき、システムはなされるべき修正の形式を正確に特定できなければならない。例えば、ワードプロセッサ・プログラムでは、ユーザは選択された範囲の文字のスタイルを変更することを望むことができる。あるいは、構造化グラフィック・プログラムでは、ユーザはグラフィック・オブジェクトの回転を望むことができる。データ・カプセルに含まれるデータを修正するすべてのユーザのアクションは、“コマンド・オブジェクト”により表現される。
【００７３】
（モデル・コマンド・オブジェクト）
ユーザによりなされたコマンドを表すアブストラクト・ベース・クラスはモデル・コマンド・オブジェクトである。モデル・コマンド・オブジェクトのサブクラスはドゥ、アンドゥ、リドゥされることができるというようなユーザ・アクションの意味を捉える。これらのサブクラスはそれらを生成するために使用されるユーザ・インターフェイス技術から独立している。MacAPPと異なり、ユーザ・アクションの意味が知られるとすぐに、デバイス・イベントがシステムによりコマンド・オブジェクトに翻訳される。  
ハンドル・ドゥ(HandleDo)、
ハンドル・アンドゥ(HandleUndo)、
ハンドル・リドゥ(HandleRedo)。
【００７４】
新しいクラスのコマンドを生成することは多数のメソッドをオーバライド(override)することを含む。オーバライドするための最も重要な３つのメソッドは、Handledo、HandleUndo、およびHandleRedoである。HandleDoメソッドは、そのままであるコマンド形式とそのコマンドが適用される選択とに基づいて適切にデータ・カプセルを変更するように応答可能である。例えば、ワードプロセッサにおいてコマンドがある範囲の文字に対するスタイル変更を含むならば、HandleDoメソッドはこのコマンドのあとに“アンドゥ(Undo)”する必要のある情報のすべてを保存する。スタイルの変更の例では、アンドゥ(undo)情報の保存は文字範囲の旧スタイルを記録することも含む。ほとんどのコマンドに対するアンドゥ情報は保存が非常に簡単である。しかしながら、ファインドおよび変更のようないくらかのコマンドは大量の情報を記録したあとでコマンドをアンドゥすることを含む。最後に、HandleDoメソッドは、データ・カプセルになされる変更を記述する変更通知を発行する。
【００７５】
HandleUndoメソッドはコマンドが“ドゥ”される(done)前にそうであった状態にドキュメントを戻す。適用されなければならないステップは上記のHandleDoでなされたステップと同様である。HandleRedoメソッドは、ドゥ(do)され、そしてアンドゥ(undo)されたあとコマンドを“リドゥ(redo)”する。ユーザはしばしばアンドゥ／リドゥ(undo/redo)の組み合わせを用いてコマンドの結果を比較して、ドキュメントの２つの状態の間をいったりきたりする。一般に、HandleRedoメソッドは、Redoメソッドにおいて、最後に導かれた情報がこのコマンドが完了したとき再使用されることがきることを除いてHandleDoメソッドと非常に近い（情報は同じであることが保証されるので、再計算する必要はない）。
【００７６】
（ユーザ・インターフェイス）
コマンド・オブジェクトは、ユーザ・アクションの意味を捉える。実際、コマンドは（種々のユーザ・インターフェイス技術を用いて）ユーザにより最も多く生成されるが、同様に他の手法で生成することができる“ワーク・リクエスト”を表す。重要な概念は、コマンド・オブジェクトがデータ・カプセルに含まれるデータを修正するための唯一の手段を表すことである。データ・カプセルへのすべての変更は、無限のアンドゥの利益、保存無しのモデル、本発明の他の特徴が実現されるべきならば、コマンド・オブジェクトにより処理されなければならない。
【００７７】
コマンドを発行する最も好ましいユーザ・インターフェイスは、ある種の直接操作を含む。デバイス・イベントをコマンドに翻訳し、ユーザ・フィードバック・プロセスを“ドライブ”するように応答可能なオブジェクトはトラッカーとして知られている。本発明は組込データ形式を処理するための“トラッキング・コマンド”の豊かな組を提供する。例えば、直線、曲線、多角形等のような“ピンク(Pink)”において2Dオブジェクトのすべてを回転させ、スケーリングして、動かすためのトラッキング・コマンドがある。
【００７８】
コマンドを発行するための共通のユーザ・インターフェイスはメニュー・システムからあるいはコントロールを介している。メニューは生成され関連するコマンドの組がメニューに加えられる。ユーザがメニュー内の項目を選ぶとき、適切なコマンドが“クローン（複製）”され、コマンドのドゥ・メソッドがコールされる。プログラマはデバイス・イベントに巻き込まれない。さらに、コマンドはそれらが適用されることができる選択の形式が何かを知っているので、メニュー項目はそれらが適切でないとき自動的に薄暗くさせられる。
【００７９】
最後に、コマンドはスクリプトから発行することができ（あるいはプログラム的に発行することができ）、その結果はユーザがコマンドを直接発行したときと同様である。“ピンク”アーキテクチャはスクリプトするためのサポートを提供する。しかしながら、この時点ではこれらのスクリプトを生成するために使用可能なユーザ・インターフェイスはない。
【００８０】
（組込コマンド）
本発明は、多くのユーザ・インターフェイス・コマンドと同様に、カット、コピー、ペースト、ハイパーメディア・リンクのスタート、リンクの完了、リンクの運行、リンクに関するデータのプッシュ、リンクに関するデータのプルのためのジェネリック・コマンドを提供することに加えて、全ての組込データ形式のための多数の組込コマンド・オブジェクトを提供する。
【００８１】
（他の特徴）
このドキュメントの前のセクションは、本発明の基本的な特徴に焦点を当てた。本発明には、さらに進んだ特徴を実行する多くの追加される機能がある。特に、これらの機能は、モデルベースのトラッキング（追尾）、ファイリング、アンカー、および共同作業を含む。
【００８２】
（モデル・ベース・トラッキング）
トラッキング（追尾）は、直接処理ユーザ・インターフェイスの心臓部である。トラッキングにより、ユーザは、テキストの範囲を選択し、オブジェクトをドラッグし、オブジェクトを再サイズ調整し、オブジェクトを描くことが可能となる。本発明は、モデルを実際に修正することにより多数のビュー（表示）、および多数のマシンに渡る機能にトラッキングを拡張する。トラッカーは、モデルにコマンドを発行し、モデルはすべての関係するビューへ変更通知を発行する。
【００８３】
モデル・ベース・トラッキングは、ドキュメント内でトラッキングするための最良の解決策であるが、それは、以下の欠点を有する。（１）モデル・ビューを、変更イベントへの急速応答を提供するように最適化しなければならない。（２）モデルは中間トラック状態を表すことができなければならない。
【００８４】
（アンカー(Anchors)）
持続性選択即ち“アンカー”はデータの仕様を表現する点で選択と非常によく似ている。違いは、アンカーはデータへの変更に渡って維持されるので、アンカーは編集変更を生き続けなければならない点である。ドキュメントの初期で述べたグラフィック選択の実行は持続的である。しかしながら、テキスト選択の実行はない。ユーザが選択の前にテキストを挿入しあるいはデリートするならば、文字オフセットを調整しなければならない。テキストアンカーを実行するためには２つのアプローチがある。第１に、テキスト表現は、スタイルが維持される手法と同様に、テキスト内を指すマーカーの集まりを維持する。アンカーはマーカーを参照するユニークなＩＤを含む。テキストが変更されたとき、マーカーはユニークにされるが、アンカーは同じままである。他のアプローチは、テキストに対する編集履歴を維持することである。アンカーは時間スタンプと同様に１対の文字位置を含むことができる。テキストが編集される毎に、履歴は更新され、変更（例えば、時間Ｔに位置Ｘからデリートされた５文字）を記録する。アンカーが使用されるとき、システムは、最後に使用されたとき以来起きた編集変更に基づいて文字位置を補正しなければならない。適切な時に、履歴は凝縮され、アンカーは永久的に更新される。
【００８５】
システムは、アンカー機能を介して“フリー”のための非常に多数の特徴を提供する。ハイパーメディア・コマンドのすべて（CreateLink、PushData、PullDataおよびFollow）は、それらの実行時にアンカーを使用する。システム中の注釈機能実行時にアンカーを使用する。ベース・データ・カプセルはアンカーとリンクの追尾を保つサービスを提供する。しかしながら、ユーザは、アンカーをプレゼンテーションを介してユーザに見えるようにする。アプリケーションはまたユーザがアンカーを選択するとき適当なコマンド・オブジェクトを発行しなければならない。アンカーとリンクのためのユーザ・インターフェイスが釘付けにされたあと、ドキュメント・フレームワークは処理を簡略化するよう付加的サポートを提供する。
【００８６】
（ファイリング）
ファイリングはデータを永久格納に保存しあるいは永久格納から再生するプロセスである。ユーザがファイリング作業をするためにしなければならないことは、データ・カプセルのための一連の操作を実行することのみである。本発明のデフォルト・ファイリングは”イメージ”ベースである。ユーザがドキュメントを開くとき、ドキュメントの内容全体はメモリに読み出される。ユーザがドキュメントを閉じるとき、ドキュメントの内容の全体がディスクに書き込まれる。このアプローチは、簡単で、フレキシブルで、理解しやすいので採用された。異なるフォーマットでデータを格納するためには、前もって存在する標準のファイル・フォーマットとの互換性を保つために、２つのアプローチが可能である。第１に、カプセル・クラスは実際のデータへの参照を一連の流れとすることができ、実際のデータを見つけるために参照を使用することができ、あるいは新しいサブクラスがファイル・サブクラスを生成し、リターンするように定義することができる。
【００８７】
第１のアプローチの長所はデータ・カプセル型のドキュメント内でカプセル化することができることである。第２のアプローチの長所は、完全なドキュメントのための既存のファイル・フォーマットに正確に適合するようにした完全な自由である。
【００８８】
（共同作業）
同時ネットワーク共同作業は、２人あるいはそれ以上の人が同時に同じドキュメントを編集することを意味する。システムはまた共同作業ポリシーを確立する。即ち、ユーザがデータを変更するときあるいは自由に変更させるとき後退させられるかどうかである。開発者は共同作業ポリシーあるいは共同作業の機構を心配する必要はない。
【００８９】
（協同作業選択スタイルのサポート）
混乱の減少を助けモデル選択を増強するため、ドキュメント・アーキテクチャは協同作業者のイニシャルと望ましいハイライトの束について情報を含む協同作用者クラスを提供する。
【００９０】
（多数選択のサポート）
多数の選択をサポートするために、ユーザは、各協同作業者が選択を有するのでプレゼンテーション・ビューを修正しなければならない。アクティブな協同作業者の選択が変わるとき、標準変更通知が送られる。受動的協同作業者の選択が変わるとき異なる通知イベントが送られる。ビューは両方のイベントのために登録すべきである。どちらかのイベントに応答して取られたアクションも通常同じなので、両方のイベントのために同じハンドラー・メソッドを登録することにより経済性が実現される。
【００９１】
（本発明によるユーザ・インターフェイス）
本発明のこの部分は、基本的に、先に議論されたオペレーティング・システム・フレームワークの基本上に構築するユーザ・インターフェイスの観点に焦点が絞られる。ユーザ・インターフェイスの第１の観点はユーザがコントロールとして参照する種々のオブジェクトあるいはデータとの対話（相互作用）を管理することを可能とする機構である。
【００９２】
（コントロール）
ユーザが他のオブジェクトあるいはデータを処理するよう対話するオブジェクトはコントロールと呼ぶ。コントロールはオブジェクトあるいはデータの現在の状態を決定するためのコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新し、それが実行されるようにする。コントロールの例はメニュー、ボタン、チェックボックス、およびらラジオ・ボタンである。
【００９３】
コントロールはオブジェクトあるいはデータの現在の状態を決定するためにコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新し、それが実行されるようにする。例えば、チェックボックスはコマンド・パラメータをオンにあるいはオフにセットし、データ値を変更するためにコマンドを実行する。
【００９４】
多くのコントロールはそれらが処理をするデータの現在の値を表示する。例えば、チェックボックスはブール（代数）データ値が真(TRUE)のときだけチェックを表示する。データが変わるにつれてコントロールの出現はここで述べられた通知システムを用いて日付を付けるよう保たれる。そのプロセスはメニュー項目をイネーブル／ディスエーブルするように使用されるプロセスと同様である。
【００９５】
コントロールが生成されるとき、コマンドが特定される。コントロールはこのコマンドのコピーを作り、それをフィールドfCommandに格納する。コマンドがいずれかのデータ値を供給するならばコマンドの適切なゲット(Get)とセット(Set)のメソッドのポインタがまた特定される。コントロールはこれらのメソッド・ポインタをフィールドfGetMethodとfSetMethodにそれぞれ格納する。その後、コントロールはデータ値が日付以外であることを示す通知に接続する。各コマンドはこのためにコネクトデータ(ConnectData)と呼ばれるメソッドを提供する。
【００９６】
各コントロールは通知を受信すべきオブジェクトとメソッドを示すfDataCommection と呼ばれる接続オブジェクトを含む。この接続オブジェクトはコマンドへのアーギュメントとして渡される。コマンド・オブジェクトは接続オブジェクトの接続メソッドをコールして、そのデータ値に影響を与えるかも知れない各通知者とインタレストを加える。完了時に、コントロールは接続オブジェクトの接続メソッドをコールして第３図に示される接続を確立する。コントロールはそのデータ値をそのコマンドから更新する。それはコマンド(fCommand->(*fGetMethod())のゲット(Get)メソッドをコールすることにより行う。第５図に示されるように、コントロールはこの値を適切なフィールドに格納する（たとえば、チェックボックスがfCheckedと名前が付けられたブール・フィールドに格納する）。その後、コントロールはその出現を更新する。画面の一部が更新を必要としていることを示して、ビュー・システムの不当化メソッドをコールすることによりこのアクションを行う。
【００９７】
最後に、データの変更と通知が送られる。ある点で、コントロールにより反映されているデータの値を変更するコマンドが実行される。このコマンドは、コントロール、メニュー項目から、あるいは直接操作により実行することができる。コントロールは第４図に示される通知を受け付けて次のユーザ選択を待つように渡される。
【００９８】
（コントロール・パネル）
コントロールのある集まりは、コントロール・パネルと呼ばれる。コントロール・パネル内のコントロールは一般に実際のデータに作用する（これはデフォルトであり、必要はない）。それらのアクションは通常直接的であり、互いに独立である。コントロール・パネルは必要によりコントロールの間で入力フォーカスの進行を制御する。コントロール・パネルはシステムですべてのユーザ・インターフェイスに渡って共有されるであろう。
【００９９】
（ダイアログ・ボックス）
コントロールの他の集まりはダイアログ・ボックスと呼ばれる。ダイアログ・ボックス内のコントロールは一般にプロトタイプのデータに作用する（これはデフォルトであり、必要はない）。それらのアクションは通常グループ内に一緒に集められ、その後ユーザが Apply  ボタンを押すとき一緒に実行される。ダイアログ・ボックスは必要によりコントロールの間で入力フォーカスの進行を制御する。
【０１００】
（アクションにおけるコントロール）
３つのアクションの役割を提供して、アクションにおけるコントロールを説明する。第２図は種々のコントロールを示す。役割の例はコントロール（この場合チェックボックス）、コマンド、選択およびデータ・カプセルと似た手法により使用される。  
チェックボックス２００−チェックボックスの役割はデータ・カプセル内に格納されたブール値を表示して変更を容易にすることである。この値はチェックの存在不存在により表現される。  
コマンド２１０−コマンドの役割はデータ・カプセルから値を得てチェックボックスからの方向に変更することである。  
選択２２０−選択の役割はコマンドとデータとの間をインターフェイスすることである。  
データ２３０−データはアクションの目標として採用される。
【０１０１】
（あなたを知ること）
誰でもが第３図に示されるようによりよく互いを知りたい。コマンド３１０はコントロールが興味があるデータがどの通知を送ることができるかをチェックボックス３００に知らせる（コマンド３１０がどのようにして知るかは他の者に関係がない）。チェックボックス３００は次に通知のためにデータ３２０に接続する。
【０１０２】
誰にも知られず、ディレクタはチェックボックス３００にコマンド３１０と対話する最良の手法を話した。特に、それはコマンドのゲット値メソッドとセット値メソッドについて話された。チェックボックスはこの長所を少しあとで取り上げる。
【０１０３】
（データを反映すること）
何かがデータに起きる−それは第４図に示されるように通知を送る。チェックボックス４００はインタレストを表現したそれらについて聞く。第４図では、データからの通知はチェックボックス内にＸを置くことにより反映される情報を太くする（ボールドにする）ように表現する。
【０１０４】
チェックボックス５１０はデータから通知を受信してチェックボックス５１０を正しく表示する処理が第５図に示される。それは、知ろうとするコマンド５２０のゲット値メソッドを用いて行う。正しい値は何かをチェックボックス５１０に知らせる前に、コマンド５２０は選択を介してデータに行き、実際に正しい値を知っていることを確認する。チェックボックス５１０は必要によりそれ自身を更新する。
【０１０５】
（データを変更すること）
ユーザはこのシーンで、第６図に示されるようにチェックボックス６００を一度押す。チェックボックス６００はコマンド６１０のセット値メソッドを用いて選択を介してデータ６２０の値をセットする。全体のプロセスを第７図に再び示す。
【０１０６】
（アクション時のコントロール・パネル）
コントロール・パネルは第８図に示されるように一セットのコントロールを含む単なるウィンドゥである。これらのコントロールは現在の選択に作用するコマンドを含む。コントロールはコマンドがアクティブならばイネーブルされる。ユーザとの適切な対話に続いて、コントロールはコマンドを実行し、データを変更する。
【０１０７】
（サウンド・コントロール・パネル）
コントロール・パネルの例として第８図に示すサウンド・コントローラを考える。このコントロール・パネルはサウンドの再生を制御する４つのボタン８００，８０２，８０４および８０６を含む。各ボタンは上記の“アクション時のコントロール”のセクションに述べられたように実行する。
【０１０８】
プレイ８００−このコントロールはTPayコマンドである。このコマンドはある条件の下でのみアクティブで、それらの条件の下でのみコントロールをイネーブルにする。第１に、サウンドは適切なデータ・カプセル内で選択される。次にそれは既に再生中であってはならない。最後に、現在のサウンド位置は最後の前のどこかになければならない。押されたときPlayボタンはTPlayコマンドを実行して選択されたサウンドをスピーカーから出力させる。
【０１０９】
ステップ８０２−このコントロールもまた、TPlayコマンドを含む。これは何であろう。さて、これを構成しているとき以来、TPlayコマンドがそれを再生すべき期間を示すパラメータを取ることができる。ステップボタン（Stepボタン）のために、それは単一サンプルに設定される。StepボタンはTPlayボタンに対して述べたのと同じ条件の下でのみイネーブルとされる。Stepボタンが押されると、TPlayコマンドを実行して選択されたサウンドをスピーカーから出力させる。
【０１１０】
ストップ８０４−このコントロールはTStopコマンドを含む。Stopコマンドは選択されたサウンドが現在再生中であるときのみイネーブルとされる。押されたとき、StopボタンはTStopコマンドを実行して選択されたサウンドの再生を停止させ、現在のサウンド位置を開始点に設定する。
【０１１１】
ポーズ８０６−このコントロールはまたTStopコマンドを含む。しかしながらStopボタンと異なり、このTStopコマンドはサウンドを開始点に巻き戻さないよう設定される。PlayボタンあるいはStepボタンを押すと再生が中断された場所から続く。
【０１１２】
（アクション時のダイアログ・ボックス）
ダイアログ・ボックスは、それが一セットのコントロールを含む単純なウィンドゥであるという点でコントロール・パネルと同様である。しかしながら、選択されたデータへ作用するコントロールに変わって、それらは他のコマンドのパラメータに作用する。Applyボタンが押されるまでだけが修正されたリアル・データである。
【０１１３】
（カラー・エディタ）
ダイアログ・ボックスの例として第９図に示すカラー・エディタを考える。それは３つのスライダを含む。一つはカラーの赤９００、一つは青９１０、および一つは緑９２０の成分のためのスライダである。スライダを望みの値に調整したあと、ユーザはアプライ９３０を押して選択した範囲のカラーを変更する。
【０１１４】
赤９００，緑９１０，青９１０−ユーザにとって、これらのスライダは、ラベルを除いて同一である。すべてのコントロールと同様に、各スライダは、ユーザとの対話に続いて実行されるコマンドを含む。多くのコントロールとは異なり、特に選択されたデータにすぐに影響を与えるコントロール・パネル内のそれらと異なり、これらのスライダに含まれるコマンドは他のコマンドのパラメータ値を表示し修正する。この場合、アプライ(Apply)ボタン内に含まれるコマンドの赤、緑あるいは青のパラメータの１つである。
【０１１５】
アプライ９３０−アプライ(Apply)ボタンは、実行されるときに選択された範囲のカラーを変更するTSetColorコマンドを含む。それは３つのパラメータを有する。カラーの赤、緑および青の成分の各々に対して１つのパラメータである。これらのパラメータは表示され、ユーザとの対話に応答してスライダにより設定される。アプライ(Apply)ボタンが押されると、このコマンドが実行され新しいカラーが設定される。カラー・エディタに伴う内部アクションを例として第１０図に示す。赤１０００，緑１０１０，青１０２０のスライダはTFloatControlCommandを含む。これらのコマンドはコントロールが表示する単一の浮動小数点値を含む。ユーザがスライダを調整するにつれて、スライダはこの値を更新しそのコマンドを実行する。
【０１１６】
TFloatControlCommandの選択によりApply１０４０ボタン内のTSetColorコマンドが特定される。そのパラメータの１つは各TFloatControlコマンドが実行されるときに設定される。最後に、ユーザがアプライ１０４０ボタンを押すとき、TSetColorコマンドが実行され、選択されたカラー１０５０が変更される。
【０１１７】
（クラス）
以下のセクションはコントロールおよびダイアログ領域のクラスとそれらの基本的なメソッドを説明する。
【０１１８】
（コントロール）
コントロールは１またはそれ以上のコマンドへのユーザ・インターフェイスである。コントロールはその名称通りにコマンドについての情報を表示し、また、それが現在のコンテキストの中でアクティブか否かを表示する。適切なユーザとの対話に続いて、コントロールはコマンドを実行する。適切なとき、コントロールはコマンドが修正するデータの現在値を得て、それをユーザに表示する。コマンドを実行する前にこのデータの新しい値を示すコマンド・パラメータをセットすることができる。
【０１１９】
オプションとしてのコントロール内のコマンドの付加的仕様でコントロールについての選択を生成するメソッド。ルックアップ・コマンドは、それらがどのくらい多くのコマンドを得て、それらがどのように格納されるかについての、サブクラスにフレキシビリティを与えるための、純粋な仮想関数である。
【０１２０】
プレゼンテーションがオープンされクローズされるときコールされるメソッド。プレゼンテーションがオープンされるとき、コントロールはその状態に影響を与えることができる通知を接続する。プレゼンテーションがクローズされるときこれらの接続は切断される。
【０１２１】
プレゼンテーションが活性化されまた非活性化されるときコールされるメソッド。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ妥当な通知に接続される。プレゼンテーションの非活性化はこれらの接続を切断する。
【０１２２】
コントロールがイネーブルとされるかどうかに影響を与える通知者に接続しそれから切断するためにコントロールが使用するメソッド。ConnectEnabledNotifiersはコントロールがオープンされたときコマンドにより特定される通知者に接続する。DisconnectEnabledNotifiersはコントロールがクローズされるときこれらの接続を切断する。
【０１２３】
コントロールのデータ値のプレゼンテーションに何かが影響を与えることを示す通知を受信するメソッド。このメソッドはデフォルトにより何もしない。
【０１２４】
通知のためのメソッド。クリエートインタレスト(Create interest)はコントロールのインスタンスにより特定されるインタレスト(interest)を生成する。Notifyは通知を送り、インタレストを含み込むようにオーバーロード(overload)される。
【０１２５】
（コントロールのインタレスト）
単一の通知者はコントロールの多くのサブクラスの中で共有される。特定のコントロールインスタンス内のインタレストを表すために、インタレストは特定されなければならない。コントロールインタレストは特定のコントロールを指すポインタを含むインタレストである。このクラスはサブクラス無しで、通常そのまま使用される内部クラスである。
【０１２６】
（コントロールの通知）
各通知者はコントロールの多くのサブクラスの中で共有されている。コントロールがどこに通知を送るかを区別するために、通知は特定されなければならない。コントロールの通知はその通知を送ったコントロールへのポインタを含む。このクラスはサブクラス無しで通常そのまま使用される。
【０１２７】
（コントロールのプレゼンター）
コントロールのプレゼンターはコントロールを包むので、プレゼンテーション・データ・カプセルにより含まれることができる。それはすべてのプレゼンター・オブジェクトが提供する標準的な振る舞いを提供する。このクラスはサブクラス無しで通常そのまま使用される。
【０１２８】
プレゼンテーションがオープンされたときとクローズされたときコールされるメソッド。それらはデフォルトでは何もしない。サブクラスはそれが包むオブジェクトのためのこれらのメソッドを処理しなければならない。コントロールに対して、これらのメソッドは直接委任されなければならない。プレゼンテーションがオープンされたとき、コントロールはその状態に影響を与えることができる通知に接続する。クローズされるとき、接続は切断される。
【０１２９】
プレゼンテーションが活性化されるときと非活性化されるときコールされるメソッド。それらはデフォルトでは何もしない。サブクラスはそれが包むオブジェクトのメソッドを処理しなければならない。コントロールに対して、これらのメソッドは直接委任される。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ妥当となる通知に接続する。非活性化されるときは接続は切断される。
【０１３０】
（TControlSelection(コントロール選択））
コントロール選択は、コントロール・プレゼンターの中に包まれプレゼンテーションの際に格納される単一のコントロールと付加的にその中のコマンドを特定する。
【０１３１】
コントロール内のコマンドをアクセスするメソッド。これらはコマンドが特定されていなければ不当な値を戻す。
【０１３２】
（TUniControl(ユニコントロール））
ユニコントロールは、単一のコマンドを提供し、適切なユーザとの対話に続いて実行させられるコントロールのためのアブストラクト・ベース・クラスである。この形式のコントロールの例はボタンとチェックボックスである。
【０１３３】
コントロールにより提供され実行されるコマンドを特定するメソッド。通知が、コマンドが変更されたとき登録された接続に送られる。
【０１３４】
コントロールがイネーブルとされるか否かに影響を与える通知者に接続するためとそれから切断するためにコントロールが使用するメソッド。ConnectEnabledNotifiersはコントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectEnabledNotifiersは、コントロールがクローズされるときこれらの接続を切断する。
【０１３５】
コントロールがEnable（イネーブル）とされるべきか否かに影響を与える何かが起きたことを示す通知を受信するメソッド。更新イネーブル(UpdateEnabled)はコマンドがアクティブか否かをチェックしてイネーブル(Enable)とディスネーブル(Disable)を適切にコールする。
【０１３６】
コントロールのデータ値のプレゼンテーションに影響を与える通知者に接続するためとそれから切断するためにコントロールが使用するメソッド。ConnectDaTaNotifiersは、コントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectDaTaNotifiersは、コントロールがクローズされるときこれらの接続を切断する。データ値を表示しないコントロール（例えばボタン）は、何もしないようにConnectDataNotifiersをオーバライドする。
【０１３７】
（ボタン）
ボタンは押されるとコマンドを実行するユニコントロールである。このクラスは通常サブクラス無しで使用され、単にコマンドをセットして離れる。
【０１３８】
プレゼンテーションが活性化されるときと非活性化されるときにコールされるメソッド。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ適切な通知に接続する。非活性化されるときには、これらの接続は切断される。プレゼンテーションが活性化されるとき、ボタンはキー等価通知のために登録する。この接続はプレゼンテーションが非活性化されるときに切断される。
【０１３９】
コントロールのデータ値のプレゼンテーションに影響を与える通知者に接続しまたそれから切断してユーザを制御するメソッド。ConnectDataNotifiersはコントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectDataNotifiersはコントロールがクローズされるときこれらの接続を切断する。データ値を表示しないコントロール（例えばボタン）は何もしないように接続データ通知ConnectDataNotifiersをオーバライドする。
【０１４０】
（チェックボックス）
チェックボックスはブール値をセットするコマンドへのユーザ・インターフェイスである。適切なユーザとの対話に続いて、チェックボックスは、値を変更するようにコマンド・メソッドをコールしてそのコマンドを実行する。このクラスは通常サブクラス無しで使用され、単にコマンドとその値のゲッターとセッターをセットし、離れる。
【０１４１】
（スライダ）
スライダは、単一浮動小数点値を表示して適切なユーザとの対話に続いて変更されることを可能とするユニコントロールである。スライダの例は第９図と第１０図に示した。
【０１４２】
（TMultiControl(マルチコントロール））
マルチコントロールはいくつかのコマンドを提供するコントロールのためのアブストラクト・ベース・クラスであり、適切なユーザとの対話に続いてそれらを変更することを可能とする。この形式のコントロールの例はラジオ・ボタンとメニューである。
【０１４３】
（TRadioButton（ラジオ・ボタン））
ラジオ・ボタンは２あるいはそれ以上のブール値を表示するマルチコントロールであり、適切なユーザとの対話に続いてそれらを変更することが可能となる。ラジオ・ボタンは、第１１図に示すように、正確に１つのボタンが選択されるという制約を有する。紙(Paper) が選択されると、１１００でその円が黒くされる。プラスチック(Plastic)が選択されると、１１１０でその円が選択される。両方を選択されることはできない。
【０１４４】
（コマンド）
コマンドは、オブジェクトへのあるいはオブジェクトのセットへのリクエストをカプセル化して特定のアクションを行う。コマンドは通常、ボタンを押すことや、メニュー項目を選択すること、あるいは直接処理のようなエンド・ユーザ・アクションに応答して実行される。コマンドは、そのアピアレンス（appearance）を決定するためにコントロールにより使用することができるそれら自身についての種々の情報（例えば、名称グラフィック、キー等価、それらがアクティブか否か）を提供することができる。サブクラスは、コマンドがアクティブか否かを決定するために、現在の選択、アクティブ・ユーザ・インターフェイス要素、あるいは他のパラメータを調べるメソッドを処理しなければならない。サブクラスは、このコマンドがアクティブか否かに影響を与えることができる通知インタレストを戻すようにゲット・アクティブ・インタレストをオーバライドしなければならない。
【０１４５】
第１２図は本発明による詳細論理を描くフローチャートである。フローチャート論理は１２００に進み、コントロールは機能ブロック１２１０にまで直接渡される。そこでコマンド・オブジェクトはメニューに加えられる。この機能ブロックにより実行されるステップは、（１）コマンドからメニュー項目を生成するステップ、ここでメニュー項目はコマンドを含む他のオブジェクトデータ構造であるステップ、（２）メニュー項目のリストにあるメニュー項目を追加するステップ、および（３）メニューのアピアレンスが不当であることをデータ構造fValidにマークするステップである。その後、メニューがプルダウンされると、アピアレンスはシステムの状態に基づいて再計算される。
【０１４６】
各メニューはビューである。ビューはサイズと位置の情報を含む。各メニューはメニュー項目のリストを含む。各メニュー項目は現在のアピアレンスを反映するコマンドと変数を含む。変数は、メニュー項目がイネーブルであるか否か(Boolean fEnabled)、その名称(TTextLabel fName)、そのグラフィック(TGraphicLabel fGraphic)、およびそのアピアレンスが現在妥当か否か(Boolean fValid)を含む。これらの変数の各々は、メニュー項目がいつ生成されたかをコマンドに訊ねることにより決定される。
【０１４７】
次に、クエリーは、機能ブロック１２２０に示されるように、通知インタレストためのコマンド・オブジェクトに送られる。各コマンドは異なる形式の通知に接続する４つのメソッドを有する。ｉ）その名称に影響を与える通知、ｉｉ）グラフィックに影響を与える通知、ｉｉｉ）コマンドがアクティブか否に影響を与える通知、およびｉｖ）いずれかのデータに影響を与える通知である。この場合、コマンドのために生成されたメニュー項目はアクティブな通知に接続する。それは接続オブジェクトをConnectActiveに渡すことにより行う。コマンドはその後、コマンドがアクティブか否に影響を与える通知者に接続オブジェクトを接続する。その後、コントロールは機能ブロック１２３０に通され、メニュー項目を描くことが必要なときイネーブルな状態のコマンドをクエリーする。メニュー項目を描くために、メニュー項目はそのコマンドのためにメソッド“IsActive”をコールする。そのコマンドは、それが望むシステム状態がなんであるかを見て、決定ブロック１２４０に示されるように、現在のコンテキスト内でそれがアクティブか否かを戻す（例えば、いくつかのコマンドは、特定の形式のウィンドゥが正面にあるとき、あるいは特定の形式のオブジェクトが選択されるときにのみアクティブである）。その後、メニュー項目は機能ブロック１２５０および１２６０に示されるように、コマンドにより戻される値にマッチするように、その内部状態（各メニュー項目内のブール値）とアピアレンスを更新する。
【０１４８】
ユーザ・アクションが入力ブロック１２７０に示されるようにコマンドを含むときは、ユーザは常にコマンドが処理されるようにする。これはメニュー項目、コントロール、あるいはオブジェクトの直接処理を介して行うことができる。このアクションは、機能ブロック１２８０に示すようにドキュメント状態が修正されるようにする。ドキュメントが通知を送るとき、以下のステップが実行される。（１）ドキュメントにより送られた通知に接続されたいずれかのメニュー項目（あるいは他のコントロール）は、通知メッセージを受信する。このメッセージはその通知に送られたオブジェクトへのポインタと共に変更の名称を含む。（２）その後メニュー項目はその状態を更新する。コントロールは更なる処理のため機能ブロック１２３０に戻される。
【０１４９】
第１３図は、本発明による表示を示す。メニュー項目は編集(Edit)１３００であり、関連付けられた多数のサブメニュー項目を有する。アンドゥ(Undo)１３１０は、アクティブメニュー項目であり、関連する機能を実行するように選択することができる。リドゥ(Redo)１３２０は非アクティブであり、灰色で提供され、この時点では選択することができない。チェックボックスはまた、デバッグ用コントロール・パネル１３５０の一部として１３６０に示されている。
【０１５０】
（プレゼンテーション・テンプレートと持続性）
データプレゼンテーションはテンプレートから生成され、ユーザ・インターフェイス・オブジェクト内の期間保存される。すべてのデータを有するものはシステム内ではモデルである。モデルはデータの処理を含み実行する。データ交換は、カット、コピー、ペースト動作を介して実行される。データの参照は、選択、アンカーおよびリンクにより提供される。データ・モデルは他の中に埋め込むことができる。ユーザは、関連するユーザ・インターフェイスにより提供されるプレゼンテーション（例えば、アイコン、寸描、フレーム、ウィンドゥ、ダイアログ、コントロール・パネル）を介してモデルと対話する。データ・モデルはすべてのプレゼンテーションを生成し、他のオブジェクトへのアクセスメソッドを代理し、ユーザ・インターフェイスと呼ばれる。
【０１５１】
ユーザ・インターフェイスは特定のモデルのためのプレゼンテーションの組、例えばアイコン、寸描、フレーム、ウィンドゥを含むモデルである。要求されるとき、プレゼンテーションは望ましいプレゼンテーションの形式、ユーザ名、場所、他の基準とに基づいて既に生成されているものから選択される。望ましいプレゼンテーションが見つからないとき、新しいプレゼンテーションを生成して関連するアーカイブ（保管所）から１つをコピーすることにより、ユーザ・インターフェイスに加える。プレゼンテーションは持続的プレゼンテーション情報（例えば、ウィンドゥサイズ場所、およびスクロール位置）がもはや要求されないときにはデリートされてもよい。
【０１５２】
プレゼンテーションは、データを見て処理するために使用されるユーザ・インターフェイス要素（例えば、メニュー、ウィンドゥ、ツール）を包むプレゼンテーション可能なオブジェクトのセットを含む。プレゼンテーションはこれらのオブジェクトが提供するデータへの参照を提供する。プレゼンテーションは、プレゼンテーションが活性化されるときプレゼンテーション可能なオブジェクトをインストールしあるいは活性化する。同様に、これらのオブジェクトはプレゼンテーションが非活性化されるときに除かれ、あるいは非活性化される。プレゼンテーションはその目的に従って同定され、（例えばアイコン、寸描、フレーム、ウィンドゥ）、後の選択のためまだ決定されるべき基準（例えばユーザの同一性）を保持する。
【０１５３】
プレゼンテーションは、プレゼンテーションがオープンされるときあるいはアクティブであるときに画面上に表示され、あるいは他に使用可能なプレゼンテーション可能なオブジェクトの集まり（例えばユーザ・インターフェイス要素）から構成される。
【０１５４】
プレゼンテーションは、アーカイブ（保管所）に含まれるテンプレート・プレゼンテーションから生成される。これらはユーザ・インターフェイス要素のようなオブジェクトから構成され、順にそれらはグラフィックとテキスト・ストリングのようなより小さいオブジェクトから構成される。
【０１５５】
アーカイブはユーザ・インターフェイス要素（例えばウィンドゥ、メニュー、コントロール、ツール）とプレゼンテーション（例えば、アイコン、寸描、フレーム、ウィンドゥ）を含むテンプレート・オブジェクトを有するモデルである。
【０１５６】
（ダイアログ・ボックスとコントロール・パネル）
コマンド・オブジェクトを異なる手法で用いることにより、コントロール群の２つの独立した振る舞いを制御することができる。第１は、それらが直ちにデータに影響を与えるか否か、あるいは設定が効果を上げる前に、ユーザがOKを押さなければならないか否かである。第２はそれらが互いに独立か否か、あるいは設定が原子動作を提供するか否かである。
【０１５７】
コントロールはコマンドを含む。ユーザがコントロールを処理するとき、コントロールはコマンド内にパラメータをセットしてそれが実行されるようにする。コマンドは選択により特定されるモデル・データに作用する。
【０１５８】
（イミーディエイト）
データにすぐに影響を与えるコントロールは、リアル・モデル・データを特定する選択を含むコマンドを有する。ユーザがコントロールを処理するときコマンドはこのデータを変更する。データが変わるとき、それは変更通知を送り、データの状態に依存するビューとコントロールは正確に現在の状態を反映する。
【０１５９】
（遅延）
リアル・データを変更しないよう設計されたコントロールは代わりにプロトタイプのデータに作用しなければならない。リアル・モデル・データはユーザがOKボタンを押すような他のアクションを取るまで変更されない。これは２つの手法で達成される。
【０１６０】
コントロールはコントロールそれ自身を特定する選択を含むコマンドを含む。ユーザがコントロールを処理するとき、コマンドはコントロールの値を変更するが、他のモデル・データを変更させない。ユーザがＯＫボタンを押すと、ＯＫボタン内のコマンドは、ユーザが処理した各コントロール内の値に一致するようにリアル・モデル・データを変更する。
【０１６１】
コントロールは、ＯＫボタンにより含まれるコマンドのパラメータを特定する選択を含むコマンドを有する。ユーザがコントロールを処理するとき、コマンドはＯＫボタンのコマンドを変える。ユーザがＯＫボタンを押すとき、ＯＫボタンのコマンドはそれ自身に含まれる値を一致させるようにリアル・モデル・データを変更する。
【０１６２】
（独立）
互いに独立に動作するコントロールはコントロール・パネルあるいはダイアログ期間が完了した後、個々にアンドゥできるアクションを要求し表現する。これはコントロールにより実行された場合の、コマンドの通常の振る舞いである。
【０１６３】
（原子）
コントロールの他のセットは一緒に働き、原子動作としてアンドゥされ、リドゥされるように設計される。これは、ダイアログ・ボックスあるいはコントロールが開始されるときアンドゥ・スタック上にマークを置くことにより達成される。終了したとき、コントロール・パネルを解散させることによりあるいは（上記ＩＩＢのように）ユーザがＯＫボタンを押すときに、マークがアンドゥ・スタック上に置かれたときから実行されるコマンドのすべてが単一のコマンド群に集められる。この群は単一群としてアンドゥあるいはリドゥされることができる。
【０１６４】
（キャンセル）
（上記ＩＩＢのように、通常ＯＫボタンに伴う）CANCEL（キャンセル）ボタンを含むコントロール・パネルは、上記ＩＩＩＢで述べた技術と同様な技術である。マークは、ダイアログ・ボックスあるいはコントロール・パネルが開始されるときアンドゥ・スタック上に置かれる。ユーザがCANCELボタンを押すと、マークがアンドゥ(Undo)・スタックに置かれる前のすべてのコマンドがアンドゥ(Undo)される。この技術はコントロールがデータに直ちに影響を与えるか否かにかかわらず働く。
【０１６５】
（ダイアログ・ボックス内での原子コマンドの実行）
他のオブジェクトあるいはデータを処理するようユーザが対話するオブジェクトはコントロールと呼ぶ。コントロールの例は、メニュー、ボタン、チェックボックス、およびラジオ・ボタンである。各コントロールはコマンドを含み、それはエンド・ユーザ・アクションを実行する。コマンドは選択オブジェクトにより特定されるデータに作用する。ユーザがコントロールを処理するとき、それはコマンド内にパラメータをセットしてそれが実行されるようにする。このようにして、データ値を変更する。
【０１６６】
互いに独立に働くコントロールは、コントロール・パネルあるいはダイアログ期間が完了したあと、個々にアンドゥされることができる表現アクションを要求する。これは、コマンドがコントロールにより一旦実行されたとき通常の振る舞いである。他の組のコントロールは共に動作するように設計され、原子動作に従ってアンドゥされリドゥされるべきである。これはこの特許の主題である。
【０１６７】
原子実行の詳細な論理は第１４図に提供されるフローチャートに示される。処理は端子１４００に進み、コントロールは機能ブロック１４１０にすぐに通され、ダイアログ・ボックスが活性化される。ダイアログ・ボックスが活性化されるとき、マークはアンドゥ・スタック上に置かれる。アンドゥ・スタックはユーザが実行したすべてのコマンドのリストである。アンドゥが押されると、スタックの最上部のコマンドがアンドゥされる。すぐにリドゥされなければ、捨て去られる。その後、機能ブロック１４１０で、コントロールのユーザ処理が検出される。コントロールの処理が機能ブロック１４３０で述べたように適切にコマンドのデータ値を変更して、コントロールを実行する。例えば、チェックボックスは０と１の間でコマンドのｆチェック(fChecked)フィールドを行き来する。最後に、コマンドはアンドゥ・スタック上に記録され、機能ブロック１４４０に示されるように、続いてアンドゥされることができる。
【０１６８】
判定ブロック１４５０で検出されるように、ユーザが続いてダイアログ・ボックス内の各コントロールを処理すると、コントロールは機能ブロック１４３０に進む。しかしながら、判定ブロック１４６０で検出されるように、ユーザがＯＫボタンを押したときは、コントロールは機能ブロック１４２０に進む。最後に、ダイアログ・ボックス内の各コントロールがユーザの満足に達したとき、ユーザはＯＫボタンを押す。マークが機能ブロック１４４０でアンドゥ・スタック上に置かれて、以来実行されたすべてのコマンドは単一のコマンド群内に集められ、機能ブロック１４７０で示されるようにアンドゥ・スタック上に戻される。コマンド群は多くのコマンドを一緒に集めるコマンドである。実行され、アンドゥされ、あるいはリドゥされるとき、コマンド群は順番に各コマンドを実行し、アンドゥし、あるいはリドゥする。コマンド群は、その後、単一原子動作としてアンドゥされあるいはリドゥされることができるアンドゥ・スタック上に戻される。
【０１６９】
（ダイアログ・ボックス内の遅延されたコマンド実行）
ユーザが他のオブジェクトあるいはデータを処理するように対話するオブジェクトは、コントロールと呼ばれる。コントロールの例はメニュー、ボタン、チェックボックス、ラジオ・ボタンである。各コントロールはコマンドを含み、それはエンド−ユーザのアクションを処理する。コマンドは選択オブジェクトにより特定されるデータに作用する。ユーザがコントロールを処理するときそれはコマンド内にパラメータをセットしてそれが実行されるようにする。これにより、データ値が変更される。ユーザが他のアクションを実行するまでデータが遅延して変更されることは、本発明の１つの特徴である。例えば、ダイアログ・ボックス内のコントロールはユーザがOKボタンを押すまで、データ値を変更しようとしない。
【０１７０】
コントロールが生成されるときコマンドが特定されなければならない。コントロールはこのコマンドのコピーを作りそれをフィールドfCommandに格納する。コマンドが何らかのデータ値を供給するならば、コマンドの適切なゲット(Get)メソッドとセット(Set)メソッドへのポインタがまた特定されなければならない。コントロールはこれらのメソッド・ポインタをfGetMethodとfSetMethodのフィールドにそれぞれ格納する。コマンドにより修正されるデータは選択オブジェクトにより特定される。通常、この選択オブジェクトはリアル・モデル・データを特定する。代わりに、ＯＫボタンのコマンド内のデータ値を特定する選択オブジェクトであってもよい。
【０１７１】
ユーザがコントロールを処理するとき、コントロールのコマンドが実行されＯＫボタンのコマンド内のデータ値が変更される。ユーザがダイアログ・ボックス内の各コントロールを処理するとき、コントロールコマンドが実行されて、ＯＫボタンのコマンド内のデータ値が変更される。このようにして、ユーザがＯＫボタンを押すと、ＯＫボタン内のコマンドがコントロールのコマンドにより処理されるようにそれ自身内に含まれるデータ値に一致するようにリアル・モデル・データを更新する。この処理はコントロールの処理が完了するまで繰り返される。
【０１７２】
（ラベル）
ラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。それらはウィンドゥ、メニュー、ボタン、および他のコントロールを同定するために使用される。ラベルはそれらのコンテナの状態に従ってそれらの外見を変えることができる。それらは中間明度の灰色のバックグラウンド上に描かれ、特別の状態を表示する必要のないときに自然に現われる。ラベルは、非アクティブのとき、禁止されているとき、あるいは選択されたとき、その外見を変える。
【０１７３】
（非アクティブ）
ウィンドゥ・タイトルはウィンドゥが正面最上部でないとき非アクティブにセットされる。同様に、コントロールのラベルはコントロールが正面最上部のウィンドゥあるいはコンテナ内にないとき非アクティブにセットされる。グラフィック・ラベルは、薄暗く出現させるために、非アクティブのとき55％の白と混ぜられている。テキスト・ラベルでは、非アクティブペイントはＨＳＶカラー・モデルの飽和成分を処理することにより自然のペイントから導かれる。飽和は、非アクティブのとき０．４５倍される。
【０１７４】
（禁止（ディスエーブル））
コントロール・ラベルはコントロールが特定のコンテキスト中で適用しないときには薄暗くされる。グラフィック・ラベルは非アクティブのときには薄暗くするため４６％の白と混ぜられている。テキスト・ラベルでは、禁止ペイントはＨＳＶカラー・モデルの飽和成分を処理することにより自然のペイントから導かれる。飽和は、禁止のときに０．５４倍される。
【０１７５】
（選択）
コントロール・ラベルはコントロールが処理されるにつれてハイライトにされる。グラフィックとテキストはそれらの自然状態で描かれ、ハイライト状態のときに白いバックグラウンド上に描かれる。
【０１７６】
（スマート・コントロール・ラベル）
コントロールはオブジェクトあるいはデータの現在の状態を決定するためのコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新してそれが実行されるようにする。例えばチェックボックスはコマンド・パラメータをオンあるいはオフにセットして、そのコマンドを実行してデータ値を変更する。コントロールはその機能を示すようにラベルを表示する。このラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。コントロールが状態を変えるとき、ラベルは、開発者が付加的なコードを書くことを要求することなく自動的にその出現を変える。これらの状態は、アクティブ／非アクティブ、イネーブル／ディスエーブルおよび選択／非選択を含む。
【０１７７】
第１５図はスマート・ラベル処理と関連する詳細論理を示し、その処理は開始ターミナル１５００に進む。そこでは、コントロールはスマート・ラベルの初期化のためすぐに１５１０に進む。コントロールが生成されるとき、そのラベルはその関連するコマンドにより提供されるテキスト・ストリングあるいはグラフィックで初期化される。各コマンドはこの目的のためGetGraphicとGetNameと呼ばれるメソッドを提供する。コントロールはメソッドSetActiveをコールすることにより現在アクティブか非アクティブかをラベルに知らせる。同様に、コントロールはSetEnabledメソッドをコールしてそれがイネーブルであるか否かをラベルに知らせる。また、SetSelectedメソッドをコールしてユーザにより現在選択されているか否かをラベルに知らせる。
【０１７８】
スマート・ラベル処理での次のステップはラベルが描かれるとき機能ブロック１５２０で起きる。コントロールが活性化されているとき、それはそのラベルの描写(Draw)メソッドをコールしてラベルをその画面上に出現させる。非アクティブならばラベルは通常よりも薄暗く描かれる。これはＨＳＶカラー・モデルの飽和成分を処理することによりなされる。飽和は非アクティブのとき０．４５倍される。ディスエーブルならば、ラベルは通常よりも薄暗く描かれる。これはＨＳＶカラー・モデルの飽和成分を処理することによりなされる。飽和はラベルがディスエーブルのとき０．５４倍される。選択されたならば、ラベルはハイライトされたバックグラウンド上に出現させられる。ラベルは通常、中間色グレーのバックグラウンド上に描かれる。ハイライトされるときラベルは白いバックグラウンド上に描かれる。他には、ラベルは通常通り描かれる。
【０１７９】
次の処理はラベルが機能ブロック１５３０に示されるように活性化されている／非活性化されているとき起きる。コントロールが活性化されているあるいは非活性化されているとき、それはSetActive メソッドをコールしてラベルに知らせる。コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきで無効化(Invalidate)をコールすることによりその出現を更新することが必要であることを示す。その後、機能ブロック１５４０で、処理はコントロールがイネーブルあるいはディスエーブルされるとき起きる。コントロールは、イネーブルあるいはディスエーブルされるとき、SetEnabledメソッドをコールすることによりラベルに知らせる。その後、コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきで無効化(Invalidate)をコールすることによりその出現を更新することが必要であると示す。
【０１８０】
テストが判定ブロック１５５０で実行され、コントロールが選択されているか非選択であるかを判定する。コントロールが選択されあるいは非選択であるときは、SetSelected メッソドをコールすることによりラベルに知らせる。その後、コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきでInvaliate(無効化）をコールすることによりその出現を更新することが必要であると示し、コントロールは更なる処理のため機能ブロック１５２０に進む。
【０１８１】
（スマート・ウィンドゥ・ラベル）
タイトルはその目的を示すためにウィンドゥ内に表示される。例えばドキュメントを編集するためのウィンドゥのためのタイトルは通常ドキュメントの名称である。ラベル・オブジェクトはタイトルの追尾を保つために使用される。このラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。ウィンドゥが状態を変えると、ラベルは、開発者が付加的なコードを書くことを要求することなく、その出現を自動的に調整する。ウィンドゥはアクティブあるいは非アクティブのどちらかである。スマート・ウィンドゥ・ラベル処理は第１６図のフローチャートで示され、その詳細論理はそれを参照して説明される。
【０１８２】
第１６図の処理はターミナル１６００に進み、そこでコントロールはタイトルが初期化されるべきために機能ブロック１６１０にすぐに進む。ウィンドゥ・タイトルはウィンドゥが生成されるとき開発者により特定される。このタイトルはfTitleと呼ばれるTLabelオブジェクト内に格納される。コントロールは、メソッドSetActive をコールしてアクティブかあるいは非アクティブかをタイトルに知らせる。その後機能ブロック１６２０に進む。ウィンドゥが描かれるとき、そのfTitleオブジェクトのDrawメソッドをコールしてタイトルが画面上に出現するようにする。非アクティブのときタイトルは通常より薄暗く描かれる。これはＨＳＶカラー・モデルの飽和成分を処理することによりなされる。飽和はラベルが非アクティブのとき０．４５倍される。他の場合には、タイトルは通常通り描かれる。
【０１８３】
次のステップはタイトルが機能ブロック１６３０で活性化されている／非活性化されているとき処理される。ウィンドゥが活性化されているあるいは非活性化されているとき、それはSetActiveメソッドをコールしてそのfTitleオブジェクトに知らせる。その後、ウィンドゥは、再描画される必要がある画面の一部を示すアーギュメントつきでInvalidateをコールすることによりその出現は更新することが必要であると示す。その後、その新しい状態を反映するようにタイトルを再描画するためにコントロールは機能ブロック１６２０に戻る。
【０１８４】
（デコレーション）
ユーザ・インターフェイス要素の多くの視覚的測面は、多くの要素間で共通である。例としてシャドウ、境界、およびラベルがある。個々の可視的特徴はデコレーションとして参照される。デコレーションは他のグラフィックスと結合されてウィンドゥとコントロールのような特定のユーザ・インターフェイス要素の可視的形状を形成する。本発明の主題は多くのことなる形式のデコレーションをサポートすることである。
【０１８５】
（バックグラウンド）
他のオブジェクトの後ろに描かれるデコレーションはバックグラウンドと呼ばれる。１つの形式のバックグランドは周囲の描画面とフラッシュするように描かれる。それはフレームつきであるいはフレーム無しで描かれてもよい。他の形式のバックグランドはハイライトとシャドウつきで描かれ、それは回りの描画面から持ち上げられているように見える。最後の形式のバックグランドはハイライトとシャドウつきで描かれ、それは周囲の描画面より後退して見える。
【０１８６】
これらのバックグランドの使用例はボタンである。通常ボタンを述べるテキストあるいはグラフィックは持ち上がったバックグランドの上に描かれる。ユーザにより押されると、テキストあるいはグラフィックは後退したバックグランド上に再描画される。他のウィンドゥがアクティブのときのようにボタンが非アクティブならば、ボタンのテキストあるいはグラフィックはフラッシュ・バックグランド上に薄暗く描かれる。
【０１８７】
（境界）
他のオブジェクトあるいはエリアを囲むデコレーションは境界と呼ぶ。境界の例はフレームとシャドウである。フレームはリアル・ワールド内でのペイントを包み込むフレームのように他のグラフィックを囲む境界である。バックグランドのように、フレームは、周囲の描画面よりしたに後退したように、フラッシュするように、あるいはそれより持ち上がったように描くことができる。シャドウはオブジェクトの回りにシャドウを加える特定の形式の境界であり、周囲面より浮いているかのようにそれを見せる。
【０１８８】
ユーザ・インターフェイス要素の多くの視覚的測面は、多くの要素間で共通である。例としてシャドウ、境界、およびラベルがある。これらの個々の視覚的特徴の各々はデコレーションとして参照される。デコレーションは他のグラフィックスと結合されてウィンドゥとコントロールのような特定のユーザ・インターフェイス要素の視覚的形状を形成する。あるデコレーションはハイライトとシャドウを用いて周囲描画面より上にあるいは下にあるかのように見せる。デコレーションはこれらのハイライトとシャドウのペイントを自動的に導くことができる。
【０１８９】
（塗りつぶし(Fill Paint)）
塗りつぶしはデコレーションの基本的カラーを表す。すべての他のペイントは塗りつぶしから導かれる。塗りつぶしはfFillPaintと呼ばれるカラー・フィールド内に管理者により格納される。塗りつぶしは通常、デコレーションが生成されるときに作成者により特定される。しかしながら、カラーが特定されないと、中間色グレーが選択される。
【０１９０】
（フレーム・ペイント(Frame Paint)）
フレーム・ペイントはデコレーションの回りに線を描くために使用され可視的なコントラストを提供する。フレーム・ペイントはfFramePaintと呼ばれるTColorのフィールド内にデコレーションにより格納される。フレーム・ペイントはデコレーションが生成されるとき開発者により特定されてもよい。しかしながら、フレーム・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはＨＳＶカラー・モデルの飽和と値成分を処理することによりなされる。飽和は最大値が１として、４倍される。値は４で割られる。
【０１９１】
（ハイライト・ペイント(Highlight Paint)）
ハイライト・ペイントは、オブジェクトが実際の３次元オブジェクトであるならば光がそのオブジェクトにあたる線を描くために使用される。ハイライト・ペイントはfHighlightPaintと呼ばれるTColorフィールド内にデコレーションにより格納される。ハイライト・ペイントはデコレーションが生成されるとき開発者により特定されてもよい。しかしながら、ハイライト・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはＨＳＶカラー・モデルの飽和と値成分を処理することによりなされる。飽和は０．８倍される。値は最大値を１として、１．２５倍される。
【０１９２】
（シャドウ・ペイント(Shadow Paint)）
シャドウ・ペイントは、オブジェクトが実際の３次元オブジェクトであるならば光がそのオブジェクトにあたる線を描くために使用される。ハイライト・ペイントはfHighlightPaintと呼ばれるTColorフィールド内にデコレーションにより格納される。ハイライト・ペイントはデコレーションを生成するとき開発者が特定してもよい。しかしながら、ハイライト・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはＨＳＶカラー・モデルの飽和と値成分を処理することによりなされる。飽和は０．８倍される。値は最大値を１として、１．２５倍される。
【０１９３】
（セマンティックからの入力シンタクスの分離）
グラフィック・ユーザ・インターフェイスはマウスを動かし、それらを選択するためにオブジェクトをクリックし、移動またはコピーのためにオブジェクトをドラッグし、その後それらをオープンするためにダブル・クリックすることにより処理される。これらのオペレーションは直接操作あるいは対話と呼ばれる。マウスをユーザが押し、動かし、離すことに対応するイベントのシーケンスは入力シンタクスと呼ばれる。あるイベント・シーケンスは、セマンティック・オペレーションと呼ばれる特定のアクションを示すために使用される。
【０１９４】
セマンティック・オペレーションを処理するコードから入力シンタクスを理解するためのコードを分離することは本発明の主題である。この処理は対話（Interacts)と対話可能（Interactable)と呼ばれるオブジェクト内にそれぞれ埋め込まれる。第１７図はオブジェクトがどのようにして生成され、動かされ選択されることができるオブジェクトとの一般的な対話の間でどのように互いに通信するかを示す。
【０１９５】
処理はターミナル１７００に進み、そこでコントロールは機能ブロック１７１０にすぐに通され、マウス・ボタンが押されたかどうかを決定する。マウス・ボタンが押された位置で画面の一部に対して応答可能なオブジェクトにイベントが送られる。このオブジェクトはビュー(View)と呼ばれる。その後、機能ブロック１７２０で、インタラクタ(Interactor)が入力シンタクスを説明するために生成される。これはビューのメソッド・インタラクタ生成(CreateInteractor)をコールすることによりなされる。インタラクタ(Interactor)が生成されると、可能なユーザ・アクションを実行するオブジェクトへのポインタがパラメータとして渡される。
【０１９６】
この議論のために、ユーザが、選択され動かされることができるオブジェクト上でマウス・ボタンを押したとする。この場合、選択を実行するオブジェクトと目標オブジェクトに向かって移動するオブジェクトとがパラメータとしてインタラクタ(Interactor)に渡される。初期のビュー(View)はこれらの振る舞いの両方を実行することができるであろう、あるいはそれらは１つあるいは２つの別のオブジェクトにより実行されることができるであろう。オブジェクトあるいは複数のオブジェクトは対話可能(Interactable)と統括的に呼ばれる。
【０１９７】
インタラクタ(Interactor)は機能ブロック1730で開始される。この処理はインタラクタ(Interactor)Viewに戻してインタラクタ(Interactor)の処理を進める。これはInteractorStartメソッドをコールしてパラメータとして初期マウス・イベントを渡すことによりなされる。Start メソッドはfInitialEventに初期マウス・イベントを保存する。インタラクタ(Interactor)は変数fIntercationTypeを定数kSelectにセットすることにより選択(Select)モードにはいる。それはそのSelectBeginメソッドをコールすることにより選択動作を開始するようインタラクタブル(Interactable)に依頼する。
【０１９８】
その後、インタラクタ(Interactor)は、短い時間待って、機能ブロック１７４０で示されるように、通過する。新しいマウス・イベントが、マウスの現在の状態を示す時間となったとき、インタラクタ(Interactor)に送られる。その後、システムはマウスが判定ブロック１７５０でまだ押されていることを検出すると、コントロールは機能ブロック１７４０にまで通される。他に、コントロールはターミナル１７６０に通される。マウス・ボタンがまだ押されていれば、インタラクタ(Interactor)はまだ正しい状態にあると確信して、Interactableに正しい操作を実行するよう依頼する。インタラクタ(Interactor)はfInteractionがkSelectionであれば、Selecting （選択中）である。fInteractionTypeがkMoving であれば、それはMoving（移動中）である。
【０１９９】
選択(select)中ならば、インタラクタ(Interactor)は現在のマウス位置と初期マウス位置を比較する。現在のマウス位置はGetCurrentLocationをコールすることにより得られる。初期マウス位置はGetInitialLocationをコールすることにより得られる。２つが同じかあるいは多少しか異ならなければ、ユーザはまだオブジェクトを選択している。その後、インタラクタ(Interactor)は、そのSelectRepeatメソッドをコールすることにより選択操作を継続するようInteractableに依頼する。しかしながら、２つの点が予め決められたスレッシュホールド以上に異なるときには、ユーザはオブジェクトを動かし始めている。この場合、インタラクタ(Interactor)はそのSelectEndメソッドをコールすることにより選択操作を終了するようInteractableに依頼する。その後、その移動開始メソッドをコールして移動動作を始めるようにInteractableに依頼する。各々の場合、現在のマウス位置は引数(argument)として渡される。Moving（移動中）ならば、インタラクタ(Interactor)はMoveRepeatをコールして移動動作を継続するようインタラクタブルInteractableに依頼する。それは引数(argument)として現在のマウス位置を渡す。
【０２００】
ユーザがマウス・ボタンを離すとき、それは現在の動作の終了を知らせる。Selecting(選択中）ならば、インタラクタ(Interactor)は、そのSelectEndメソッドをコールして選択動作を終了するようInteractableに依頼する。移動中ならば、インタラクタ(Interactor)はそのMoveEndメソッドをコールして移動動作を終了するようInteractableに依頼する。
【０２０１】
（局所化プレゼンテーション）
局所化はアプリケーションを更新するプロセスであり、特定の場所のユニークな表現に従う。それは、言語の翻訳、グラフィック置換、およびインターフェイス要素の再配向を含む。例えば、ラベル、タイトル、およびメッセージの中で使用されるテキストは選択された言語に依存する。その方向と配向はメニュー、メニュー・バー・タイトル、スクロールバーあるいはツールバーの配置と配向に影響を与える。同様に、アイコンと他のグラフィックシンボルの選択は開発に依存する。不幸にも、メモリ内にユーザ・インターフェイス要素の多くの局在化されたバージョンをもつことは非常に高いものとなる。代わりに、ユーザ・インターフェイス要素の局在化バージョンは、メモリ内で要求されるまでディスク上に保たれる。
【０２０２】
さらに、ユーザ・インターフェイス要素のすべての追尾を保ち、どのバージョンが使用されるべきかを決定することは非常にエラーとなりやすく高価である。代わりに、ユーザ・インターフェイス要素が要求されるとき適切なものが現在の言語と他の文化的パラメータに従ってシステムにより自動的に選択しメモリに読み込む。
【０２０３】
一旦局所化されると、ユーザ・インターフェイス要素はディスク・ディクショナリ内に格納される。ディスク・ディクショナリは、キーに与えられるとき、それをディスク内にあるいはディスクから読んだあとに値を戻るオブジェクトである。このディスク・ディクショナリは保管所（アーカイブ）と呼ばれるオブジェクトにより管理される。アーカイブは特定の表現を構成する個々のユーザ・インターフェイス要素を一緒に置く。適当なユーザ・インターフェイス要素の選択のプロセスは第19図に提供される。
【０２０４】
処理はターミナル１９００に進み、ユーザがプレゼンテーションをリクエストするときすぐに機能ブロック１９１０に通される。TOpenPresentationCommandはデータ・モデルに送られ、ユーザがこのデータをビューあるいは編集したいということを示す。このコマンドはTOpenPresentationCommand呼ばれる。プレゼンテーションはユーザがあるデータをビューしあるいは編集することを可能とするユーザ・インターフェイス要素の組である。プレゼンテーションはユーザ・インターフェイス・オブジェクト内の期間に渡って格納され、このようにしてユーザのために連続性を維持する。ユーザ・インターフェイス要素はメモリ内で必要となるまでディスクに格納される。それらはユーザがリクエストしたデータプレゼンテーションの一部として要求され、あるいは翻訳あるいは他の局所化プロセスのために必要とされることがある。各ユーザ・インターフェイス要素はその要素をユニークに参照するＩＤを含む。しかしながら、同じユーザ・インターフェイス要素のすべての局在化バージョンは単一のＩＤを共有する。
【０２０５】
局在化バージョンを異ならせるために、特定の言語、記述方向、および他の文化的パラメータが各局在化されたユーザ・インターフェイス要素と共に格納される。一緒に、これらのパラメータは場所として参照される。ユーザ・インターフェイス要素のすべてはファイルに格納される。このファイルは１つあるいはそれ以上のキー／値の対付きで、ディクショナリと同様に組織化される。そのキーはＩＤと場所を結合するオブジェクトである。値はユーザ・インターフェイス要素それ自身である。
【０２０６】
新しいプレゼンテーションが機能ブロック１９２０で次に生成されなければならない。適切なプレゼンテーションは既に存在しないので、新しいものがユーザ・インターフェイス、アーカイブによりテンプレートから生成されなければならない。新しいプレゼンテーションはそのCreatePresentationメソッドをコールすることによりアーカイブの中に格納されるテンプレートから生成される。プレゼンテーションの形式はパラメータとしてこのメソッドに渡される。この形式は、表示されるべきデータの形式、それがそれ自身のウィンドゥあるいは他のプレゼンテーションの一部の中に存在すべきか否か等の情報を含む。最後に、機能ブロック１９３０で、アーカイブは場所に従ってユーザ・インターフェイス要素を選択して、プレゼンテーションを構築する。アーカイブが特定の形式のプレゼンテーションを構築することができれば、それはプレゼンテーションを構築しユーザ・インターフェイス・オブジェクトにこれを戻す各ユーザ・インターフェイス要素を一緒に集める。
【０２０７】
アーカイブが構築することができる各プレゼンテーションでは、それはプレゼンテーションを一緒に構築するユーザ・インターフェイス要素のリストをもつ。ユーザ・インターフェイス要素はコールされたディスク・ディクショナリにより維持されているディスク上に格納される。キーを与えると、ディスク・ディクショナリは対応するユーザ・インターフェイス要素を戻す。ユーザ・インターフェイス要素のＩＤはこのキーの基本的部分を構成する。キーの第２の要素は望ましい場所である。場所は、ユーザの自然言語と他の文化的属性を特定するオブジェクトである。場所は、参照サーバ(Preferences Server)からアーカイブにより自動的に得られる。このサーバはユーザに関連する個々の好みのすべてを含む。
【０２０８】
好みのサーバから得られる場所はＩＤと共に、TUserInterfaceElementKeyと呼ばれる単一のオブジェクトの中に結合される。このキーはパラメータとしてディスク・ディクショナリのGetValueメソッドに渡される。一致するＩＤと場所もつユーザ・インターフェイス要素が見つけられると、プレゼンテーションの一部として戻され含まれる。他に、場所パラメータはキーから省略されなければならず、あるいは他の場所がユーザ・インターフェイス要素が見つけられるまで特定されなければならない。
【０２０９】
（対話フレームワーク・システム）
オブジェクト指向オペレーティング・システムのグラフィック・ユーザ・インターフェイスのユーザは、しばしば、マウスを動かし、オブジェクトを選択するためにクリックし、移動あるいはコピーのためにオブジェクトをドラッグし、その後オブジェクトをオープンするためにダブル・クリックする。これらの動作は直接操作あるいは対話と呼ばれる。マウスをユーザが押し、移動し、離すことに対応するイベントのシーケンスは入力シンタクスと呼ぶ。あるイベント・シーケンスが特定のアクションを示すために使用され、セマンティック動作と呼ばれる。本発明は、Select（選択），Peek（ピーク），Move（移動），AutoScroll（自動スクロール）およびDrag/Drop(Copy)(ドラッグ／ドロップ）（コピー）をサポートするオブジェクトのセマンティック動作に入力シンタクスを翻訳するための方法と装置を開示する。
【０２１０】
本発明は、マウス・ボタンの押下を検出し以下の論理を採用する。  
（ａ）ユーザがマウス・ボタンを押したときオプション・キーが押されていたら、システムは変数fInteractionTypeを定数kDragにセットすることによりドラッグ・モードに入る。その後システムは動作の目標として選択されたオブジェクトを用いてドラッグ動作を進める。あるいは、  
（ｂ）オプション・キーが押されていなかったならば、システムは変数fInteractionTypeを定数kSelectにセットすることにより選択モードに入る。その後、選択動作が進められる。
【０２１１】
ユーザが既にマウス・ボタンを押していて押したままに保っているときには、以下の論理が関係する。システムは選択モードにあり、システムは最初にユーザがマウスを、移動スレッシュホールドと呼ばれるあるスレッシュホールド以上に動かしたか否かを判定する。これは、GetInitialLocationメソッドにより戻される初期のマウス位置をGetCurrentLocationメソッドにより戻される現在のマウス位置と比較することによりなされる。マウスが移動スレシュホールド以上に動かされていればシステムは選択モードを終了し移動モードに入る。それは変数InteractionTypeを定数kMoveセットすることにより行う。システムはその後そのSelectEndメソッドをコールして選択動作を終了するようオブジェクトをクエリーする。その後、システムはそのMoveBeginメソッドをコールすることにより移動動作を開始する。
【０２１２】
他に、マウスが動いていないときには、システムはマウスがどのくらい長く押されたままかをチェクするGetCurrentTimeメソッドにより戻される現在の時間を比較することによりなされる。マウスがピーク(peek)スレシュホールドと呼ばれるあるスレシュホールド以上押下されたままならば、システムは選択モードを終了しピーク・モードに入る。それは変数fInteractionTypeを定数kPeekにセットすることにより行う。それは、そのSelectEndメソッドをコールして選択動作を終了するようオブジェクトに依頼して、そのPeekBeginメソッドをコールしてピーク動作を開始する。他に、マウスが動かされないとき、あるいはあるピーク・スレシュホールドを越えて押されなときは、システムはオブジェクトのSelectRepeatをコールして選択動作を継続する。システムがユーザが移動モードにあることを検出したときは、システムはまずユーザがウィンドゥ内で、あるいはウィンドゥの境界上で、あるいはウィンドゥの外でマウスを動かしたか否かを判定する。それは、GetCurrentLocationメソッドにより戻される現在マウス位置とGetContainerBoundsにより戻されるオブジェクトのコンテナの境界とを比較して行う。
【０２１３】
マウスがまだウィンドゥ内にあれば、システムはオブジェクトのMoveRepeat（移動反復）メソッドをコールして移動動作を継続する。マウスがウィンドゥの境界上にあれば、これは自動スクロール動作を示す。システムはマウス位置により示される方向にスクロールするようにオブジェクトのコンテナに依頼する。これは、コンテナのAutoScrollメソッドをコールして、現在のマウス位置をパラメータとして通すことによりなされる。一旦完了すると、システムは、オブジェクトのMoveRepeatメソッドをコールして移動動作を継続する。
【０２１４】
マウスがウィンドゥの外にあれば、システムは移動動作を終了してドラッグ・モードに入る。それは、変数fInteractionTypeに定数kMoveをセットすることにより行う。それは、そのMoveEndメソッドをコールして移動動作を終了するようオブジェクトに依頼する。それは、そのDragBeginメソッドをコールしてドラッグ動作を開始するようにオブジェクトに依頼する。システムがドラッグ・モードにあるときには、システムはオブジェクトのDragRepeatメソッドをコールしてドラッグ動作を継続する。システムがピーク・モードにあるときには、システムは最初に、移動スレッシュホールドと呼ばれるあるスレッシュホールドを越えてマウスをユーザが移動したか否かを判定する。これは、GetInitialLocationメソッドにより戻される初期マウス位置とGetCurrentLocationメソッドにより戻される現在マウス位置とを比較してこれを行う。
【０２１５】
マウスが移動スレシュホールドを越えて動いていたときには、システムはピーク動作を終了して移動モードに入る。それは、変数fInteractionTypeを定数kMoveにセットすることにより行う。それは、そのPeekEndメソッドをコールしてピーク動作を終了するようオブジェクトに依頼する。それは、そのMoveBeginメソッドをコールして移動動作を開始する様にオブジェクトに依頼する。他に、マウスが動かされていないときには、システムはオブジェクトのPeekRepeatメソッドをコールしてピーク動作を継続する。
【０２１６】
システムがマウス・ボタンをユーザが離したことを検出したときには、選択モードにあれば、システムは選択モードを終了する。それは変数fInteractionTypeを定数kNoneにセットすることにより行う。システムはそのメソッド選択終了をコールして選択動作を終了するようオブジェクトにクエリーする。システムが移動モードにあるときには、システムは移動モードを終了する。それは変数fInteractonTypeを定数kNoneにセットすることによりこれを行う。その後、システムはそのMoveEndメソッドをコールして移動動作を終了するようオブジェクトにクエリーして、変数fInteractonTypeを定数kNoneにセットすることによりドラッグ・モードを終了する。システムがピーク・モードにあるときには、システムはピーク・モードを終了する。それは変数fInteractonTypeを定数kNoneにセットすることにより行う。それは、そのPeekEndメソッドをコールしてピーク動作を終了するようオブジェクトに依頼する。
【０２１７】
ユーザがスクロールバーを動かすにつれて動的にウィンドゥの内容を更新することを可能とするハードウェアとソフトウェアのシステムを提供することが本発明の基本的目的である。システムはユーザがスクロールバーを押したことを検出する。ユーザがスクロールバーを押したとき、システムはスクロール・コマンドの初期化を始め、ウィンドゥ内に表示されているデータ部分を変更する。コマンドはスクロールのようなエンド・ユーザ・アクションを処理するオブジェクトである。スクロール・コマンドは１つのパラメータ、内容のビューがスクロールされるべき位置を有する。システムはこの位置を現在のスクロール位置にセットする。これは、コマンドのSetScrollPositionメソッドをコールして、スクロールバーのメソッドのGetScrollPositionにより戻される値に位置にスクロールを設定することによりなされる。
【０２１８】
ユーザがスクローバー内でマウスを動かすときには、システムはスクロール・コマンドの実行を継続してウィンドゥ内に表示されているデータ部分を動的に変更する。システムはコマンドのスクロール位置を新しいスクロール位置にセットする。この処理はコマンドSetScrollPositionをコールしてスクロールバーのメソッドのGetScrollPositionにより戻される値に等しく値をセットすることによりなされる。コマンドの実行は、その後、そのDoRepeatメソッドをコールすることにより繰り返される。これによりビューの内容が新しい位置にスクロールされる。この処理はユーザがマウス・ボタンを押し続けている間継続する。
【０２１９】
ユーザがマウス・ボタンを離したときには、システムはスクロール・コマンドの実行を終了してウィンドゥ内に表示されているデータ部分を動的に変更する。システムはコマンドのスクロール位置を最終スクロール位置にセットする。この処理はコマンドSetScrollPositionをコールしてスクロールバー・メソッドのGetScrollPositionにより戻される値に位置にそれが等しくなるようにセットすることによりなされる。
【０２２０】
第２０図は本発明によるスクロールと関連する詳細論理を示すフローチャートである。処理はターミナルブロック２０００に進み、すぐに機能ブロック２０１０に通される。そこで、現在のスクロール位置が現在のカーソル位置に基づいて初期化される。その後、判定ブロック２０２０で、スクロールバーつまみ(scrollbar thumb) 選択されたかどうかを検出するようにテストを行う。スクロールバーつまみの例を第２１Ａ図にラベル２１１０に示す。スクロールバーつまみが選択されたときには、コントロールは、スクロールバーが動かされたか否かを判定するために判定ブロック２０３０に通される。そうならば、スクロール位置はスクロールバーつまみの新しい位置に送られ、表示がすぐスクロール動作に反映して再フォーマットされユーザのために表示がなされる。スクロールバーつまみが動いていなければ、他のテストが判定ブロック２０５０で行われ、スクロールバーつまみが離されたか否かが判定される。そうでなければ、コントロールは判定ブロック２０３０に戻される。スクロールバーつまみが離されていれば、コントロールは機能ブロック２０６０に通され、スクロール動作を終了してシステムを非スクロール動作状態に戻り、処理はターミナル２０７０で完了する。
【０２２１】
第２１Ａ図、第２１Ｂ図、および第２１Ｃ図は本発明によるウィンドゥ・スクロールを示す。第２１Ａ図では、スクロールバーつまみ２１１０はウィンドゥ２１１２の最上部にある。第２１Ｂ図は、スクロールバーつまみ２１２０がウィンドゥの中央に動かされ、従ってウィンドゥの内容２１２２が更新されることを示す。第２１図は、スクロールバーつまみ２１４０がウィンドゥの底部に動かされ、ウィンドゥの最も底の部分が表示されていることを示している。
【図面の簡単な説明】
【０２２２】
【図１Ａ】本発明のパーソナル・コンピュータ・システムのブロック図である。
【図１Ｂ】本発明による表示を示す図である。
【図２】本発明によりアプリケーションを生成するために使用されるツールを示す図である。
【図３】本発明によるコマンド・プロセスのフローチャートである。
【図４】本発明によるチェックボックス・コントロールを示す図である。
【図５】本発明によるチェックボックス・コントロールの活性化を示す図である。
【図６】本発明によるチェックボックスの更新を示す図である。
【図７】本発明によるチェックボックス・コントロール処理の要約を示す図である。
【図８】本発明によるコントロール・パネルを示す図である。
【図９】本発明によるダイアログ・ボックスを示す図である。
【図１０】本発明によるダイアログ・ボックス・カラー・コントローラを示す図である。
【図１１】本発明によるラジオ・ボタンを示す図である。
【図１２】本発明によるメニュー状態処理の詳細なフローチャートである。
【図１３】本発明による表示の絵を示す図である。
【図１４】本発明による原子実行の詳細論理を示す図である。
【図１５】本発明によるスマート・ラベル処理と関連する詳細論理を示す図である。
【図１６】本発明によるスマート・ウィンドゥ・ラベル処理の詳細論理を示す図である。
【図１７】本発明により動かされ選択されることができるオブジェクトとの一般的対話の間にどのようにしてオブジェクトが生成されるかとどのようにしてオブジェクトが相互に通信するかを示す図である。
【図１８】本発明による通知ソース・オブジェクトのためのオブジェクト生成通知フローチャートである。
【図１９】本発明による適当なユーザ・インターフェイス要素を選択することと関連する詳細論理を示すフローチャートである。
【図２０】本発明によるスクロールと関連する詳細論理を示すフローチャートである。
【図２１Ａ】本発明によるウィンドゥ・スクロールを示す図である。
【図２１Ｂ】本発明によるウィンドゥ・スクロールを示す図である。
【図２１Ｃ】本発明によるウィンドゥ・スクロールを示す図である。
【符号の説明】
【０２２３】
１０  中央演算装置
１２  システム・バス
１４  ランダム・アクセス・メモリ（ＲＡＭ）
１６  リード・オンリ・メモリ（ＲＯＭ）
１８  Ｉ／Ｏアダプタ
２０  ディスク・ユニット
２２  ユーザ・インターフェイス・アダプタ
２４  キーボード
２６  マウス
２８  スピーカー
３２  マイクロフォン
３４  通信アダプタ
３６  表示アダプタ
３８  表示装置
【図１Ａ】
2008176807.tif 000003
【図１Ｂ】
2008176807.tif 000004
【図２】
2008176807.tif 000005
【図３】
2008176807.tif 000006
【図４】
2008176807.tif 000007
【図５】
2008176807.tif 000008
【図６】
2008176807.tif 000009
【図７】
2008176807.tif 000010
【図８】
2008176807.tif 000011
【図９】
2008176807.tif 000012
【図１０】
2008176807.tif 000013
【図１１】
2008176807.tif 000014
【図１２】
2008176807.tif 000015
【図１３】
2008176807.tif 000016
【図１４】
2008176807.tif 000017
【図１５】
2008176807.tif 000018
【図１６】
2008176807.tif 000019
【図１７】
2008176807.tif 000020
【図１８】
2008176807.tif 000021
【図１９】
2008176807.tif 000022
【図２０】
2008176807.tif 000023
【図２１Ａ】
2008176807.tif 000024
【図２１Ｂ】
2008176807.tif 000025
【図２１Ｃ】
2008176807.tif 000026
【手続補正書】
【提出日】平成20年3月26日(2008.3.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリと該メモリのシステムアドレス空間に格納されたオペレーティング・システムを有するコンピュータ・システムで使用する装置であって、デバイス・イベント信号を生成するユーザ入力装置と、前記メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する装置において、
（ａ）前記アプリケーションアドレス空間に生成され、前記オブジェクト指向アプリケーション・プログラムによって使用されるデータを操作する複数のメソッドを含む対話可能オブジェクトと、
（ｂ）前記システムアドレス空間に生成され、前記デバイス・イベント信号に応答して前記対話可能オブジェクトの前記データを操作する複数のメソッドのうち予め定められた１つを呼び出し、前記データを変更する対話オブジェクトと
を備えたことを特徴とする装置。
【請求項２】
前記コンピュータ・システムは、表示画面を含み、
前記対話可能オブジェクトは、前記表示画面に表示する画像を定義するデータを含むことを特徴とする請求項１に記載の装置。
【請求項３】
前記対話可能オブジェクトは、前記画像データを操作することにより前記表示画面上の画像のアピアランスを変更する選択メソッドを含むことを特徴とする請求項２に記載の装置。
【請求項４】
前記対話可能オブジェクトは、前記表示画面上の画像を動かすムーブ・メソッドを含むことを特徴とする請求項３に記載の装置。
【請求項５】
前記ユーザ入力装置は、マウスであり、
前記対話オブジェクトは、前記マウスからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すことを特徴とする請求項４に記載の装置。
【請求項６】
前記ユーザ入力装置は、キーボードであり、
前記対話オブジェクトは、前記キーボードからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すことを特徴とする請求項４に記載の装置。
【請求項７】
前記対話可能オブジェクトは、前記アプリケーションアドレス空間において、前記システムアドレス空間に格納された対話可能クラス情報から生成されることを特徴とする請求項１に記載の装置。
【請求項８】
前記対話可能オブジェクトは、前記システムアドレス空間において、前記システムアドレス空間に格納された対話クラス情報から生成されることを特徴とする請求項１に記載の装置。
【請求項９】
前記対話オブジェクトは、前記デバイス・イベント信号に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記データを操作する複数のメソッドのうち所定の１つを呼び出し、前記要求された動作を実行することを特徴とする請求項１に記載の装置。
【請求項１０】
前記対話オブジェクトは、前記デバイス・イベント信号の時間系列に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記データを操作する複数のメソッドのうち所定の１つを呼び出し、前記要求された動作を実行することを特徴とする請求項１に記載の装置。
【請求項１１】
前記コンピュータ・システムは、表示画面を含み、
前記表示画面の一部に情報を表示する手段と、前記デバイス・イベント信号に応答するビューオブジェクトにおいて対話オブジェクトのインスタンスを作成する手段とを有するビューオブジェクトをさらに備えたことを特徴とする請求項１に記載の装置。
【請求項１２】
メモリと該メモリのシステムアドレス空間に格納されたオペレーティング・システムを有するコンピュータ・システムのプロセッサで実行されるコンピュータ・プログラムであって、デバイス・イベント信号を生成するユーザ入力装置と、前記メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供するコンピュータ・プログラムにおいて、
（ａ）前記アプリケーションアドレス空間に対話可能オブジェクトのインスタンスを生成するプログラム・コードであって、前記対話可能オブジェクトは、前記オブジェクト指向アプリケーション・プログラムによって使用されるデータを操作する複数のメソッドを含むプログラム・コードと、
（ｂ）前記システムアドレス空間に対話オブジェクトのインスタンスを生成するプログラム・コードであって、前記対話オブジェクトは、前記デバイス・イベント信号に応答して前記対話可能オブジェクトの前記データを操作する複数のメソッドのうち予め定められた１つを呼び出し、前記データを変更するプログラム・コードと
を備えたことを特徴とするコンピュータ・プログラム。
【請求項１３】
前記コンピュータ・システムは、表示画面を含み、
前記対話可能オブジェクトは、前記表示画面に表示する画像を定義するデータを含むことを特徴とする請求項１２に記載のコンピュータ・プログラム。
【請求項１４】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記画像データを操作することにより前記表示画面上の画像のアピアランスを変更する選択メソッドを含む前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項１３に記載のコンピュータ・プログラム。
【請求項１５】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記表示画面上の画像を動かすムーブ・メソッドを含む前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項１４に記載のコンピュータ・プログラム。
【請求項１６】
前記ユーザ入力装置は、マウスであり、
前記対話オブジェクトは、前記マウスからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すプログラム・コードを含むことを特徴とする請求項１５に記載のコンピュータ・プログラム。
【請求項１７】
前記ユーザ入力装置は、キーボードであり、
前記対話オブジェクトは、前記キーボードからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すプログラム・コードを含むことを特徴とする請求項１５に記載のコンピュータ・プログラム。
【請求項１８】
前記システムアドレス空間に前記対話可能クラス情報をロードするプログラム・コードをさらに備え、
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記アプリケーションアドレス空間において、前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項１２に記載のコンピュータ・プログラム。
【請求項１９】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記対話オブジェクトは、前記システムアドレス空間において、前記システムアドレス空間に格納された対話可能クラス情報から前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項１２に記載のコンピュータ・プログラム。
【請求項２０】
前記対話オブジェクトは、前記デバイス・イベント信号に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記データを操作する複数のメソッドのうち所定の１つを呼び出し、前記要求された動作を実行するプログラム・コードでインスタンス化されることを特徴とする請求項１２に記載のコンピュータ・プログラム。
【請求項２１】
前記対話オブジェクトは、前記デバイス・イベント信号の時間系列に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記データを操作する複数のメソッドのうち所定の１つを呼び出し、前記要求された動作を実行するプログラム・コードでインスタンス化されることを特徴とする請求項１２に記載のコンピュータ・プログラム。
【請求項２２】
前記コンピュータ・システムは、表示画面を含み、
前記表示画面の一部に情報を表示する手段と、前記デバイス・イベント信号に応答するビューオブジェクトにおいて対話オブジェクトのインスタンスを作成する手段とを有するビューオブジェクトのインスタンスを生成するプログラム・コードをさらに備えたことを特徴とする請求項１２に記載のコンピュータ・プログラム。