(57)【要約】【課題】  ユーザインターフェースオブジェクトの開発者が、アンドゥ情報の生成および追跡に責任をもたなくてよいように、アンドゥ情報を自動的に生成し追跡する方法、システム、およびコンピュータプログラム製品を提供すること。【解決手段】  ビジュアルユーザインターフェース設計ツールにおける、オブジェクトへの変更に対する変更通知が処理される。変更前のオブジェクトの初期状態を表すデータ、および変更後のオブジェクトの事後状態を表すデータが維持される。オブジェクトへの変更を取り消すために、維持されたデータからアンドゥユニットが準備される。アンドゥユニットは、オブジェクトに対して行われた複数の変更のトランザクションを含むことができる。各アンドゥユニットは、対応するルーチンを識別することができ、アンドゥユニットに含まれる動作の取り消しとやり直しをする。アンドゥユニットは、アンドゥ／リドゥ通知を受けるまで格納することができ、次いで、アンドゥユニットによって表される変更のアンドゥ／リドゥに用いることができる。【選択図】  図１
2005018774.tif 000002
【特許請求の範囲】
【請求項１】
ビジュアルユーザインターフェース設計ツールと、前記ビジュアルユーザインターフェース設計ツールにおいて作成されたユーザインターフェースオブジェクトの状態を保存することができるシリアル化エンジンとをサポートするコンピュータシステムにおいて、ユーザインターフェースオブジェクトの開発者がアンドゥ情報の生成および追跡に責任をもたなくてよいように、前記ビジュアルユーザインターフェース設計ツールにおいて前記ユーザインターフェースオブジェクトに対して行われた変更のためのアンドゥ情報を自動的に生成し追跡する方法であって、
前記ビジュアルユーザインターフェース設計ツールにおける前記ユーザインターフェースオブジェクトへの１つまたは複数の変更に応答して生成された、１つまたは複数の変更通知を受け取る動作と、
前記ユーザインターフェースオブジェクトの少なくとも一部分を、前記１つまたは複数の変更を表すのに適したシリアル化された形式にシリアル化するために、前記シリアル化エンジンを呼び出す動作と、
前記ユーザインターフェースオブジェクトへの前記１つまたは複数の変更の前記シリアル化された形式から、アンドゥユニットを作成する動作と、
前記アンドゥユニットをアンドゥスタックに追加する動作とを含むことを特徴とする方法。
【請求項２】
前記ユーザインターフェースオブジェクトは、前記ビジュアルユーザインターフェース設計ツールにおいて使用するための、サードパーティのユーザインターフェースオブジェクトを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記１つまたは複数の変更通知は、追加中通知および追加済み通知の少なくとも１つを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記アンドゥユニットは、前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更を取り消すための１つまたは複数のルーチンを識別することを特徴とする請求項１に記載の方法。
【請求項５】
前記アンドゥユニット中の前記１つまたは複数の変更を取り消すための通知を受け取る動作と、
前記アンドゥユニットを前記アンドゥスタックから除去する動作と、
前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更を取り消すための前記１つまたは複数のルーチンを呼び出す動作とをさらに含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記アンドゥユニットを、リドゥユニットとしてリドゥスタックに追加する動作をさらに含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記アンドゥユニットは、前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更をやり直すための１つまたは複数のルーチンを識別し、
前記リドゥユニット中の前記１つまたは複数の変更をやり直すための通知を受け取る動作と、
前記リドゥユニットを前記リドゥスタックから除去する動作と、
前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更をやり直すための前記１つまたは複数のルーチンを呼び出す動作とをさらに含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記アンドゥユニットは、前記ユーザインターフェースオブジェクトの名前、前記ユーザインターフェースオブジェクトのタイプ、および前記１つまたは複数の変更の前の前記ユーザインターフェースオブジェクトの１つまたは複数の事前状態を含むことを特徴とする請求項１に記載の方法。
【請求項９】
ビジュアルユーザインターフェース設計ツールと、前記ビジュアルユーザインターフェース設計ツールにおいて作成されたユーザインターフェースオブジェクトの状態を保存することができるシリアル化エンジンとをサポートするコンピュータシステムのためのコンピュータプログラムであり、ユーザインターフェースオブジェクトの開発者がアンドゥ情報の生成および追跡に責任をもたなくてよいように、前記ビジュアルユーザインターフェース設計ツールにおいて前記ユーザインターフェースオブジェクトに対して行われた変更のためのアンドゥ情報を自動的に生成し追跡する方法を前記コンピュータシステムに実行させるコンピュータプログラムであって、前記方法は、
アンドゥエンジンが、前記ビジュアルユーザインターフェース設計ツールにおける前記ユーザインターフェースオブジェクトへの１つまたは複数の変更に応答して生成された１つまたは複数の変更通知を受け取る動作と、
前記アンドゥエンジンが、前記ユーザインターフェースオブジェクトの少なくとも一部を、前記１つまたは複数の変更を表すのに適したシリアル化された形式にシリアル化するために、前記シリアル化エンジンを呼び出す動作と、
前記アンドゥエンジンが、前記ユーザインターフェースオブジェクトへの前記１つまたは複数の変更の前記シリアル化された形式から、アンドゥユニットを作成する動作とを含むことを特徴とするコンピュータプログラム。
【請求項１０】
前記１つまたは複数の変更通知の少なくとも１つは、前記ユーザインターフェースオブジェクトに対して行われる複数の変更に対するトランザクションを開始することを特徴とする請求項９に記載のコンピュータプログラム。
【請求項１１】
前記１つまたは複数の変更通知は、変更中通知および変更済み通知のうち少なくとも１つを含むことを特徴とする請求項９に記載のコンピュータプログラム。
【請求項１２】
前記ユーザインターフェースオブジェクトは、前記ダイアログにおいて行われたどの変更も受け入れるためのＯＫボタン、および前記ダイアログにおいて行われたどの変更も拒否するためのキャンセルボタンを有するダイアログを含むことを特徴とする請求項９に記載のコンピュータプログラム。
【請求項１３】
前記１つまたは複数の変更通知の少なくとも１つは、前記ダイアログに対して行われる変更のためのトランザクションを開始することを特徴とする請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記方法は、
前記キャンセルボタンが選択されたという通知を受け取る動作と、
前記トランザクションをキャンセルする動作とをさらに含むことを特徴とする請求項１３に記載のコンピュータプログラム。
【請求項１５】
前記方法は、
前記ＯＫボタンが選択されたという通知を受け取る動作と、
前記トランザクションを含む前記アンドゥユニットを、アンドゥなスタックに追加する動作とをさらに含むことを特徴とする請求項１３に記載のコンピュータプログラム。
【請求項１６】
前記アンドゥユニットは、前記ユーザインターフェースオブジェクトの名前、前記ユーザインターフェースオブジェクトのタイプ、および前記１つまたは複数の変更の後の前記ユーザインターフェースオブジェクトの１つまたは複数の事後状態を含むことを特徴とする請求項９に記載の方法。
【請求項１７】
前記ユーザインターフェースオブジェクトは、前記ユーザインターフェースオブジェクトの１つまたは複数のプロパティに対するアンドゥを実施しないことを特徴とする請求項９に記載のコンピュータプログラム。
【請求項１８】
ビジュアルユーザインターフェース設計ツールと、前記ビジュアルユーザインターフェース設計ツールにおいて作成されたユーザインターフェースオブジェクトの状態を保存することができるシリアル化エンジンとをサポートするコンピュータシステムにおいて、ユーザインターフェースオブジェクトの開発者がアンドゥ情報の生成および追跡に責任をもたなくてよいように、前記ビジュアルユーザインターフェース設計ツールにおいて前記ユーザインターフェースオブジェクトに対して行われた変更のためのアンドゥ情報を自動的に生成し追跡する方法であって、
アンドゥエンジンが、前記ビジュアルユーザインターフェース設計ツールにおける前記ユーザインターフェースオブジェクトへの１つまたは複数の変更についての１つまたは複数の変更通知を処理するステップと、
前記アンドゥエンジンが、前記１つまたは複数の変更の前の、前記ユーザインターフェースオブジェクトの初期状態を表す初期データを維持するステップと、
前記アンドゥエンジンが、前記１つまたは複数の変更の後の、前記ユーザインターフェースオブジェクトの事後状態を表す事後データを維持するステップと、
前記アンドゥエンジンが、前記ユーザインターフェースオブジェクトへの前記１つまたは複数の変更を取り消すためのアンドゥユニットを、前記初期データおよび事後データから準備するステップとを含むことを特徴とする方法。
【請求項１９】
前記１つまたは複数の変更通知は、除去中通知および除去済み通知のうち少なくとも１つを含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記アンドゥユニットは、前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更を取り消すための、１つまたは複数のルーチンを識別することを特徴とする請求項１８に記載の方法。
【請求項２１】
前記アンドゥユニットを格納するステップと、
前記アンドゥユニット中の前記１つまたは複数の変更を取り消すための通知を聞くステップと、
前記アンドゥユニットおよび前記１つまたは複数のアンドゥルーチンを用いて、前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更を取り消すステップと、
前記アンドゥユニットを削除するステップとをさらに含むことを特徴とする請求項２０に記載の方法。
【請求項２２】
前記アンドゥユニットを、リドゥユニットとして格納するステップをさらに含むことを特徴とする請求項２１に記載の方法。
【請求項２３】
前記リドゥユニットは、前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更をやり直すための１つまたは複数のルーチンを含み、
前記リドゥユニット中の前記１つまたは複数の変更をやり直すための通知を聞くステップと、
前記リドゥユニットおよび前記１つまたは複数のリドゥルーチンを用いて、前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更をやり直すステップと、
前記リドゥユニットを削除するステップとをさらに含むことを特徴とする請求項２２に記載の方法。
【請求項２４】
前記ユーザインターフェースオブジェクトは、リドゥを実施しないことを特徴とする請求項２３に記載の方法。
【請求項２５】
前記アンドゥエンジンが初期データを維持し、事後データを維持する前記ステップは、前記ユーザインターフェースオブジェクトの少なくとも一部を、前記１つまたは複数の変更を表すのに適したシリアル化された形式にシリアル化するために、前記シリアル化エンジンを呼び出す動作を含むことを特徴とする請求項２３に記載の方法。
【請求項２６】
ビジュアルユーザインターフェース設計ツールと、前記ビジュアルユーザインターフェース設計ツールにおいて作成されたユーザインターフェースオブジェクトの状態を保存することができるシリアル化エンジンとをサポートするコンピュータシステムのためのコンピュータプログラムであり、ユーザインターフェースオブジェクトの開発者がアンドゥ情報の生成および追跡に責任をもたなくてよいように、前記ビジュアルユーザインターフェース設計ツールにおいて前記ユーザインターフェースオブジェクトに対して行われた変更のためのアンドゥ情報を自動的に生成し追跡する方法を前記コンピュータシステムに実行させるコンピュータプログラムであって、前記方法は、
前記ビジュアルユーザインターフェース設計ツールにおける前記ユーザインターフェースオブジェクトへの１つまたは複数の変更についての１つまたは複数の変更通知を処理するステップと、
前記１つまたは複数の変更の前の、前記ユーザインターフェースオブジェクトの初期状態を表す初期データを維持するステップと、
前記１つまたは複数の変更の後の、前記ユーザインターフェースオブジェクトの事後状態を表す事後データを維持するステップと、
前記ユーザインターフェースオブジェクトへの前記１つまたは複数の変更を取り消すためのアンドゥユニットを、前記初期データおよび事後データから準備するステップとを含むことを特徴とするコンピュータプログラム。
【請求項２７】
前記アンドゥユニットは、前記ユーザインターフェースオブジェクトに対して行われた複数の変更のためのトランザクションを含むことを特徴とする請求項２６に記載のコンピュータプログラム。
【請求項２８】
前記１つまたは複数の変更通知は、名前変更通知を含むことを特徴とする請求項２６に記載のコンピュータプログラム。
【請求項２９】
前記ユーザインターフェースオブジェクトは、前記ダイアログにおいて行われたどの変更も受け入れるためのＯＫボタン、および前記ダイアログにおいて行われたどの変更も拒否するためのキャンセルボタンを有するダイアログを含むことを特徴とする請求項２６に記載のコンピュータプログラム。
【請求項３０】
前記１つまたは複数の変更通知の少なくとも１つは、前記ダイアログに対して行われる変更のためのトランザクションを開始することを特徴とする請求項２９に記載のコンピュータプログラム。
【請求項３１】
前記方法は、
前記キャンセルボタンが選択されたという通知を受け取る動作と、
前記トランザクションをキャンセルする動作とをさらに含むことを特徴とする請求項３０に記載のコンピュータプログラム。
【請求項３２】
前記方法は、
前記ＯＫボタンが選択されたという通知を受け取る動作と、
前記トランザクションを含む前記アンドゥユニットを、アンドゥなスタックに追加する動作とをさらに含むことを特徴とする請求項３０に記載のコンピュータプログラム。
【請求項３３】
前記ユーザインターフェースオブジェクトは、前記ビジュアルユーザインターフェース設計ツールにおいて使用するための、サードパーティのユーザインターフェースオブジェクトであることを特徴とする請求項２６に記載のコンピュータプログラム。
【請求項３４】
前記アンドゥユニットは、前記ユーザインターフェースオブジェクトの名前、前記ユーザインターフェースオブジェクトのタイプ、前記１つまたは複数の変更の前の、前記ユーザインターフェースオブジェクトの１つまたは複数の事前状態、および前記１つまたは複数の変更の後の、前記ユーザインターフェースオブジェクトの１つまたは複数の事後状態を含むことを特徴とする請求項２６に記載のコンピュータプログラム。
【請求項３５】
ユーザインターフェースオブジェクトの開発者がアンドゥ情報を生成し追跡しなくてよいように、ビジュアルユーザインターフェース設計ツールにおいて前記ユーザインターフェースオブジェクトに対して行われた変更のためのアンドゥ情報を自動的に生成し追跡するアンドゥエンジンをコンピュータに実現させるコンピュータプログラムであって、前記コンピュータプログラムは、
前記ビジュアルユーザインターフェース設計ツールにおける前記ユーザインターフェースオブジェクトに対して行われた変更に応答して自動的に生成される変更通知を取り込む１つまたは複数のルーチンと、
前記ユーザインターフェースオブジェクトへの１つまたは複数の変更を表すのに使われる、ユーザインターフェースオブジェクトの状態データを要求する１つまたは複数のルーチンと、
前記ユーザインターフェースオブジェクトに対応する前記状態データから、アンドゥユニットを準備する１つまたは複数のルーチンと、
前記アンドゥユニットの格納を要求する１つまたは複数のルーチンとを含むことを特徴とするコンピュータプログラム。
【請求項３６】
前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更を取り消すための、１つまたは複数のルーチンをさらに含むことを特徴とする請求項３５に記載のコンピュータプログラム。
【請求項３７】
前記ユーザインターフェースオブジェクトに対して行われた前記１つまたは複数の変更をやり直すための、１つまたは複数のルーチンをさらに含むことを特徴とする請求項３５に記載のコンピュータプログラム。
【請求項３８】
前記アンドゥユニットを格納する１つまたは複数のルーチンをさらに含むことを特徴とする請求項３５に記載のコンピュータプログラム。
【請求項３９】
前記ユーザインターフェースオブジェクトの前記状態データを生成する１つまたは複数のルーチンをさらに含むことを特徴とする請求項３５に記載のコンピュータプログラム。
【請求項４０】
前記ユーザインターフェースオブジェクトの状態データを要求する前記１つまたは複数のルーチンは、異なる複数の状態データ実装形態と相互作用することができることを特徴とする請求項３５に記載のコンピュータプログラム。
【請求項４１】
前記アンドゥユニットの格納を要求する前記１つまたは複数のルーチンは、異なる複数の格納実装形態と相互作用することができることを特徴とする請求項３５に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アンドゥ（ｕｎｄｏ）インフラストラクチャに関する。より詳細には、本発明は、ユーザインターフェースオブジェクトの開発者が、アンドゥ情報の生成および追跡に責任をもたなくてよいように、アンドゥ情報を自動的に生成し追跡する方法、システム、およびコンピュータプログラム製品に関する。
【背景技術】
【０００２】
アンドゥは、多くのアプリケーションの、よく知られている機能である。たとえば、一般に、表計算およびワードプロセッサでは、新しいデータの追加などのデータ入力、既存データの削除、カットアンドペースト操作、およびデータのフォーマット化を取り消すことが可能である。リドゥ（ｒｅｄｏ）は、アンドゥに相対するものであり、多くの状況において、アンドゥ動作を取り消すことに概念的に等しい。いくつかの実装において、リドゥは、最後の動作が繰り返されることを可能にする。この適用範囲では、アンドゥは、アンドゥ動作およびリドゥ動作両方を包含する総称的な用語として用いることができる。
【０００３】
ビジュアルユーザインターフェース設計ツール（ｖｉｓｕａｌ  ｕｓｅｒ  ｉｎｔｅｒｆａｃｅ  ｄｅｓｉｇｎｅｒ）は、開発者が、ユーザインターフェースを視覚的に表し、視覚表現から、対応するソースコードの少なくともいくつかを自動的に生成することを可能にするソフトウェアである。ビジュアルユーザインターフェース設計ツールにおいてアンドゥを実装すると、いくつかの独自の障害が生じる。たとえば、ビジュアルユーザインターフェース設計ツールでは、多くの異なるタイプのオブジェクトを使用することができるので、アンドゥの実装は一般に、各オブジェクトの開発者の責任である。多くのアンドゥの実装形態は、同じように動作し、アンドゥ可能な作業の一単位を表すのに「アンドゥユニット」を用いる。アンドゥユニットは、作成されるとスタックに追加され、ユーザは、スタックの中を移動して、対応するアンドゥユニットによって表される動作を取り消すことができる。
【０００４】
しばしば、アンドゥユニットは、トグルとして設計される。つまり、アンドゥを２度呼び出すと、１度目の呼出しの前の最初の状態に戻る。アンドゥの複雑さのため、アプリケーションは一般に、一から完全にアンドゥをサポートするように書く必要がある。たとえば、コントロールのテキストプロパティを、テーブルＩに示す擬似コードで示すように設定する場合を検討する。
【０００５】
テーブルＩ
【０００６】
【表１】
2005018774.tif 000003
【０００７】
この動作をアンドゥ可能にするために、動作は、テーブルＩＩに示す擬似コードで示すオブジェクトなどのオブジェクト中にカプセル化される。
【０００８】
テーブルＩＩ
【０００９】
【表２】
2005018774.tif 000004
【００１０】
従来、開発者は次いで、テーブルＩＩＩに示す擬似コードで示すように、このクラスを使用する。
【００１１】
テーブルＩＩＩ
【００１２】
【表３】
2005018774.tif 000005
【００１３】
テーブルＩＩおよびＩＩＩに示す実装が働く間、開発者は、容易に中断を行うことができる。ＴｅｘｔＰｒｏｐＵｎｄｏＡｃｔｉｏｎは脆弱であり、このオブジェクトが動作を正しく取り消そうとしている場合、コントロールの状態は一貫していなければならないことに留意されたい。たとえば、コントロールテキストプロパティを直接（すなわち、テーブルＩＩＩではなく、テーブルＩに示すように単純に）変更したコードの一部がどこかにある場合、ＴｅｘｔＰｒｏｐＵｎｄｏＡｃｔｉｏｎは中断する。これは実際、おそらく経験の浅いプログラマが、ある特定の変更がどのようにアンドゥに影響を与えるか考慮しなかったとき、実に頻繁に起こる。問題をさらに複雑にすることに、アンドゥ動作が何らかの理由で失敗すると、各クラスに正しい失敗セマンティクスを実装することが困難な作業になり得る。従来のアンドゥの実装形態は、たとえば、テーブルＩＩに示すアンドゥを実装していないサードパーティのオブジェクトのためのアンドゥのサポートを提供することもできない。
【発明の開示】
【発明が解決しようとする課題】
【００１４】
したがって、ユーザインターフェースオブジェクトの開発者が、アンドゥ情報の生成および追跡に責任をもたなくてよいように、アンドゥ情報を自動的に生成し追跡する方法、システム、およびコンピュータプログラム製品が望まれる。
【課題を解決するための手段】
【００１５】
本発明は、ユーザインターフェースオブジェクトの開発者が、アンドゥ情報の生成および追跡に責任をもたなくてよいように、アンドゥ情報を自動的に生成し追跡する方法、システム、およびコンピュータプログラム製品に関する。本発明の実装形態例によると、ビジュアルユーザインターフェース設計ツールにおける、ユーザインターフェースオブジェクトへの１つまたは複数の変更に対する１つまたは複数の変更通知は処理される。たとえば、変更通知は、追加中または追加済み通知、除去中または除去済み通知、変更中または変更済み通知、名称変更通知などを含むことができる。１つまたは複数の変更の前のユーザインターフェースオブジェクトの初期状態を表すデータ、および１つまたは複数の変更の後のユーザインターフェースオブジェクトの事後状態を表すデータの両方は、維持される。維持されたデータからアンドゥユニットが準備され、ユーザインターフェースオブジェクトへの１つまたは複数の変更を取り消す。対照的に、従来のアンドゥの実装の場合、開発者は、アンドゥユニットを手作業で作成し、オブジェクトに対して行われ得るすべての変更のために、アンドゥユニットを忘れずに作成し格納しなければならない。
【００１６】
アンドゥユニットは、ユーザインターフェースオブジェクトに対して行われた複数の変更に対するトランザクションを含むことができる。各アンドゥユニットは、対応するルーチンを識別し、アンドゥユニットに含まれる動作を取り消し（ｕｎｄｏｉｎｇ）、やり直す（ｒｅｄｏｉｎｇ）ことができる。アンドゥユニットは、アンドゥ通知またはリドゥ通知を受けるまで、たとえばスタックに格納することができ、次いで、アンドゥユニットによって表される変更を取り消しまたはやり直すのに用いることができる。アンドゥユニットは、使われた後は、たとえばスタックから除去することによって削除される。削除されたアンドゥユニットは、リドゥユニットとして格納することができ、除去されたリドゥユニットは、アンドゥユニットとして格納することができる。
【００１７】
本発明の追加の特徴および利点を、以下の説明で述べるが、その一部は、以下の説明から明らかになり、または本発明の実施によって理解できよう。本発明の特徴および利点は、添付の特許請求の範囲において具体的に指摘される機器および組合せによって実現し達成することができる。本発明のこうしたおよび他の特徴は、以下の説明および添付の特許請求の範囲からより完全に明らかになり、または以下に述べる本発明の実施によって理解できよう。
【００１８】
本発明の、上述したこと、および他の利点と特徴を達成することができる方法を説明するために、上で簡潔に述べた本発明のより具体的な説明を、添付の図面に示す本発明の具体的な実施形態を参照して行う。こうした図面は本発明の典型的な実施形態を示すに過ぎず、したがって、本発明の範囲を限定するものとみなすべきではないことを理解した上で、本発明を、添付の図面を用いてさらに具体的かつ詳細に説明する。
【発明を実施するための最良の形態】
【００１９】
本発明は、ユーザインターフェースオブジェクトの開発者が、アンドゥ情報の生成および追跡に責任をもたなくてよいように、アンドゥ情報を自動的に生成し追跡する方法、システム、および対応するコンピュータプログラム製品に及ぶ。本発明の実施形態は、以下で詳細に説明するように、様々なコンピュータハードウェアを含む１つもしくは複数の専用コンピュータおよび／または１つもしくは複数の汎用コンピュータを含むことができる。
【００２０】
図１は、本発明の例示的な実施形態を示す。開発者が、開発者のオブジェクト用のアンドゥ情報を生成し追跡することが必要な従来のアンドゥの実装形態とは異なり、アンドゥエンジン１４０が、ビジュアルユーザインターフェース設計ツールの設計面１１０において起こる状態変更用のアンドゥユニットを組み立てる。したがって、設計面１１０を使用する開発者は、アンドゥ情報の生成および追跡に責任をもたなくてよい。
【００２１】
アンドゥエンジン１４０は、設計面１１０において実行中のオブジェクトの以下の特性を利用する。第１に、対象オブジェクトは、設計ツールのシリアライザ（ｓｅｒｉａｌｉｚｅｒ）によって、何らかの形式に維持することができる。言い換えると、設計面１１０の設計ツールローダ（ｌｏａｄｅｒ）は、オブジェクトを読み出し、それをディスクに書き込むので、オブジェクトを何らかの形式に維持することができる。第２に、設計面１１０にあるオブジェクトは、プロパティが変更されると、プロパティ変更通知を起こす。（たとえば、以下の設計ツールホストの説明を参照されたい。）第３に、トランザクションは、より細かい複数の動作およびそれに関連するプロパティ変更通知に及ぶアンドゥユニットを組み立てるのに用いることができる。こうした特性を用いて、アンドゥエンジン１４０は、必要とするどのアンドゥユニットも自動的に組み立てることができる。
【００２２】
アンドゥエンジン１４０は、変更通知１２４を聞いて、アンドゥユニットを作成する。図１に示す一例である実装形態の場合、設計面１１０においてオブジェクトに変更が加えられるとアンドゥエンジン１４０に対して通知を行う変更通知サービスによって、変更通知が生成される。アンドゥユニット自体、たとえばアンドゥユニット１５０は、シリアル化エンジン（ｓｅｒｉａｌｉｚａｔｉｏｎ  ｅｎｇｉｎｅ）１３０によって作成された、シリアル化されたオブジェクト状態を含む。シリアル化エンジン１３０は、構成要素に変更が加えられる前と後の両方のプロパティの値およびオブジェクトの値を保存するのに用いられる、シリアル化サービス全体の一部である。設計ツールホストは、トランザクションを追跡するのに用いられる。（たとえば、設計面１１０にあるオブジェクトは、開発されている間は必ずしも活動中のオブジェクトでなくてよいので、設計ツールホストがオブジェクトを取り囲んで、オブジェクトを対象としたユーザ入力を受け取り処理する。）その結果、コードはアンドゥエンジンと相互作用しなくてよく、したがって、コントロールのテキストプロパティに対するアンドゥ可能な変更を作成するための開発者コードは、テーブルＩに示す擬似コードと同一である、テーブルＩＶに示す擬似ケースで示すことができる。
【００２３】
テーブルＩＶ
【００２４】
【表４】
2005018774.tif 000006
【００２５】
アンドゥエンジン１４０は、他のすべてのものを処理する。
【００２６】
より複雑な相互作用も、同様に実施することができる。たとえば、コントロールをセンタリングするためのアルゴリズムを検討する。コントロールを配置するためにＸおよびＹ位置を計算した後、レイアウトアルゴリズムは、テーブルＶに示す擬似コードで示すように、両方のプロパティ設定をただ１度のアンドゥ動作において組み合わせることができる。
【００２７】
テーブルＶ
【００２８】
【表５】
2005018774.tif 000007
【００２９】
センタリング処理全体は、以下のように進む。コントロールをセンタリングする選択肢が設計面１１０において選択されると、トランザクション開始通知１２２がトランザクションを開始させ、オブジェクトの状態が間もなく変更されることを示す変更中通知１２４が受け取られる。トランザクション１２２に応答して、アンドゥエンジン１４０が、アンドゥユニット１５０を作成し、変更中通知１２４に応答して、シリアル化エンジン１３０を用いてオブジェクトの変更されていない状態のシリアル化１３２を行う。アンドゥエンジン１４０は、シリアル化されたオブジェクトの状態を、アンドゥユニット１５０に格納する（たとえば、アンドゥユニット１５２および１５４中のｏｌｄＸおよびｏｌｄＹ）。アルゴリズムが終了すると、変更済通知１２４が、オブジェクトの状態が変化したことを示し、トランザクション終了通知１２２が、トランザクションの終了を示す。変更済通知１２４に応答して、アンドゥエンジン１４０は、シリアル化エンジン１３０を用いて、オブジェクトの変更された状態のシリアル化１３２を行い、シリアル化されたオブジェクトの状態をアンドゥユニット１５０に格納する（たとえば、アンドゥユニット１５２および１５４中のＸおよびＹ）。トランザクション終了通知１２２に応答して、アンドゥエンジン１４０は、アンドゥユニット１５０をアンドゥスタック１６０に格納する。
【００３０】
アンドゥエンジン１４０は、アンドゥユニット１５０を、アンドゥ状態とリドゥ状態の間のトグルとして扱う。アンドゥを選択すると、センタリングアルゴリズムを選択する前のオブジェクトの位置にオブジェクトが復元され、アンドゥユニットがアンドゥスタック１６０から削除される。アンドゥユニット１５０は、センタリング動作をやり直すのに十分な情報を含むので、リドゥスタックの上に置くことができる。リドゥを選択すると、センタリング操作が再度実施され、アンドゥユニット（リドゥスタックの上にあったので、現時点ではリドゥユニットである）がリドゥスタックから削除される。
【００３１】
シリアル化エンジン１３０は、２つのタイプのシリアル化を実施することができる。追加動作および除去動作の場合、シリアル化エンジン１３０は、予想通りに新しい構成要素を作成する。しかし、プロパティ変更の場合、シリアル化エンジン１３０は、変更を表すのに必要な変更を単にシリアル化する。可能な場合は新しい構成要素の作成を避けることによって、構成要素の完全な作成によるオーバーヘッドを排除して、アンドゥエンジンの性能を向上させることができる。
【００３２】
アンドゥエンジン１４０の一例である実装形態のための様々なクラスおよび方法の擬似コードの記述を、テーブルＶＩおよびＶＩＩに示す。テーブルＶＩに示すアンドゥエンジンクラスは抽象クラスであり、その結果、アンドゥスタックなどのアンドゥの格納の実装、シリアル化エンジンの実装、およびビジュアルユーザインターフェース設計ツールなどのユーザインターフェースと結びつけることができる。
【００３３】
テーブルＶＩ
【００３４】
【表６】
2005018774.tif 000008
【００３５】
アンドゥエンジンクラスの例である方法およびプロパティを、テーブルＶＩＩに示す擬似コードで示す。
【００３６】
テーブルＶＩＩ
【００３７】
【表７−１】
2005018774.tif 000009
【００３８】
【表７−２】
2005018774.tif 000010
【００３９】
テーブルＶＩＩＩに示すＵｎｄｏＵｎｉｔクラスは、ＵｎｄｏＥｎｇｉｎｅの中にある入れ子式のクラスであり、アンドゥ可能な動作をカプセル化する。デフォルトのＵｎｄｏＵｎｉｔの実装では、変更通知を聞き、各変更にイベントの一覧を構築する。この実装では、こうしたイベントを、上述したシリアル化エンジン１３０およびシリアル化サービスを用いて保存する。ＵｎｄｏＵｎｉｔは、変更についてのイベント通知を、いくつかの周知である仮想的な方法によってアンドゥエンジンから直接受け取る。こうした方法を公開することによって、開発者は、ＵｎｄｏＵｎｉｔから派生を行うことができ、必要とするどの追加論理も実施することができる。そうすることが望まれる場合、開発者は、ＵｎｄｏＵｎｉｔの実装を完全に回避することができる。
【００４０】
テーブルＶＩＩＩ
【００４１】
【表８−１】
2005018774.tif 000011
【００４２】
【表８−２】
2005018774.tif 000012
【００４３】
ＵｎｄｏＵｎｉｔクラスのための例である方法およびプロパティを、テーブルＩＸに示す擬似コードで示す。
【００４４】
テーブルＩＸ
【００４５】
【表９−１】
2005018774.tif 000013
【００４６】
【表９−２】
2005018774.tif 000014
【００４７】
【表９−３】
2005018774.tif 000015
【００４８】
図２Ａおよび２Ｂは、設計面２１０における、一例であるユーザインターフェースオブジェクト２１２に対するサイズ変更操作の一例であるトランザクション、およびそれに対応するアンドゥユニット２５０をそれぞれ示す。ユーザインターフェースオブジェクト２１２の左上の角においてマウスダウンイベントが起こると、トランザクション開始通知が設計面２１０からアンドゥエンジンに送られ、続いて変更中通知が送られる。トランザクション開始通知は、アンドゥエンジンに、一連の変更を単一のアンドゥユニットに取り込むべきであることを知らせる。変更通知は、アンドゥエンジンに、オブジェクト２１２が間もなく変更されるので、オブジェクトの現在のプロパティを維持するよう知らせる。
【００４９】
最初に、ユーザインターフェースオブジェクト２１２は、アンドゥユニット２５０の変更前の部分２７０において場所２７２（３０、３０）およびサイズ２７４（４０、４０）として反映される位置２１４に位置する。設計面２１０において、ユーザインターフェースオブジェクト２１２の左上の角が、位置２１６をすぎて位置２１８に動かされる。マウスアップイベントが起こると、変更済通知、続いてトランザクション終了通知がアンドゥエンジンに送られる。変更済通知は、アンドゥエンジンに、オブジェクト２１２の変更済みプロパティを維持するよう知らせ、トランザクション終了通知は、トランザクションをクローズする。オブジェクト２１２の左上の角を動かすと、オブジェクトの位置およびサイズの両方が変わることに留意されたい。したがって、場所２８２（１０、１０）およびサイズ２８４（６０、６０）が、変更ユニット２５０の変更後の部分２８０に格納される。場所（３０、３０）から場所（１０、１０）への移動、およびサイズ（４０、４０）からサイズ（６０、６０）へのサイズ変更の両方をグループ化することによって、アンドゥおよびリドゥは、両方の動作を同時に実施する。これは、開発者の視点からは一度の動作しか実施されないので、開発者が最も期待することである。
【００５０】
アンドゥユニット２５０は、付加情報も含み、これには、オブジェクト名２５１、オブジェクトタイプ２５２、および他の情報２５３が含まれる。この付加情報は、変更ユニットに対応するオブジェクトの識別に有用である。たとえば、動作が実施されるオブジェクトが設計面から削除され、次いで、アンドゥによって再度追加されると、付加情報は、アンドゥ動作またはリドゥ動作を適切なオブジェクトに向ける。オブジェクトが追加される場合を検討すると、そのテキストプロパティが修正されて２つの別個のアンドゥ動作が生成され、次いで、両方の動作が取り消される。最初のリドゥによってオブジェクトが再度作成された後でテキストプロパティの変更をやり直すためには、アンドゥユニットは、元のオブジェクトが削除動作によって破棄されていたとしても、適切なオブジェクトを突き止めることができなければならない。
【００５１】
図３Ａおよび３Ｂは、設計面３１０における、サードパーティのダイアログユーザインターフェースオブジェクト３１２の一例であるトランザクション、およびそれに対応するアンドゥユニット３５０をそれぞれ示す。ダイアログユーザインターフェースオブジェクト３１２は、年齢フィールド３１３、性別フィールド３１５、ＯＫボタン３１７、およびキャンセルボタン３１９を含む。性別フィールド３１５を選択すると、トランザクション開始通知が設計面３１０からアンドゥエンジンに送られ、続いて変更中通知が送られる。図２Ａ〜２Ｂに示すように、トランザクション開始通知は、一連の変更を単一のアンドゥユニットに取り込むべきであることをアンドゥエンジンに知らせる。変更通知は、オブジェクト３１２の現在のプロパティが間もなく変更されるので、現在のプロパティを維持するよう、アンドゥエンジンに知らせる。
【００５２】
最初に、性別フィールド３１５が「Ｍ」を含み、これは、アンドゥユニット３５０の変更前の部分３７０に「Ｍ」を含む性別フィールド３７２として反映される。ダイアログユーザインターフェースオブジェクト３１２の性別フィールド３１５からフォーカスが離れると、オブジェクト３１２の変更された性別プロパティを維持するよう、アンドゥエンジンに知らせるために変更済通知が送られる。変更された性別プロパティは、アンドゥユニット３５０の変更後の部分３８０に「Ｆ」を含む性別フィールド３８２として反映される。年齢フィールド３１３を選択すると、年齢プロパティが間もなく変更されるので、このプロパティを維持するようアンドゥエンジンに知らせるための変更中通知が、設計面３１０からアンドゥエンジンに送られる。最初に年齢フィールド３７４は「３０」を含み、これは、アンドゥユニット３５０の変更前の部分３７０に「３０」を含む年齢フィールド３７４として反映される。年齢フィールド３１３からフォーカスが離れると、オブジェクト３１２の変更された年齢プロパティを維持するようアンドゥエンジンに知らせるために変更済通知が送られる。変更された年齢プロパティは、アンドゥユニット３５０の変更後の部分に「−５」を含む年齢フィールド３８４として反映される。
【００５３】
フィールドの妥当性検査は一般に、フィールドが最初に新しい値を受け取ることを必要とするので、「−５」がアンドゥユニット３５０に格納される。ただし、フィールド妥当性検査は、ＯＫボタンを選択することができる前、および／または年齢フィールドからフォーカスが離れることができる前に年齢フィールドが訂正されることを必要とする可能性がある。したがって、別の変更中通知をアンドゥエンジンに送ることができ、アンドゥエンジンは、変更ユニット３５０の変更前の部分３７０の年齢フィールド３７６に「３０」を記録する。（妥当性検査コードは、妥当性検査処理の一部として、値を「３０」に変更している場合がある。）年齢フィールド３１３を正当な値である「５」に変更すると、アンドゥエンジンに、新しい値を維持するよう知らせるための変更済通知が生成され、新しい値は、アンドゥユニット３５０の変更後の部分において値「５」を有する年齢フィールド３８６として反映される。図２Ｂと同様、アンドゥユニット３５０は付加情報も含み、付加情報には、オブジェクト名３５１、オブジェクトタイプ３５２、および他の情報３５３が含まれることに留意されたい。
【００５４】
ダイアログユーザインターフェースオブジェクト３１２がＯＫボタン３１７およびキャンセルボタン３１９両方を含むので、オープントランザクションは、完了することができない。キャンセルボタン３１９が選択されると、オープントランザクションは単にロールバックし、ロールバックの後に取り消すものがないのでアンドゥユニット３５０は格納されない。ＯＫボタン３１７が選択されると、トランザクション終了がアンドゥエンジンに送られて、トランザクションをクローズし、アンドゥユニット３５０が格納され、その結果、ダイアログユーザインターフェースオブジェクト３１２における変更のアンドゥ／リドゥが可能になる。ダイアログがクローズされると、すべての変更が全体として単一のトランザクションとして扱われる。というのは、ほとんどのユーザが、ダイアログへの変更をただ１度の動作と考えるからである。当然ながら、ダイアログがオープンしている間、個々の変更は、別個のアンドゥユニットとして格納することができ、そうすることによって、一変更ずつ取り消し、またはやり直しをすることができる。ユーザインターフェースオブジェクトの複雑さに応じて、トランザクションは、適切に入れ子式にすることができる場合がある。この高度なアンドゥ機能は、オブジェクトの開発者がアンドゥ機能およびリドゥ機能を実装する必要なく、サードパーティのダイアログユーザインターフェースオブジェクト３１２に対して利用可能であることに留意されたい。
【００５５】
本発明は、機能ステップおよび／または非機能的動作を含む方法に従って説明することもできる。以下は、本発明の実施において行うことができる動作およびステップの説明である。一般に、機能ステップは、達成される結果によって本発明を説明し、非機能的動作は、ある特定の結果を得るためのより具体的な動作を説明する。機能ステップおよび非機能的動作は、ある特定の順序で説明することも主張することもできるが、本発明は、動作および／またはステップのどの特定の順序にも組合せにも必ずしも限定されない。
【００５６】
図４Ａ〜４Ｃは、本発明による、アンドゥ情報を生成し追跡する方法の例である動作およびステップを示す。ビジュアルユーザインターフェース設計ツールにおける、ユーザインターフェースオブジェクトに対する１つまたは複数の変更についての１つまたは複数の変更通知を処理するステップ（４１４）は、ユーザインターフェースオブジェクトに対する１つまたは複数の変更に応答して生成される、１つまたは複数の変更通知を受け取る動作（４１２）を含むことができる。１つまたは複数の変更の前のユーザインターフェースオブジェクトの初期状態を表す初期データ、および１つまたは複数の変更の後のユーザインターフェースオブジェクトの事後状態を表す事後データを維持するステップ（４１８）は、１つまたは複数の変更を表すのに適したシリアル化された形式に、ユーザインターフェースオブジェクトの少なくとも一部をシリアル化するためのシリアル化エンジンを呼び出す動作（４１６）を含むことができる。
【００５７】
ユーザインターフェースオブジェクトに対する１つまたは複数の変更を取り消すためのアンドゥユニットを、初期データおよび事後データから準備するステップ（４２４）は、ユーザインターフェースオブジェクトに対する１つまたは複数の変更をシリアル化した形から、アンドゥユニットを作成する動作（４２２）を含むことができる。動作がダイアログに対して実施される場合、本方法は、キャンセルボタンが選択された（判断ブロック４３２のキャンセル分岐４３４）という通知を受け取る動作（４３６）、およびトランザクションをキャンセルする動作（４３８）を含むことができる。本方法は、ＯＫボタンが選択された（判断ブロック４３２のＯＫ分岐４４２）という通知を受け取る動作（４４４）も含むことができる。
【００５８】
アンドゥユニット（ダイアログ、またはダイアログ以外のユーザインターフェースオブジェクトについて選択されたＯＫボタン）を格納するステップ（４５４）は、アンドゥユニットをアンドゥスタックに追加する動作（４５２）を含むことができる。アンドゥユニットにおける１つまたは複数の変更を取り消すための通知を聞くステップ（４５８）は、１つまたは複数の変更を取り消すための通知を受け取る動作（４５６）を含むことができる。アンドゥユニットを削除するステップ（４６４）は、アンドゥユニットをアンドゥスタックから除去する動作（４６２）を含むことができる。アンドゥユニットおよび１つまたは複数のアンドゥルーチンを使用して、ユーザインターフェースオブジェクトに対して行われた１つまたは複数の変更を取り消すステップ（４６８）は、１つまたは複数の変更を取り消す１つまたは複数のルーチンを呼び出す動作（４６６）を含むことができる。
【００５９】
アンドゥユニットをリドゥユニットとして格納するステップ（４７４）は、アンドゥユニットを、リドゥユニットとしてリドゥスタックに追加する動作（４７２）を含むことができる。リドゥユニット中の１つまたは複数の変更をやり直すための通知を聞くステップ（４７８）は、リドゥユニット中の１つまたは複数の変更をやり直すための通知を受け取る動作（４７６）を含むことができる。リドゥユニットを削除する動作（４８４）は、リドゥスタックからリドゥユニットを除去する動作（４８２）を含むことができる。リドゥユニットおよび１つまたは複数のリドゥルーチンを使用して、ユーザインターフェースオブジェクトに対して行われた１つまたは複数の変更をやり直すステップ（４８８）は、ユーザインターフェースオブジェクトに対して行われた１つまたは複数の変更をやり直す１つまたは複数のルーチンを呼び出す動作（４８６）を含むことができる。
【００６０】
本発明の範囲内の実施形態は、コンピュータ実行可能な命令を運びまたはそれを有するコンピュータ読み取り可能な媒体、あるいはそこに格納されたデータ構造も含む。このようなコンピュータ読み取り可能な媒体は、汎用コンピュータまたは専用コンピュータによってアクセスすることができる、利用可能などの媒体でもよい。限定ではなく例示のために、このようなコンピュータ読み取り可能な媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、もしくは他の光ディスク記憶装置、磁気ディスク記憶装置、または他の磁気記憶装置、あるいは所望のプログラムコード手段をコンピュータ実行可能な命令またはデータ構造の形で運びまたは格納するのに用いることができるとともに、汎用コンピュータまたは専用コンピュータによってアクセスすることができる、他のどの媒体も含むことができる。ネットワークあるいは別の通信接続（有線、無線、または有線もしくは無線の組合せのいずれか）を介して情報がコンピュータに転送されまたは提供されると、コンピュータは、その接続をコンピュータ読み取り可能な媒体として正しく認識する。したがって、このようなどの接続も、コンピュータ読み取り可能な媒体と呼ばれるのが適切である。上記の組合せも、コンピュータ読み取り可能な媒体の範囲に含めるべきである。コンピュータ実行可能な命令は、たとえば、汎用コンピュータ、専用コンピュータ、または専用処理装置に、ある特定の機能または一群の機能を実施させる命令およびデータを含む。
【００６１】
図５および以下の説明では、本発明を実装することができる適切なコンピューティング環境の、簡潔で一般的な説明を提供することを意図している。そうすることが必要なわけではないが、ネットワーク環境におけるコンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能な命令という一般的な状況において、本発明を説明する。全般的には、プログラムモジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含み、それらは特定のタスクを実施しまたは特定の抽象データタイプを実装する。コンピュータ実行可能な命令、関連データ構造、およびプログラムモジュールは、本明細書で開示した方法のステップを実行するプログラムコード手段の例を表す。このような、具体的な一連の実行可能な命令または関連するデータ構造は、このようなステップにおいて説明した機能の実装に対応する動作の例を表す。
【００６２】
本発明は、多くのタイプのコンピュータシステム構成を有するネットワークコンピューティング環境において実施できることが、当業者には理解されよう。こうしたコンピュータシステム構成には、パーソナルコンピュータ、可搬型装置、マルチプロセッサシステム、マイクロプロセッサベースの家電製品またはプログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどがある。本発明は、分散型コンピューティング環境においても実施することができ、通信ネットワークを介して（有線リンク、無線リンク、または有線リンクもしくは無線リンクに組合せのいずれかによって）リンクされる、ローカルおよびリモート処理装置によって特定のタスクが実施される。分散型コンピューティング環境では、プログラムモジュールは、ローカルおよびリモートメモリ記憶装置両方に置くことができる。
【００６３】
図５を参照すると、本発明を実装する例示的なシステムは、汎用計算装置を、従来のコンピュータ５２０の形で含み、このコンピュータは、処理装置５２１、システムメモリ５２２、およびシステムバス５２３を含む。システムバス５２３は、システムメモリ５２２を含む様々なシステム構成要素を処理装置５２１に結合する。システムバス５２３は、様々なバスアーキテクチャのどれをも使用するメモリバスまたはメモリコントローラ、周辺機器バス、およびローカルバスなどを含む、いくつかのタイプのバス構造のいずれでもよい。システムメモリは、読出し専用メモリ（ＲＯＭ）５２４およびランダムアクセスメモリ（ＲＡＭ）５２５を含む。基本入出力システム（ＢＩＯＳ）５２６は、たとえば起動中にコンピュータ５２０内部の要素間の情報の転送を助ける基本ルーチンを含み、ＲＯＭ５２４に格納することができる。
【００６４】
コンピュータ５２０は、磁気ハードディスク５３９からの読出しまたはそこへの書込みを行う磁気ハードディスクドライブ５２７、取外し可能磁気ディスク５２９からの読出しまたはそこへの書込みを行う磁気ディスクドライブ５２８、および、たとえばＣＤ−ＲＯＭまたは他の光学媒体などの取外し可能光ディスク５３１からの読出しまたはそこへの書込みを行う光ディスクドライブ５３０も含む。磁気ハードディスクドライブ５２７、磁気ディスクドライブ５２８、および光ディスクドライブ５３０は、それぞれハードディスクドライブインターフェース５３２、磁気ディスクドライブインターフェース５３３、および光ドライブインターフェース５３４によって、システムバス５２３に接続される。ドライブおよびそれに関連するコンピュータ読み取り可能な媒体は、コンピュータ実行可能な命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶を、コンピュータ５２０に提供する。本明細書で説明する例示的な環境では、磁気ハードディスク５３９、取外し可能磁気ディスク５２９、および取外し可能光ディスク５３１を使用したが、データを格納する他のタイプのコンピュータ読み取り可能な媒体、たとえば磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなども使うことができる。
【００６５】
オペレーティングシステム５３５、１つまたは複数のアプリケーションプログラム５３６、他のプログラムモジュール５３７、およびプログラムデータ５３８など、１つまたは複数のプログラムモジュールを含むプログラムコード手段を、ハードディスク５３９、磁気ディスク５２９、光ディスク５３１、ＲＯＭ５２４、またはＲＡＭ５２５に格納することができる。ユーザは、キーボード５４０、ポインティングデバイス５４２、または他の入力装置（図示せず）、たとえばマイクロホン、ジョイスティック、ゲーム用パッド、衛星パラボラアンテナ、スキャナなどを介して、コマンドおよび情報をコンピュータ５２０に入力することができる。こうしたおよび他の入力装置はしばしば、システムバス５２３に結合されるシリアルポートインターフェース５４６を介して処理装置５２１に接続される。あるいは、入力装置は、他のインターフェース、たとえば並列ポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）によって接続することもできる。モニタ５４７または別の表示装置も、ビデオアダプタ５４８などのインターフェースを介してシステムバス５２３に接続される。モニタに加えて、パーソナルコンピュータは通常、他の周辺出力装置（図示せず）、たとえばスピーカおよびプリンタを含む。
【００６６】
コンピュータ５２０は、リモートコンピュータ５４９ａおよび５４９ｂなど、１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク接続された環境において動作することができる。リモートコンピュータ５４９ａおよび５４９ｂは、それぞれ別のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の共通ネットワークノードでよく、通常、コンピュータ５２０に関連して上述した要素の多くまたはすべてを含むが、メモリ記憶装置５５０ａおよび５５０ｂ、ならびにそれに関連するアプリケーションプログラム５３６ａおよび５３６ｂのみを図５に示した。図５に示す論理接続は、限定ではなく例示のために本明細書に示すローカルエリアネットワーク（ＬＡＮ）５５１およびワイドエリアネットワーク（ＷＡＮ）５５２を含む。このようなネットワーク環境は、会社規模または企業規模のコンピュータネットワーク、イントラネットおよびインターネットにおいてよく見られる。
【００６７】
ＬＡＮネットワーク環境において使われる場合、コンピュータ５２０は、ネットワークインターフェースまたはアダプタ５５３を介してローカルネットワーク５５１に接続される。ＷＡＮネットワーク環境において使われる場合、コンピュータ５２０は、モデム５５４、無線リンク、または、たとえばインターネットなどのワイドエリアネットワーク５５２を介した通信を確立する他の手段を含むことができる。モデム５５４は、内部にあっても外部にあってもよく、シリアルポートインターフェース５４６を介してシステムバス５２３に接続される。ネットワーク接続された環境では、コンピュータ５２０に関連して図示したプログラムモジュールまたはその一部は、リモートメモリ記憶装置に格納することができる。図示したネットワーク接続は例示的なものであり、ワイドエリアネットワーク５５２を介した通信を確立する他の手段も使うことができることが理解されよう。
【００６８】
本発明は、本発明の精神からも本質的な特性からも逸脱することなく、他の具体的な形で実施することもできる。説明した実施形態は、あらゆる点において例示に過ぎず、制限ではないと理解されたい。本発明の範囲は、したがって、上記の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の等価物の意義および範囲内であるすべての変更は、特許請求の範囲に含まれる。
【図面の簡単な説明】
【００６９】
【図１】本発明の一例である実施形態を示す図である。
【図２Ａ】一例であるユーザインターフェースオブジェクトに対する変更の、一例であるトランザクションおよび対応するアンドゥユニットを示す図である。
【図２Ｂ】一例であるユーザインターフェースオブジェクトに対する変更の、一例であるトランザクションおよび対応するアンドゥユニットを示す図である。
【図３Ａ】ダイアログユーザインターフェースオブジェクトに対する、一例であるトランザクションおよび対応するアンドゥユニットを示す図である。
【図３Ｂ】ダイアログユーザインターフェースオブジェクトに対する、一例であるトランザクションおよび対応するアンドゥユニットを示す図である。
【図４Ａ】本発明による、アンドゥ情報を生成し追跡する方法の例である動作およびステップを示す図である。
【図４Ｂ】本発明による、アンドゥ情報を生成し追跡する方法の例である動作およびステップを示す図である。
【図４Ｃ】本発明による、アンドゥ情報を生成し追跡する方法の例である動作およびステップを示す図である。
【図５】本発明に適した動作環境を提供する、一例であるシステムを示す図である。
【符号の説明】
【００７０】
１１０  設計面
１２２  トランザクション通知、トランザクション
１２４  変更通知、変更中通知、変更済通知
１３０  シリアル化エンジン
１３２  シリアル化
１４０  アンドゥエンジン
１５０  アンドゥユニット
１５２  アンドゥユニット
１５４  アンドゥユニット
１６０  アンドゥスタック
２１０  設計面
２１２  ユーザインターフェースオブジェクト、オブジェクト
２１４  位置
２１６  位置
２１８  位置
２５０  アンドゥユニット
２５１  オブジェクト名
２５２  オブジェクトタイプ
２５３  他の情報
２７０  変更前の部分
２７２  場所
２７４  サイズ
２８０  変更後の部分
２８２  場所
２８４  サイズ
３１０  設計面
３１２  ダイアログユーザインターフェースオブジェクト、オブジェクト
３１３  年齢フィールド
３１５  性別フィールド
３１７  ＯＫボタン
３１９  キャンセルボタン
３５０  アンドゥユニット、変更ユニット
３５１  オブジェクト名
３５２  オブジェクトタイプ
３５３  他の情報
３７０  変更前の部分
３７２  性別フィールド
３７４  年齢フィールド
３７６  年齢フィールド
３８０  変更後の部分
３８２  性別フィールド
３８４  年齢フィールド
３８６  年齢フィールド
５２０  コンピュータ
５２１  処理装置
５２２  システムメモリ
５２３  システムバス
５２４  読出し専用メモリ（ＲＯＭ）
５２５  ランダムアクセスメモリ（ＲＡＭ）
５２６  基本入出力システム（ＢＩＯＳ）
５２７  磁気ハードディスクドライブ
５２８  磁気ディスクドライブ
５２９  取外し可能磁気ディスク、磁気ディスク
５３０  光ディスクドライブ
５３１  取外し可能光ディスク、光ディスク
５３２  ハードディスクドライブインターフェース
５３３  磁気ディスクドライブインターフェース
５３４  光ドライブインターフェース
５３５  オペレーティングシステム
５３６  アプリケーションプログラム
５３６ａ  アプリケーションプログラム
５３６ｂ  アプリケーションプログラム
５３７  他のプログラムモジュール
５３８  プログラムデータ
５３９  磁気ハードディスク、ハードディスク
５４０  キーボード
５４２  ポインティングデバイス
５４６  シリアルポートインターフェース
５４７  モニタ
５４８  ビデオアダプタ
５４９ａ  リモートコンピュータ
５４９ｂ  リモートコンピュータ
５５０ａ  メモリ記憶装置
５５０ｂ  メモリ記憶装置
５５１  ローカルエリアネットワーク（ＬＡＮ）、ローカルネットワーク
５５２  ワイドエリアネットワーク（ＷＡＮ）
５５３  ネットワークインターフェース、ネットワークアダプタ
５５４  モデム
【図１】
2005018774.tif 000016
【図２Ａ】
2005018774.tif 000017
【図２Ｂ】
2005018774.tif 000018
【図３Ａ】
2005018774.tif 000019
【図３Ｂ】
2005018774.tif 000020
【図４Ａ】
2005018774.tif 000021
【図４Ｂ】
2005018774.tif 000022
【図４Ｃ】
2005018774.tif 000023
【図５】
2005018774.tif 000024