コンピュータ・システムにおいてオブジェクト指向アプリケーション・インターフェイスを提供する方法および装置
【課題】革新的フレームワーク・アーキテクチャを使用して、最新のオブジェクト指向オペレーティング・システムを提供する。
【解決手段】コンピュータ・システムは、プロセッサ、表示装置、およびカーソル位置決定デバイスとオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを有する。カーソル位置決定デバイスは、表示装置上の画像を制御するデバイス・イベント信号を生成するユーザ・ボタンを有する。オブジェクト指向アプリケーション・プログラムは、特定の機能を実行する論理およびデータを有する複数のオブジェクトを含む。対話オブジェクトは、デバイス・イベント信号に応答して、アイコンの表示からサムネイル表示に表示を変更する。対話可能オブジェクトは、アプリケーションアドレス空間に生成され、データおよびデータを操作するメソッドを含む。
【解決手段】コンピュータ・システムは、プロセッサ、表示装置、およびカーソル位置決定デバイスとオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを有する。カーソル位置決定デバイスは、表示装置上の画像を制御するデバイス・イベント信号を生成するユーザ・ボタンを有する。オブジェクト指向アプリケーション・プログラムは、特定の機能を実行する論理およびデータを有する複数のオブジェクトを含む。対話オブジェクトは、デバイス・イベント信号に応答して、アイコンの表示からサムネイル表示に表示を変更する。対話可能オブジェクトは、アプリケーションアドレス空間に生成され、データおよびデータを操作するメソッドを含む。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的には、表示システムにおける改良に関し、より具体的には、オブジェクト指向オペレーティング・システムを提供することに関する。
【背景技術】
【0002】
ワークステーション・ソフトウェアの開発者の間で、ユーザ・インターフェイス内の一貫性を維持しながらフレキシブルなソフトウェア環境を提供することの重要性が増してきている。この種の動作環境を提供する初期の試みがヘルナンデスらの米国特許第4,686,522号に開示されている。この特許はカーソルの位置にある動的オブジェクトをユーザが引き出して、そのオブジェクトから種々の関数を引き出すことができるグラフィックとテキストの結合処理システムについて議論している。この種のユーザとの自然な相互作用あるいは対話はユーザ・インターフェイスを改善し、アプリケーションをより直感的にする。
【発明の開示】
【発明が解決しようとする課題】
【0003】
また、オブジェクト指向アプリケーションは、どのアプリケーションが現在アクティブであるかに関係なく、ユーザとの一貫性のある対話(インターアクション)インターフェイスを反映している必要がある。本件出願人が知っている公知文献には、いずれも、すべてのオブジェクト指向アプリケーションが、オブジェクト指向機能をオペレーティング・システムに組み入れるように構築することによって統一的に機能することを可能にする革新的なハードウェアおよびソフトウェア・システム機能が記載されていない。
【課題を解決するための手段】
【0004】
従って、本発明の主要目的は革新的なオブジェクト指向アプリケーション・インターフェイスを提供することである。オブジェクト指向オペレーティング・システムのグラフィカル・ユーザ・インターフェイスのユーザは、マウスを移動し、オブジェクト上でクリックしてオブジェクトを選択し、オブジェクトをドラグしてオブジェクトを移動またはコピーし、ダブル・クリックしてオブジェクトをオープンしているのが普通である。これらのオペレーションは直接操作(direct manipulation)とも、対話(interaction−やりとりすること)とも呼ばれている。ユーザがマウスを押し、移動し、解放することに対応する一連のイベントは、入力シンタクス(input syntax)と呼ばれている。ある種のイベント列は、セマンティック・オペレーション(semantic operation)と呼ばれる特定のアクションを示すために使用されている。本発明によれば、選択(Select)、ピーク(Peek)、移動(Move)、自動スクロール(AutoScroll)、およびドラグ/ドロップ(コピー)(Drag/Drop(Copy))をサポートするオブジェクトについて入力シンタクスをセマンティック・オペレーションに変換する方法および装置が開示されている。
【0005】
本発明では、マウス・ボタンが押されたことを検出すると、次のようなロジック(論理)が採用される。
【0006】
(a)ユーザがマウス・ボタンを押したときオプション(Option)キーが押されていれば、システムは、変数fInteractionType(fインターアクション・タイプ)を定数kDrag(kドラグ)にセットすることによってドラグ・モードに入る。そのあとシステムは、選択されたオブジェクトをオペレーションのターゲットとしてドラグ・オペレーションを開始する。
【0007】
(b)オプション・キーが押されていなければ、システムは、変数fInteractionTypeを定数kSelect(k選択)にセットすることによって選択モードに入る。そのあと、選択オペレーションが開始される。
【0008】
ユーザがすでにマウス・ボタンを押していて、マウス・ボタンを押えたままにしていれば、次のようなロジックに入る。システムが選択モードにあれば、システムは、まず、ユーザが移動スレッショルド(move threshold)と呼ばれる、一定のスレッショルドを越えてマウスを移動させたかどうかを判断する。これは、GetInitialLocation(初期位置獲得)メソッドから返された初期マウス位置を、GetCurrentLocation(現在位置獲得)メソッドから返された現在マウス位置を比較することによって行われる。マウスが移動スレッショルドを越えて移動していれば、システムは選択モードを終了し、移動モードに入る。これは、変数fInteractionTypeを定数kMove(k移動)にセットすることによって行われる。そのあと、システムは、そのSelectEnd(選択終了)メソッドをコールすることによって選択モードを終了するようにオブジェクトに指示する。次に、システムは、そのMoveBegin(移動開始)メソッドをコールすることによって移動オペレーションを開始する。
【0009】
逆に、マウスが移動していなければ、システムはマウスがどれだけ長く押されていたかをチェックする。これは、GetInitialTime(初期時間獲得)メソッドから返された初期マウス押え時間を、GetCurrentTime(現在時間獲得)メソッドから返された現在時間と比較することによって行われる。マウスがピーク・スレッショルドと呼ばれる一定のスレッショルドを越えて押されていれば、システムは選択モードを終了し、ピーク・モードに入る。これは、変数fInteractionTypeを定数kPeek(kピーク)にセットすることにより行われる。システムは、SelectEnd(選択終了)メソッドをコールすることによって選択オペレーションを終了するようにオブジェクトに指示し、PeekBegin(ピーク開始)メソッドをコールすることによってピーク・オペレーションを開始する。逆に、マウスが移動していなければ、あるいはマウスがピーク・スレッショルドを越えて押えられていなければ、システムはオブジェクトのSelectRepeat(選択反復)メソッドをコールすることによって選択オペレーションを継続する。ユーザが移動モードに入っていることをシステムが検出すると、システムは、まず、ユーザがマウスをウィンドゥ内で移動したか、ウィンドゥの境界上で移動したか、ウィンドゥの外で移動したかを判断する。これは、GetCurrentLocation(現在位置獲得)メソッドから返された現在位置を、GetContainerBounds(コンテナ境界獲得)から返されたオブジェクトのコンテナの境界と比較することによって行われる。
【0010】
マウスがまだウィンドゥ内にあれば、システムは、オブジェクトのMoveRepeat(移動反復)メソッドをコールすることによって移動オペレーションを継続する。マウスがウィンドゥの境界上にあれば、これは自動スクロール(AutoScroll)オペレーションを示している。システムは、マウス位置で示された方向にスクロールするようにオブジェクトのコンテナに指示する。これは、コンテナのAutoScrollメソッドをコールし、現在マウス位置をパラメータとして渡すことによって行われる。完了すると、システムはオブジェクトのMoveRepeatメソッドをコールすることによって移動オペレーションを継続する。
【0011】
マウスがウィンドゥの外に移動していれば、システムは移動モードを終了し、ドラグ・モードに入る。これは、変数fInteractionTypeを定数kDrag(kドラグ)にセットすることにより行われる。システムは、そのMoveEnd(移動終了)メソッドをコールすることによって移動オペレーションを終了するようにオブジェクトに指示する。システムは、そのDragBegin(ドラグ開始)メソッドをコールすることによってドラグ・オペレーションを開始するようにオブジェクトに指示する。システムがドラグ・モードにあれば、システムはオブジェクトのDragRepeat(ドラグ反復)メソッドをコールすることによってドラグ・オペレーションを継続する。システムがピーク・モードにあれば、システムは、まず、ユーザが移動スレッショルドと呼ばれる一定のスレッショルドを越えてマウスを移動したかどうかを判断する。これは、GetInitialLocationメソッドから返された初期マウス位置を、GetCurrentLocationメソッドから返された現在マウス位置と比較することにより行われる。
【0012】
マウスが移動スレッショルドを越えて移動していれば、システムはピーク・モードを終了し、移動モードに入る。これは、変数fInteractionTypeを定数kMove にセットすることにより行われる。システムは、そのPeekEnd(ピーク終了)メソッドをコールすることによってピーク・オペレーションを終了するようにオブジェクトに指示する。システムは、そのMoveBegin(移動開始)メソッドをコールすることによって移動オペレーションを開始するようにオブジェクトに指示する。逆に、マウスが移動していなければ、システムはオブジェクトのPeekRepeat(ピーク反復)メソッドをコールすることによってピーク・オペレーションを継続する。
【0013】
ユーザがマウス・ボタンを解放したことをシステムが検出すると、システムが選択モードに入っていれば、システムは選択モードを終了する。これは、変数fInteractionTypeを定数kNone(k無し)にセットすることにより行われる。システムは、SelectEnd(選択終了)メソッドをコールすることによって選択オペレーションを終了するようにオブジェクトに照会する。システムが移動モードに入っていれば、システムは移動モードを終了する。これは、変数fInteractionTypeを定数kNoneにセットすることにより行われる。そのあと、システムは、そのMoveEnd(移動終了)メソッドをコールすることによって移動オペレーションを終了するようにオブジェクトに照会して、変数fInteractionTypeを定数kNoneにセットすることによりドラグ・モードを終了する。システムは、そのDragEnd(ドラグ終了)メソッドをコールすることによってドラグ・オペレーションを終了するようにオブジェクトに指示する。システムがピーク・モードに入っていれば、システムはピーク・モードを終了する。これは、変数fInteractionTypeを定数kNoneにセットすることにより行われる。システムは、PeekEnd(ピーク終了)メソッドをコールすることによってピークを終了するようにオブジェクトに指示する。
【発明を実施するための最良の形態】
【0014】
本発明は、IBM(登録商標)社のPS/2(登録商標)あるいはアップル(登録商標)社のマッキントッシュ(登録商標)コンピュータのようなパーソナル・コンピュータ上に駐在するオペレーティング・システムで実現されることが望ましい。代表的なハードウェア環境を第1A図に示す。この図は、従来のマイクロ・プロセッサのような中央演算装置10と、システム・バス12に内部接続された多数の他のユニットを有する本発明のワークステーションの典型的なハードウェア構成を示している。第1A図に示されるワークステーションは、ランダム・アクセス・メモリ(RAM)14と、リード・オンリ・メモリ(ROM)16と、ディスク・ユニット20のような周辺装置をバスに接続するためのI/Oアダプタ18と、キーボード24、マウス26、スピーカー28、マイクロフォン32、および/あるいはタッチ画面装置(図示せず)のような他のユーザ・インターフェイス装置をバスに接続するためのユーザ・インターフェイス・アダプタ22と、ワークステーションをデータ処理ネットワークに接続するための通信アダプタ34と、バスを表示装置38に接続するための表示アダプタ36とを具備している。ワークステーションは、その上に駐在するIBM社のOS/2(登録商標)オペレーティング・システムあるいはアップルのシステム/7(登録商標)オペレーティング・システムのようなオペレーティング・システムを有する。
【0015】
本発明は、オペレーティング・システムとエンド・ユーザ、開発者、およびシステム・ベンダのためのパーソナル・コンピュータの使用に革命をもたらすように意図された開発環境からなる新規なオブジェクト指向システム・ソフトウェア・プラットフォームである。このシステムは、完全なスタンド・アローン・タイプのネイティブ・オペレーティング・システムであり、また高性能パーソナル・コンピュータのためのバックグラウンドから達成された開発環境である。本発明は、フレームワークの価値、クラス・ライブラリおよび新世代オブジェクト指向プログラミング環境を含む完全なオブジェクト指向システムであり、サードパーティのアプリケーション・ソフトウェアの開発の経済性を基本的に改善するよう意図されている。本発明は完全にポータブルなオペレーティング・システムである。
【0016】
従来のオペレーティング・システムは、ソフトウェア開発者がソフトウェアを創作するために使用できる1組のサービスを提供する。それらのプログラムはオペレーティング・システム環境全体の中に非常に緩く統合されている。例えば、DOSアプリケーションはマシン全体を支配する。これは、ユーザに関する限り、アプリケーションはオペレーティング・システムであることを意味する。マッキントッシュ(登録商標)およびウィンドウズ(登録商標)・オペレーティング・システムでは、アプリケーションは同じように見え、それらはアプリケーション間での切り出し(カット)と貼り付け(ペースト)をサポートしている。この共通化によりユーザが単一環境で多数のアプリケーションを使用することが容易となった。しかしながら、その共通化はサービスとフレームワークに組み入れられていないので、ソフトウェアを開発することはまだ非常に困難である。
【0017】
本発明では、“アプリケーション”を書くことは、オペレーティング・システム環境に統合されるオブジェクトの組を創造することを意味する。ソフトウェア開発者は、ソフトウェアを開発するための複雑なサービスの組とフレームワークの両方のためのオペレーティング・システムにたよることができる。本発明のフレームワークは、ソフトウェア開発者が基盤を構築するよりはむしろ問題に集中することを可能とする強力な抽象化を提供する。さらに、ソフトウェア開発者のための基本的抽象化は、ユーザがソフトウェアを操作するために理解しなければならない基本的な概念に非常に近い。このアーキテクチャにより、複雑なアプリケーションの開発が容易となる。
【0018】
このセクションでは、本発明を採用するソフトウェアを書くため4つのステップを述べる。アプリケーションの開発を意図するユーザは一般に以下の質問に関心がある。
・何をモデル化するか
ワードプロセッサではこれは入力しようとするテキストであり、スプレッドシートではそれはセル内の値と公式である。
・データをどのように表現し提供するか
再び、ワードプロセッサでは文字が適当な改行および改ページを用いて画面上に“見るものが得るもの”(wysiwyg)形式で表示され、スプレッドシートでは表またはグラフとして表示され、構造化グラフィック・プログラム(例えばマックドロー(MacDraw))では、グラフィック・オブジェクトの組として表示される。
・何が選択可能か
ワードプロセッサアプリケーションでは、選択されるのは文字の範囲であり、構造化グラフィック・プログラムではグラフィック・オブジェクトの組である。
・この選択の上で動作するコマンドは何か
ワードプロセッサではコマンドは文字のスタイルをボールドに変更することかもしれない。構造化グラフィック・プログラムにおけるコマンドはグラフィック・オブジェクトを回転させることかもしれない。第1B図は本発明による表示を示す。表示の前面にピクチャーをもってくるためのコマンドは41に描かれている。グラフィック情報のプレゼンテーションは40に描かれている。最後に、特定のグラフィック・オブジェクト、円の選択が42に示されている。
【0019】
開発者は、ユーザからたずねられる同じ4つの質問に答えなければならない。幸運にも、本発明はこれら4つの質問の各々を志向するサービスとフレームワークを提供する。答えられなければならない最初の質問は、何をモデル化するかである。ワードプロセッサ・プログラムではデータは文書を構成する文字を含む。スプレッドシートでのデータはセル内の値と公式を含む。カレンダ・プログラムではデータは時間と日付に関係するアポイントを含む。本発明は、データをモデル化するのを助ける機能を提供する。テキスト、構造化グラフィックス、サウンド、および映像を含む特定のデータ形式をモデル化するためのクラスが存在する。これらの特定のクラスに加えて、本発明は、コレクション・クラス、同一制御、リカバリ・フレームワークおよびC++言語を含む、問題のモデル化をサポートする多数の他の抽象化を提供する。特定のデータ形式のためにデータ・モデルをカプセル化するクラスは、そのデータ・カプセルに含まれるデータをアクセスし修正するための特定のプロトコルと、他のデータ・カプセルを埋め込み、他のデータ・カプセルに埋め込まれるためのジェネリックなプロトコルをオーバライド(override)にするためのサポートと、データが変わるときのすべての登録されたオブジェクトに対する通知と、データのプレゼンテーションを生成するためのジェネリックなプロトコルのオーバライドとを提供する。
【0020】
答えなければならない次の質問はデータをどのように提供するかである。構造化グラフィック・プログラムではグラフィック・オブジェクトの組は一般にキャンバス上に描かれる。スプレッドシートではそれは通常、セルの表あるいはグラフである。プレゼンテーション・プログラムではスライドの組あるいはアウトラインである。本発明は、データ・カプセルに含まれるデータの“ながめ(ビュー、view)”を提供する。ビューは“ビュー(view)システム”とグラフィック・システムのセルを用いて生成される。しかしながら、サウンドあるいはビデオ・クリップを動作させることもデータのプレゼンテーションとして考えられる。
【0021】
次に、何が選択されるかである?
ワードプロセッサ・プログラムでは、選択されるのは文字の範囲であり、構造化グラフィック・プログラムではグラフィック・オブジェクトの組である。スプレッドシートではセルの範囲である。本発明は、システムがサポートする全ての基本的なデータ形式のために選択クラスを提供する。ユーザによりなされた選択を表す抽象ベース・クラスは選択されたデータの、アドレス空間から独立した指定を提供する。テキストでは、これは文字に対する一対のポインタよりはむしろ文字の数値範囲であるであろう。この限定は、他のユーザとの(リアルタイムでの)共同作業のとき、選択された範囲が他のマシンとの間で交換されるので重要である。ベース・クラスはまたジェネリック・プロトコルをオーバライドして、この選択に対応する持続的選択を生成する。持続的選択はアンカー・オブジェクトのサブクラスであり、持続的選択が変更の編集から生き延びなければならないので、対応する短命な選択より重いと考えられる。例えば、持続的テキスト選択は、テキストがその前後に挿入されるときそれ自身を調整しなければならない。アンカーはハイパーメディアのリンク、データ・フローのリンクおよびアノテーションの実行に際して使用される。
【0022】
ベース・クラスはまた、データ・カプセル内に含まれるデータを吸収し、埋め込み、送り出するためのオーバライド・ジェネリック・プロトコルを提供する。ベース・クラスはそれらを生成するために使用されるユーザ・インターフェイス技術から独立である。選択は、一般的に(例えばテキストの範囲あるいはセルをトラック(追尾)して)ユーザによる直接操作を介して生成されるが、スクリプトを介してあるいはコマンドの結果として生成されてもよい。このユーザ・インターフェイスとの直交性が非常に重要である。ベース・クラスはまたデータ・カプセルをアクセスするための特定のプロトコルを提供する。カプセル・クラスの特定のサブクラスとモデル選択クラスのサブクラスとの間には非常に強い関連性がある。
【0023】
最後に、この選択された範囲について動作をすることができるコマンドは何か。ワードプロセッサのプログラムでは、コマンドは文字の選択された範囲のスタイルを変更するものでもよく、構造化グラフィック・プログラムではコマンドはグラフィック・オブジェクトを回転させるものでもよい。本発明は、多くのユーザ・インターフェイス・コマンドと共に、カット、コピー、ペースト、ハイパーメディア・リンク・スタート、リンク完了、リンクの運行、リンク上でのデータのプッシュ、リンク上でのデータのプルをするためのジェネリック・コマンドを提供すると共に、全ての組込データ形式のための多数の組込コマンド・オブジェクトを提供する。ユーザにより作られたコマンドを表すアブストラクト・ベース・クラスは、ユーザ・アクションのセマンティクス(意味)を捉える責任を負い、コマンドがドゥ(do:実行)され、アンドゥ(undo:取り消し)され、リドゥ(redo:再実行)されることができかどうかを決定する。コマンド・オブジェクトは、コマンドがドゥされた後、コマンドをアンドゥするために必要な情報のすべてをカプセル化する責任を負う。コマンドが実行される前は、コマンド・オブジェクトは、ユーザ・アクションの非常にコンパクトな表現である。ベース・クラスは、それらを生成するために使用されるユーザ・インターフェイスの技術から独立である。コマンドはユーザによる直接の操作(例えば、グラフィック・オブジェクトの移動)を介して、あるいはメニューから一般に生成されるが、スクリプトを介して生成されることはできない。ユーザ・インターフェイスとの直交性は非常に重要である。
【0024】
(フレームワークの利益)
本発明内の抽象化にプラグを差し込む利益は、概念的モデルを提供するよりも大きい。フレームワークにプラグを差すことはベース・オペレーティング・システム中に構成された多くの複雑な特徴を提供する。これは、比較的小さいメソッドをコールすることによりフレームワークが多数のユーザ特徴を実行することを意味する。フレームワークのための符号化への投資がいくつかの特徴に渡って影響をもたらす。
【0025】
新種のデータが操作されると、新しいデータ形式がシステムの一部となる。データのカプセルを取り扱うことができる既存のソフトウェアは修正無しに新しいデータ形式を取り扱うことができる。これは、マッキントッシュ・コンピュータ・システムのような現在のコンピュータ・システムとは異なる。例えば、スクラップ・ブック・デスク・アクセサリはある種のデータを格納することができるが、テキストあるいはクイックドロー画像成分を有するデータを表示することができるだけである。対照的に、本発明のスクラップ・ブックは、オブジェクトの形でデータを取り扱うので、あらゆる種のデータを表示する。生成された新しいデータ形式はシステム提供データ形式と全く同様に振る舞う。加えて、スクラップ・ブック内のデータは、オブジェクトがデータを編集するための標準プロトコルを提供するので、編集可能である。
【0026】
スクラップ・ブックの例はデータのカプセル化の長所を際立たせる。ソフトウェアがデータのカプセル化を扱うことができるように開発されていれば、アプリケーションを、新しいデータ形式を簡単に扱うように設計することができる。新しいアプリケーションは修正無しに新しい形式のデータを表示し編集することができる。
【0027】
(マルチレベル・アンドゥ)
本発明はマルチレベル・アンドゥをサポートするように設計されている。この特徴を折り込むことは、しかしながら、開発者の側に余分な努力を要求しない。システムは、生成されるすべてのコマンド・オブジェクトを単に思い出すだけである。対応するコマンド・オブジェクトが存在する限り、ユーザは、データへの特定の変更をアンドゥ、即ち取り消すことができる。システムが、コマンドを保存し、どのコマンドをアンドゥあるいはリドゥ(再実行)すべきかを決定するので、ユーザはアンドゥの手順を折り込まない。
【0028】
データのカプセル化のプロトコルの一部は、データをストリームにファイルすることと他の場所および/あるいは他の時間までデータを休ませることを行う。システムは、このプロトコルを使用してドキュメントの保存を行う。デフォルトでは、ユーザのデータ・オブジェクトは、保存されるときファイルに流される。ドキュメントがオープンされているときは、データ・オブジェクトは休まされる。システムは、データ管理フレームワークを使用してディスクに書かれたデータが一貫性をもつ状態であることを確認する。ユーザは、システムが壊れたときにデータがディスク上に保たれているように、しばしばファイルを保存しようとする。システムがすべてのコマンド・オブジェクトを保持するので、本発明はこの種の保存を必要としない。ドキュメントの状態は、ドキュメントの最新のディスクバージョンから始めて、その時点からのコマンド・オブジェクトを再度与えることにより再構成することができる。信頼性のために、システムはコマンド・オブジェクトが起動される毎にそれらをディスクに自動的にログするので、システムが壊れたとしてもユーザは最後のコマンド以外失うことはない。本発明はまたドキュメントのバージョン化をサポートする。ユーザはドキュメントの現在の状態からドラフトを生成することができる。ドラフトは特定の時点におけるドキュメントの不変の“スナップショット”である(ドラフトを生成する1つの理由はコメントのために他のユーザにそれを回覧することである)。システムは新しいドラフトの生成に含まれる詳細を自動的に扱う。
【0029】
(協同作業)
上記のように、ドキュメントは、ある過去の時の状態から始め、そのとき以降なされたコマンド・オブジェクトのシーケンスを適用することにより再構築することができる。このためユーザは故障の場合に仕事を回復することができ、リアルタイム協同作業をサポートすることができる。コマンド・オブジェクトは選択されたものについて動作し、それらの選択されたものはアドレス空間に独立である。従って、選択されたオブジェクトをネットワークを介して協同作業者に送ることができ、遠隔マシンで使用することができる。同じことがコマンド・オブジェクトについても言える。1人の協同作業者が行ったコマンドを他の者に送り同じようにそれらの者のマシンで実行することができる。協同作業者が同一のデータコピーから始めるならば、コピーは協同作業者が変更を行うにつれて“同期して”残る。選択の生成はコマンド・オブジェクトを使用して行うので、すべての協同作業者は同じ現在の選択をもつ。
【0030】
システムは、“モデル・ペース・トラッキング”として知られている特徴を用いて各協同作業者のマシン上でマウス・トラッキングを行う。マウスの押下を扱うように生成されたトラッカー・オブジェクトはユーザがマウスを動かすにつれて一連のインクレメンタルコマンドを生成し実行する。これらのコマンドは協同作業者に送られて各協同作業者により実行される。各協同作業者はそれが起きるにつれてトラッキング・フィードバックをビューすることになる。システムはまた共同作業ポリシーを確立する。共同作業ポリシーは、データに変更を加えるときあるいは自由に変化するとき、ターンするように強制されるかどうかを決定する。本発明はアプリケーション開発者から責任を取り除く共同作業マシンを取り扱う。
【0031】
(スクリプト)
コマンド・オブジェクトのシーケンスを管理するようにシステムを設計すると、システムワイドのスクリプト機能を実行することが可能となる。コマンド・オブジェクトのシーケンスはローカルアクションのスクリプトと等価である。スクリプト機能は、あるドキュメントに適用されるコマンド・オブジェクトを単にトラッキング(追尾)し続ける。スクリプト機能はまた、スクリプトに際して選択オブジェクトを使用する。この機能は、適用する選択を変えることによりスクリプトの注文化を提供する。コマンド・オブジェクトはそれらが特定の選択に適用できるかどうかを示すためのプロトコルを含むので、システムはユーザのスクリプトの変更が妥当であることを確認する。
【0032】
(ハイパーメディアのリンク)
アンカーとして知られている持続的な選択はリンク・オブジェクトにより接続されることができる。リンク・オブジェクトは、その終点を形成する2つのアンカーへの参照を有する。システムでは、リンクは双方向であり、両端は等しい能力を有する。リンクのより高いレベルの使用はリンクに方向を課すことができる。単一リンク・オブジェクトは2つの標準的特徴、即ち運行とデータ・フローとをサポートする。ユーザはリンクの一端から他端へ運行する。通常、これは指定アンカーを含み、持続的な選択をハイライトとするドキュメントをオープンすることを含む。正確な振る舞いは宛先でのアンカー・オブジェクトにより決定される。例えば、アニメーションへのリンクはアニメーションを演ずることができる。データベースクエリーへのリンクはクエリーを実行する。
【0033】
また、リンクはデータ・フローを容易にする。リンクの一端で選択されたデータは他端に転送され、そこで選択を置き換える。ほとんどの場合、その効果は、ユーザが一端で選択をコピーし、他端へ運行するようにリンクを使用し、データを貼り付けることと同じである。システムは、リンクの一端から他端への運行(例えば、宛先ドキュメントを置き、それをオープンし、宛先アンカーをビュー(視野)内にスクロールする等)が含まれる詳細を取り扱う。同様に、システムは、リンクを横切るデータの転送の詳細を取り扱う。後者は、それが参照するデータをアクセスし、修正するための選択のプロトコルを用いて実行される。
【0034】
(注釈(アノテーション))
本発明はシステムワイドの注釈の機能をサポートする。この機能により著者(使用者)は見直しのためドキュメントのドラフトを分配することができる。見直し者はドキュメントにポスト・ノート(posted note) 添付することができ、実行されたとき著者にドキュメントを戻す。著者はポスト・ノートを調べ、それぞれについてアクションを取る(著者はドキュメント内のポスト・ノートを生成することができる)。見直し者が著者と同じソフトウェアをもつ必要はない。代わりに、見直し者は標準注釈アプリケーションを使用することができる。このアプリケーションは著者のドラフトからデータを読み、注釈可能なプレゼンテーションを生成する(そのようなプレゼンテーションの生成は標準データ・カプセルプロトコルの一部である)。
【0035】
見直し者は、ドキュメント内に選択を生成することができ、その選択にポスト・ノートをリンクすることができる。ポスト・ノートと選択の間のリンクによりシステムはそれが参照する選択に“近い”ポスト・ノートを位置決めすることができる。リンクはまた注釈構造を明白にし、システムは注釈を処理するように標準コマンドを実行することができる。ポスト・ノートの内容は、単なるテキストあるいはグラフィックではなく、システム内で実行されるデータ形式でよい。ノートの内容はデータ・カプセルを用いて実行され、ノートをオープンすることはデータの編集可能プレゼンテーションを生成することになる。
【0036】
(データ表現)
データ表現は、モデル化するデータは何かとの質門への答えと関係する。本発明はデータのモデル化を助ける機能を提供する。テキスト、構造化グラフィックス、サウンドおよび映像を含めて、特定のデータ形式をモデル化するためのクラスがある。これらの特定のクラスに加えて、本発明は問題をモデル化するのを助ける多数の他の抽象化、コレクション(収集)クラス、同時の制御と回復フレームワーク、およびC++言語自身を提供する。本発明の主題では、特定データ形式のためのデータ・モデルをカプセル化するクラスはカプセル化クラスのサブクラスである。
【0037】
(カプセル化クラス(Encapsulator Class))
開発者は、カプセル化クラスから導かれるクラスを生成することにより特定形式のデータ表現に対するコンテナを生成する。例えばグラフィック・オブジェクト、様式化されたテキスト、スプレッドシートのセルのようなシステム内の各形式のデータのために、ある形式のデータのためのコンテナとして働く異なる導かれたクラスが存在しなければならない。カプセル化クラスの各々は、それに含まれるデータをアクセスし、修正するための形式の特定プロトコルを提供する。このプロトコルは、一般に、データを表示するためのプレゼンテーションにより、またデータを修正するためのコマンドにより使用される。形式特定プロトコルに加えて、カプセル化クラスは、“ブラック・ボックス”としてのデータ・カプセルの他のエイリアン(異なる見知らぬ)形式への埋め込みをサポートするジェネリック・プロトコルを提供する。このプロトコルは導かれたクラスの中で実行され、カプセル化データのためにプレゼンテーション、編集および選択の生成をサポートしなければならない。コンテナは、エイリアン・データ形式の埋め込みをサポートするように、このジェネリック・プロトコルを理解する必要があるにすぎない。
【0038】
(データ表現の選択)
データ形式の設計者は、特定形式のデータのための表現を設計するときに、C++ オブジェクト・モデルと、選択されるべき豊富な標準クラスの組との両方をもっている。データを表現するためのユニークなクラスを設計する前に、本発明により提供されるクラスが、常に考慮されるべきである。これにより、システム内の既存のクラスに同様なあるいは同一の機能を提供する新しいクラスを生成する無駄な努力を軽減することができる。これらのうちで最も基本となるのがC++ オブジェクト・モデルである。設計者は、ユーザが扱うクラスを表現するためにユーザのメンタル(精神的)モデルに近づける1または2以上のクラスを生成することができる。
【0039】
本発明の基本的なクラスはデータを表現する多くの標準的な方法を提供する。収集クラスは、簡単な組から辞書までランク付けして、メモリ内に関連付けられたオブジェクトを収集するための多数の方法を提供する。持続的な間違いの少ないオブジェクトの収集を提供するためのディスクベースの収集がまた使用可能である。グラフィック編集のような、2次元(2D)あるいは3次元(3D)のグラフィック・モデル化を必要とするデータ形式がまたサポートされている。多数の2Dと3Dのモデル化オブジェクトが変形され、マトリクス・クラスおよび3Dカメラと共に提供される。同様に、本発明は全世界テキスト、審美的なタイポグラフィおよび拡張可能なスタイル(様式)機構をサポートする複雑なテキスト・データ形式を提供する。本発明はまた、サウンドおよび映像のような時間ベースのメディアのためのサポートを提供する。複雑な時間制御機構が使用可能であり、種々の形式の時間ベースメディア間の同期を提供する。
【0040】
(プレゼンテーション・プロトコル)
カプセル化クラスは、カプセル内に含まれるデータの種々のクラスのプレゼンテーションを生成するためのプロトコルを提供する。プレゼンテーションは、寸描プレゼンテーション、“ブラウズ・オンリ”(拾い読み)プレゼンテーション、選択可能プレゼンテーションおよび編集可能プレゼンテーションを含む。プレゼンテーションのためのサイズのネゴシエーションを行い、選ばれたサイズ内にデータを適応させるためのプロトコルがまた存在する。このプロトコルを実行するカプセル化クラスのサブクラスは、他のカプセルへのデータの埋め込みをサポートする。現在サポートされているプレゼンテーションは、以下のものを含む。
【0041】
・寸描(Thumbnail)−このプレゼンテーションはユーザにカプセル内に何が含まれているかを“ピーク”することができるように(覗くことができるように)意図されている。一般にサイズは小さく、そのサイズに合うようにデータを縮小および/あるいはクリップしてもよい。
【0042】
・拾い読み(Browse-only)−このプレゼンテーションによりユーザは通常のサイズでデータを見ることができるようになるが、いずれのデータも選択し修正することはできない。
【0043】
・選択可能(Selectable)−このプレゼンテーションは、拾い読みプレゼンテーションにより提供される能力にデータを選択する能力を加える。データそれ自身への修正を許すことなく、注釈がデータの選択に結びつけられることができるように注釈の中で使用される。選択可能プレゼンテーションは、一般に拾い読みプレゼンテーションのサブクラスとして実行される。
【0044】
・編集可能(Editable)−このプレゼンテーションは、選択可能プレゼンテーションにより提供される能力にデータを修正する能力を加える。これは、ユーザが新たなデータを生成し既存のデータを編集することを可能とするプレゼンテーションである。現在、このプレゼンテーションはそれ自身の編集のためのウィンドゥを提供する。将来的にはその場で編集を可能とするプレゼンテーションのためのサポートが加えられる。編集可能プレゼンテーションは一般に選択可能プレゼンテーションのサブクラスとして実行される。
【0045】
(変更通知)
カプセル化クラスに含まれるデータが変更されたとき、クライアント(例えばデータの使用者)に変更を通知する必要がある。カプセルは標準通知サポートのための組込クラスにあり、カプセルがデータ表現への変更をクライアントに通知することを可能とする。クライアントは、特定の変更についての通知あるいはすべての変更についての通知のためのカプセルに接続することができる。変更が起きたとき、カプセルはすべての関連するクライアントに変更についての通知を伝搬するように、このモデルに依頼する。
【0046】
(データのプレゼンテーション)
このセクションでは、どのようにしてシステムがデータをユーザにプレゼンテーションするかについて説明する。データが一旦システムに表現されると、適当な意味ある方法でデータをユーザにプレゼンテーションすることがユーザ・インターフェイスの役割である。ユーザ・インターフェイスはユーザとモデル化データの間のダイアログを確立する。このダイアログはユーザがデータを見、あるいは他に知覚することを可能とし、ユーザにデータを修正あるいは処理する機会を与える。このセクションはデータ表現に焦点を当てている。
【0047】
(ユーザ・インターフェイス)
開発者は、データ・カプセルと相互作用するようにデータのプレゼンテーションを容易にするクラスを生成する。プレゼンテーションからデータ・モデルを分離することにより、本発明は同じデータの多数のプレゼンテーションを容易にする。アップル社のマッキントッシュ・ファインダのようなアプリケーションは、同一データを多数にプレゼンテーションすることを制限された形で既にサポートしている。同じ時間に同じデータを異なる観点で表示することを可能とすることはある場合には有用である。これらの異なる観点は、同じデータの4つの異なる観点を示す3D−CADプログラムのような同じクラスのインスタンスであってもよい。各種のプレゼンテーションのため、ユーザには、モデルを表示することができるビューと、モデルを選択し修正できるトラッキング(追尾)ツールと追尾コマンドの組を前もって書くことを要求されていた。
【0048】
(静的プレゼンテーション)
最も簡単なプレゼンテーション形式はデータの名称である。名称はデータの内容あるいは形式を示すテキスト・ストリングである。例としては、“第4章”、“1990年連邦税収”、“すべきこと”等がある。他の簡単なプレゼンテーション形式であるアイコンは、データの小さいグラフィックプレゼンテーションである。それは通常データ形式を示す。例としては、本、レポート、金融モデル、サウンドあるいは映像の記録、図面等がある。しかしながら、また、それらは印刷しているプリンタのようなステータスを表示し、あるいは図面の縮尺図のような内容を示してもよい。最後に、寸描プレゼンテーションはモデル・データの小さいビューである。たとえば、縮尺された図、本の内容の表、縮尺された手紙、あるいは長い書類の縮尺された最初のページである。拾い読みプレゼンテーションは、ユーザが通常のサイズでデータを見ることを可能とするが、データのいずれも選択しあるいは修正することはできない。
【0049】
(選択可能プレゼンテーション)
選択可能プレゼンテーションは、ユーザがデータを見、調べ、データから情報を抽出することを可能とする。これらのプレゼンテーションは、コンテクスト、即ち、何がデータか、データはどこか、データはいつ生成されたかを提供する。それはリスト、グリッドのような構造化手法でデータを外観としてあるいは部分的にプレゼンテーションするのを助けることができる。それはまた、データ要素間の関係、データのコンテナあるいは同胞との関係、あるいは他の依存性を表示するのに有用である。
【0050】
選択可能プレゼンテーションはまたメタデータを表示することができる。例としては、ユーザが現在処理しているデータ要素を示す現在選択がある。他の形式のメタデータはデータ要素間のハイパーメディア・リンクである。ビューはまた、データについて共同作業をしている他のユーザを示すことができる。
【0051】
選択可能プレゼンテーションは、通常データ形式により非常に特定される。それらはウィンドゥ、ビュー、およびデータ形式を最良に反映するようにカスタマイズされたユーザ・インターフェイス・オブジェクトからなる。いくつかの例は、
・サウンドの記録−コントロール・パネルは可聴プレゼンテーションを実行する。ビューは音楽のスコアとしてあるいは一連の波形としてサウンドを表す。ビューはサンプル番号あるいは時間表示を含む。
【0052】
・金融モデル−モデルは公式と他のパラメータの組として見ることができる。時間についての特定のインスタンスで、あるいはスプレッドシートのような特定の入力値で、あるいは種々のグラフィックなスタイルに、モデルからのデータを表すことができる。
【0053】
・本−モデルは、内容の表、インデックス、図のリストとしてみられることができる。それは、一連のページ、一連の章、あるいは連続するテキストの流れとして見られることができる。
【0054】
・映像の記録−モデルは、一連の個々のフレーム、あるいは連続するプレゼンテーションとして見られることができる。ビューは追尾マーク、フレーム数、および時間表示を含む。
【0055】
・他のオブジェクトを含むコンテナ−オブジェクトは名称により、形式あるいは他の属性により、一連のアイコン、1組の寸描としてアルファベット順に表示されることができる。
【0056】
(編集可能プレゼンテーション)
編集可能プレゼンテーションは、データの修正を行うことを除いて、対話的プレゼンテーションと同様である。編集可能プレゼンテーションは、マウスあるいは他のポインタでデータの直接の処理を可能とすることによりこれを行う。また、データがメニュー項目と他のコントロールを介してシンボル的に処理されることを可能とする。
【0057】
(データ・アクセス)
プレゼンテーションは、データとプレゼンテーションされるべき他の情報とを決定するためにデータ・カプセルと相互に作用する(対話する)。プレゼンテーションは要求されるデータをモデルにクエリー(照会)する。プレゼンテーションは含まれるデータのすべてあるいは一部だけをプレゼンテーションしてもよいし、あるいはデータ・カプセルのデータから導かれてもよい。
【0058】
(変更通知)
アクティブな単一のモデルの多くのプレゼンテーションが一時に存在することができるので、データは、協同作業者を含めて多くのソースから変更され得る。モデル・データに関して、各プレゼンテーションは自身を更新し続ける責任がある。これは、モデルのすべてあるいは部分が変更するとき、通知を登録することにより達成される。プレゼンテーションと関連するデータにある変更が生じたとき、プレゼンテーションは通知を受け取り、そのビューを更新する。変更通知は以下にリストされている手法のいずれかで発生することが可能である。第1に、変更通知は実際にモデル・データを変更するデータ・カプセル内のメソッドから生成される。第2に、変更通知は変更を引き起こすコマンドから発生される。前に述べたように、これら2つのアプローチには利益がある。データ・カプセル内から通知を発生することはデータが変化するときにはいつでもクライアントは通知されることを保証する。コマンドからの通知の発生は、“高級”通知を可能とし、複雑な変更により生成される通知の混乱を減少させる。
【0059】
(通知フレームワーク外観)
通知フレームワークは、オブジェクト間の変更情報を伝搬するための機構を提供する。フレームワークは、オブジェクトが、それらが依存するオブジェクトに関係することを表し、オブジェクトの変更についての通知を受け取ることを可能とする。標準インターフェイスはクライアントに通知を提供するクラスのために提供される。通知者クラスはクライアントのリストを管理しそれらのクライアントに通知をデスパッチする手段を通知ソース・オブジェクトに提供する。通知者オブジェクトは通知を受け取るオブジェクトのクラスについての特別の知識を要求しない。接続オブジェクトは通知者からの通知のデスパッチを特定の通知受信オブジェクトに提供する。これらの接続オブジェクトは通知が受信者の異なるクラスにどのようにして配信されるかを特定することを可能とする。最後に、通知オブジェクトは変更について記述した情報を転送し、インタレストは通知ソース・オブジェクトを記述する。
【0060】
(通知伝搬フローチャート)
第18図は通知ソース・オブジェクトに対するオブジェクト発生識別フローチャートである。処理はターミナル1800で始まり、機能ブロック1810まですぐに通過する。そこでは、通知受信オブジェクトがそれ自身への接続を生成する。その後、機能ブロック1820で、通知受信オブジェクトは1またはそれ以上の通知ソース・オブジェクトからの1またそれ以上の通知に対して適切なインタレストを加える。これらのインタレストは通知ソース・オブジェクトにより定義される。
【0061】
クライアントオブジェクトは、機能ブロック1830において、接続の際にインタレストにより特定される通知のために通知ソースに接続するよう接続オブジェクトに依頼する。その後機能ブロック1840で、接続に際しての各インタレストについて、接続はその通知と関連するとしてインタレスト内の通知者と共に登録される。次に機能ブロック1845で、システムは変更が検出されるまで待ち状態に入る。システム変更が起きたとき、コントロールは直ちに1850まで通過し、そこで通知ソース・オブジェクトは変化し、コールがその変更を記述する通知を、その通知者に通知する。
【0062】
通知に関係する通知者と共に登録された各接続では、機能ブロック1860で、接続は通知をデスパッチするよう依頼される。次に、機能ブロック1870では、接続は通知受信者の適切なメソッドに通知をデスパッチする。最後に、機能ブロック1880で、通知受信者は通知のための適切なアクションを起こし、テストが決定ブロック1885で行われ、他の接続が通知に関係する通知者と共に登録されているか否かを決定する。他の接続が存在するときは、コントロールは1850に進む。サービスすべき他の接続が無いときは、コントロールは機能ブロック1845に進み、次の変更を待つ。
【0063】
(データ仕様)
データ仕様はデータ処理の選択を発行することを目的とする。ユーザが表現に含まれるデータを処理しなければならないとき、データはそのデータのサブセットを特定できなければならない。ユーザは一般にこの仕様を“選択”と呼び、システムはすべての選択クラスが降りたベース・クラスを提供する。本発明はまたシステムがサポートする基本的データ形式のすべてのための選択クラスを提供する。
【0064】
(モデル選択)
表現内のデータのサブセットの仕様を含むオブジェクトはモデル選択クラスである。テキスト表現の場合には、ある可能な選択仕様は一対の文字オフセットである。構造化グラフィック・モデルでは、各形状にはユニークなIDが割り当てられなければならず、選択仕様は1組のユニークなIDである。仕様のどれもが選択データを直接ポイントせず、それらをデータの多数のコピーに適用することができる。
【0065】
(特定データのアクセス)
選択は、データをアクセスし修正する表現プロトコルを理解し、ローカル・アドレス空間でデータを見つける方法を知る。コマンド・オブジェクトはデータ選択を介して表現データをアクセスし、従って仕様からローカル・モデル内のリアル・データに変換する知識を要求しない。それは選択オブジェクトの仕事であり、アドレス空間独立仕様からリアル・データへのアクセスを提供する。テキスト・カプセルでは処理はある範囲内に含まれる実際の文字に対するカプセルをクエリーすることを要求できる。グラフィック・エディタのようなベース・モデルでは、選択はリアル・オブジェクトの代用物を保持する。カプセルはリアル・オブジェクトへ代用物を変換するためのルックアップ機能を提供する。
【0066】
(標準編集プロトコル)
モデル選択クラスは選択間のデータの交換のためのプロトコルを提供する。形式ネゴシエーション、データの吸収、埋め込み、および運び出しを行うためのプロトコルを実行することにより、導かれたクラスは標準編集コマンドのほとんどのサポートを提供する。これは、システムにより提供される(カット、コピー、ペースト、データをプッシュ等の)編集コマンドが、表現されたデータ形式のために機能し、各アプリケーションの再実行を要求しないということを意味する。モデル選択クラスは、また、アンカーとリンクの交換のために直接にサポートを提供するが、表現データの交換をサポートするためいくつかのキーメソッドの導かれたクラスの実行上にある。
【0067】
CopyDataは、導かれたクラスにより実行されなければならず、特定データのコピーを運び出す。実行は特定データのコピーを含む要求され形式の新たなデータ・カプセルを生成してリターンする。
【0068】
AdoptDataは、仕様に関連する表現にデータを吸収しあるいは埋め込むことをサポートするように導かれたクラスにより実行されなければならない。データが吸収されるべきならば、それは受信者の表現に直接組み込まれることができる形式でなければならない。吸収されたデータは仕様で定義されたように表現に加えられる。多くのデータ形式に対して現在特定されているデータを新たに吸収しデータで置き換えることは共通である。いずれかの置換されたデータはアンドゥをサポートするようにデータ・カプセルに戻される。データが埋め込まれるべきならば、カプセルはブラック・ボックスとして組み込まれ、表現の子として加えられる。
【0069】
ClearDataは、関連する表現から特定されたデータをデリートするように導かれたクラスにより実行されなければならない。デリートされたデータを含む表現の元来の形式のカプセルは戻されなければならない。
【0070】
(ユーザ・インターフェイス)
仕様を生成するユーザ・インターフェイスは一般にはデータの表現の応答性である。多数の機構がデータ形式とプレゼンテーション・スタイルに基づいて使用可能である。選択を生成するための最も好ましいユーザ・インターフェイスは直接実行である。簡単なグラフィック・モデルでは、マウスでオブジェクトを直接クリックしあるいはマウス・トラッカーを用いていくつかのオブジェクトを横切って選択ボックスをドラッグすることによりオブジェクトを選択することができる。テキストでは、選択はファインド・コマンドの結果として生成することができる。選択が生成される他の共通の手法は、“ファインド”のようなメニューコマンドの結果としてである。コマンドが発行されたあと、ドキュメントは適切な場所にスクロールされ、サーチされたテキストが選択される。
【0071】
最後に、選択はスクリプトから生成され(あるいはプログラム的に発生され)る。その結果はユーザが直接選択を生成したかのようである。スクリプトのための“名称付け”選択は選択を記述するための言語を生成することを含む。例えば、テキストでは、選択は“2ページの第4節の2番目の語”である。本発明のアーキテクチャはスクリプトのためのサポートを提供する。
【0072】
(データの修正)
データ修正(Data Modeification)は質問を発する:この選択に関して動作することができるコマンドは何か?
ユーザが表現内に含まれるデータを修正すべきとき、システムはなされるべき修正の形式を正確に特定できなければならない。例えば、ワードプロセッサ・プログラムでは、ユーザは選択された範囲の文字のスタイルを変更することを望むことができる。あるいは、構造化グラフィック・プログラムでは、ユーザはグラフィック・オブジェクトの回転を望むことができる。データ・カプセルに含まれるデータを修正するすべてのユーザのアクションは、“コマンド・オブジェクト”により表現される。
【0073】
(モデル・コマンド・オブジェクト)
ユーザによりなされたコマンドを表すアブストラクト・ベース・クラスはモデル・コマンド・オブジェクトである。モデル・コマンド・オブジェクトのサブクラスはドゥ、アンドゥ、リドゥされることができるというようなユーザ・アクションの意味を捉える。これらのサブクラスはそれらを生成するために使用されるユーザ・インターフェイス技術から独立している。MacAPPと異なり、ユーザ・アクションの意味が知られるとすぐに、デバイス・イベントがシステムによりコマンド・オブジェクトに翻訳される。
ハンドル・ドゥ(HandleDo)、
ハンドル・アンドゥ(HandleUndo)、
ハンドル・リドゥ(HandleRedo)。
【0074】
新しいクラスのコマンドを生成することは多数のメソッドをオーバライド(override)することを含む。オーバライドするための最も重要な3つのメソッドは、Handledo、HandleUndo、およびHandleRedoである。HandleDoメソッドは、そのままであるコマンド形式とそのコマンドが適用される選択とに基づいて適切にデータ・カプセルを変更するように応答可能である。例えば、ワードプロセッサにおいてコマンドがある範囲の文字に対するスタイル変更を含むならば、HandleDoメソッドはこのコマンドのあとに“アンドゥ(Undo)”する必要のある情報のすべてを保存する。スタイルの変更の例では、アンドゥ(undo)情報の保存は文字範囲の旧スタイルを記録することも含む。ほとんどのコマンドに対するアンドゥ情報は保存が非常に簡単である。しかしながら、ファインドおよび変更のようないくらかのコマンドは大量の情報を記録したあとでコマンドをアンドゥすることを含む。最後に、HandleDoメソッドは、データ・カプセルになされる変更を記述する変更通知を発行する。
【0075】
HandleUndoメソッドはコマンドが“ドゥ”される(done)前にそうであった状態にドキュメントを戻す。適用されなければならないステップは上記のHandleDoでなされたステップと同様である。HandleRedoメソッドは、ドゥ(do)され、そしてアンドゥ(undo)されたあとコマンドを“リドゥ(redo)”する。ユーザはしばしばアンドゥ/リドゥ(undo/redo)の組み合わせを用いてコマンドの結果を比較して、ドキュメントの2つの状態の間をいったりきたりする。一般に、HandleRedoメソッドは、Redoメソッドにおいて、最後に導かれた情報がこのコマンドが完了したとき再使用されることがきることを除いてHandleDoメソッドと非常に近い(情報は同じであることが保証されるので、再計算する必要はない)。
【0076】
(ユーザ・インターフェイス)
コマンド・オブジェクトは、ユーザ・アクションの意味を捉える。実際、コマンドは(種々のユーザ・インターフェイス技術を用いて)ユーザにより最も多く生成されるが、同様に他の手法で生成することができる“ワーク・リクエスト”を表す。重要な概念は、コマンド・オブジェクトがデータ・カプセルに含まれるデータを修正するための唯一の手段を表すことである。データ・カプセルへのすべての変更は、無限のアンドゥの利益、保存無しのモデル、本発明の他の特徴が実現されるべきならば、コマンド・オブジェクトにより処理されなければならない。
【0077】
コマンドを発行する最も好ましいユーザ・インターフェイスは、ある種の直接操作を含む。デバイス・イベントをコマンドに翻訳し、ユーザ・フィードバック・プロセスを“ドライブ”するように応答可能なオブジェクトはトラッカーとして知られている。本発明は組込データ形式を処理するための“トラッキング・コマンド”の豊かな組を提供する。例えば、直線、曲線、多角形等のような“ピンク(Pink)”において2Dオブジェクトのすべてを回転させ、スケーリングして、動かすためのトラッキング・コマンドがある。
【0078】
コマンドを発行するための共通のユーザ・インターフェイスはメニュー・システムからあるいはコントロールを介している。メニューは生成され関連するコマンドの組がメニューに加えられる。ユーザがメニュー内の項目を選ぶとき、適切なコマンドが“クローン(複製)”され、コマンドのドゥ・メソッドがコールされる。プログラマはデバイス・イベントに巻き込まれない。さらに、コマンドはそれらが適用されることができる選択の形式が何かを知っているので、メニュー項目はそれらが適切でないとき自動的に薄暗くさせられる。
【0079】
最後に、コマンドはスクリプトから発行することができ(あるいはプログラム的に発行することができ)、その結果はユーザがコマンドを直接発行したときと同様である。“ピンク”アーキテクチャはスクリプトするためのサポートを提供する。しかしながら、この時点ではこれらのスクリプトを生成するために使用可能なユーザ・インターフェイスはない。
【0080】
(組込コマンド)
本発明は、多くのユーザ・インターフェイス・コマンドと同様に、カット、コピー、ペースト、ハイパーメディア・リンクのスタート、リンクの完了、リンクの運行、リンクに関するデータのプッシュ、リンクに関するデータのプルのためのジェネリック・コマンドを提供することに加えて、全ての組込データ形式のための多数の組込コマンド・オブジェクトを提供する。
【0081】
(他の特徴)
このドキュメントの前のセクションは、本発明の基本的な特徴に焦点を当てた。本発明には、さらに進んだ特徴を実行する多くの追加される機能がある。特に、これらの機能は、モデルベースのトラッキング(追尾)、ファイリング、アンカー、および共同作業を含む。
【0082】
(モデル・ベース・トラッキング)
トラッキング(追尾)は、直接処理ユーザ・インターフェイスの心臓部である。トラッキングにより、ユーザは、テキストの範囲を選択し、オブジェクトをドラッグし、オブジェクトを再サイズ調整し、オブジェクトを描くことが可能となる。本発明は、モデルを実際に修正することにより多数のビュー(表示)、および多数のマシンに渡る機能にトラッキングを拡張する。トラッカーは、モデルにコマンドを発行し、モデルはすべての関係するビューへ変更通知を発行する。
【0083】
モデル・ベース・トラッキングは、ドキュメント内でトラッキングするための最良の解決策であるが、それは、以下の欠点を有する。(1)モデル・ビューを、変更イベントへの急速応答を提供するように最適化しなければならない。(2)モデルは中間トラック状態を表すことができなければならない。
【0084】
(アンカー(Anchors))
持続性選択即ち“アンカー”はデータの仕様を表現する点で選択と非常によく似ている。違いは、アンカーはデータへの変更に渡って維持されるので、アンカーは編集変更を生き続けなければならない点である。ドキュメントの初期で述べたグラフィック選択の実行は持続的である。しかしながら、テキスト選択の実行はない。ユーザが選択の前にテキストを挿入しあるいはデリートするならば、文字オフセットを調整しなければならない。テキストアンカーを実行するためには2つのアプローチがある。第1に、テキスト表現は、スタイルが維持される手法と同様に、テキスト内を指すマーカーの集まりを維持する。アンカーはマーカーを参照するユニークなIDを含む。テキストが変更されたとき、マーカーはユニークにされるが、アンカーは同じままである。他のアプローチは、テキストに対する編集履歴を維持することである。アンカーは時間スタンプと同様に1対の文字位置を含むことができる。テキストが編集される毎に、履歴は更新され、変更(例えば、時間Tに位置Xからデリートされた5文字)を記録する。アンカーが使用されるとき、システムは、最後に使用されたとき以来起きた編集変更に基づいて文字位置を補正しなければならない。適切な時に、履歴は凝縮され、アンカーは永久的に更新される。
【0085】
システムは、アンカー機能を介して“フリー”のための非常に多数の特徴を提供する。ハイパーメディア・コマンドのすべて(CreateLink、PushData、PullDataおよびFollow)は、それらの実行時にアンカーを使用する。システム中の注釈機能実行時にアンカーを使用する。ベース・データ・カプセルはアンカーとリンクの追尾を保つサービスを提供する。しかしながら、ユーザは、アンカーをプレゼンテーションを介してユーザに見えるようにする。アプリケーションはまたユーザがアンカーを選択するとき適当なコマンド・オブジェクトを発行しなければならない。アンカーとリンクのためのユーザ・インターフェイスが釘付けにされたあと、ドキュメント・フレームワークは処理を簡略化するよう付加的サポートを提供する。
【0086】
(ファイリング)
ファイリングはデータを永久格納に保存しあるいは永久格納から再生するプロセスである。ユーザがファイリング作業をするためにしなければならないことは、データ・カプセルのための一連の操作を実行することのみである。本発明のデフォルト・ファイリングは”イメージ”ベースである。ユーザがドキュメントを開くとき、ドキュメントの内容全体はメモリに読み出される。ユーザがドキュメントを閉じるとき、ドキュメントの内容の全体がディスクに書き込まれる。このアプローチは、簡単で、フレキシブルで、理解しやすいので採用された。異なるフォーマットでデータを格納するためには、前もって存在する標準のファイル・フォーマットとの互換性を保つために、2つのアプローチが可能である。第1に、カプセル・クラスは実際のデータへの参照を一連の流れとすることができ、実際のデータを見つけるために参照を使用することができ、あるいは新しいサブクラスがファイル・サブクラスを生成し、リターンするように定義することができる。
【0087】
第1のアプローチの長所はデータ・カプセル型のドキュメント内でカプセル化することができることである。第2のアプローチの長所は、完全なドキュメントのための既存のファイル・フォーマットに正確に適合するようにした完全な自由である。
【0088】
(共同作業)
同時ネットワーク共同作業は、2人あるいはそれ以上の人が同時に同じドキュメントを編集することを意味する。システムはまた共同作業ポリシーを確立する。即ち、ユーザがデータを変更するときあるいは自由に変更させるとき後退させられるかどうかである。開発者は共同作業ポリシーあるいは共同作業の機構を心配する必要はない。
【0089】
(協同作業選択スタイルのサポート)
混乱の減少を助けモデル選択を増強するため、ドキュメント・アーキテクチャは協同作業者のイニシャルと望ましいハイライトの束について情報を含む協同作用者クラスを提供する。
【0090】
(多数選択のサポート)
多数の選択をサポートするために、ユーザは、各協同作業者が選択を有するのでプレゼンテーション・ビューを修正しなければならない。アクティブな協同作業者の選択が変わるとき、標準変更通知が送られる。受動的協同作業者の選択が変わるとき異なる通知イベントが送られる。ビューは両方のイベントのために登録すべきである。どちらかのイベントに応答して取られたアクションも通常同じなので、両方のイベントのために同じハンドラー・メソッドを登録することにより経済性が実現される。
【0091】
(本発明によるユーザ・インターフェイス)
本発明のこの部分は、基本的に、先に議論されたオペレーティング・システム・フレームワークの基本上に構築するユーザ・インターフェイスの観点に焦点が絞られる。ユーザ・インターフェイスの第1の観点はユーザがコントロールとして参照する種々のオブジェクトあるいはデータとの対話(相互作用)を管理することを可能とする機構である。
【0092】
(コントロール)
ユーザが他のオブジェクトあるいはデータを処理するよう対話するオブジェクトはコントロールと呼ぶ。コントロールはオブジェクトあるいはデータの現在の状態を決定するためのコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新し、それが実行されるようにする。コントロールの例はメニュー、ボタン、チェックボックス、およびらラジオ・ボタンである。
【0093】
コントロールはオブジェクトあるいはデータの現在の状態を決定するためにコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新し、それが実行されるようにする。例えば、チェックボックスはコマンド・パラメータをオンにあるいはオフにセットし、データ値を変更するためにコマンドを実行する。
【0094】
多くのコントロールはそれらが処理をするデータの現在の値を表示する。例えば、チェックボックスはブール(代数)データ値が真(TRUE)のときだけチェックを表示する。データが変わるにつれてコントロールの出現はここで述べられた通知システムを用いて日付を付けるよう保たれる。そのプロセスはメニュー項目をイネーブル/ディスエーブルするように使用されるプロセスと同様である。
【0095】
コントロールが生成されるとき、コマンドが特定される。コントロールはこのコマンドのコピーを作り、それをフィールドfCommandに格納する。コマンドがいずれかのデータ値を供給するならばコマンドの適切なゲット(Get)とセット(Set)のメソッドのポインタがまた特定される。コントロールはこれらのメソッド・ポインタをフィールドfGetMethodとfSetMethodにそれぞれ格納する。その後、コントロールはデータ値が日付以外であることを示す通知に接続する。各コマンドはこのためにコネクトデータ(ConnectData)と呼ばれるメソッドを提供する。
【0096】
各コントロールは通知を受信すべきオブジェクトとメソッドを示すfDataCommection と呼ばれる接続オブジェクトを含む。この接続オブジェクトはコマンドへのアーギュメントとして渡される。コマンド・オブジェクトは接続オブジェクトの接続メソッドをコールして、そのデータ値に影響を与えるかも知れない各通知者とインタレストを加える。完了時に、コントロールは接続オブジェクトの接続メソッドをコールして第3図に示される接続を確立する。コントロールはそのデータ値をそのコマンドから更新する。それはコマンド(fCommand->(*fGetMethod())のゲット(Get)メソッドをコールすることにより行う。第5図に示されるように、コントロールはこの値を適切なフィールドに格納する(たとえば、チェックボックスがfCheckedと名前が付けられたブール・フィールドに格納する)。その後、コントロールはその出現を更新する。画面の一部が更新を必要としていることを示して、ビュー・システムの不当化メソッドをコールすることによりこのアクションを行う。
【0097】
最後に、データの変更と通知が送られる。ある点で、コントロールにより反映されているデータの値を変更するコマンドが実行される。このコマンドは、コントロール、メニュー項目から、あるいは直接操作により実行することができる。コントロールは第4図に示される通知を受け付けて次のユーザ選択を待つように渡される。
【0098】
(コントロール・パネル)
コントロールのある集まりは、コントロール・パネルと呼ばれる。コントロール・パネル内のコントロールは一般に実際のデータに作用する(これはデフォルトであり、必要はない)。それらのアクションは通常直接的であり、互いに独立である。コントロール・パネルは必要によりコントロールの間で入力フォーカスの進行を制御する。コントロール・パネルはシステムですべてのユーザ・インターフェイスに渡って共有されるであろう。
【0099】
(ダイアログ・ボックス)
コントロールの他の集まりはダイアログ・ボックスと呼ばれる。ダイアログ・ボックス内のコントロールは一般にプロトタイプのデータに作用する(これはデフォルトであり、必要はない)。それらのアクションは通常グループ内に一緒に集められ、その後ユーザが Apply ボタンを押すとき一緒に実行される。ダイアログ・ボックスは必要によりコントロールの間で入力フォーカスの進行を制御する。
【0100】
(アクションにおけるコントロール)
3つのアクションの役割を提供して、アクションにおけるコントロールを説明する。第2図は種々のコントロールを示す。役割の例はコントロール(この場合チェックボックス)、コマンド、選択およびデータ・カプセルと似た手法により使用される。
チェックボックス200−チェックボックスの役割はデータ・カプセル内に格納されたブール値を表示して変更を容易にすることである。この値はチェックの存在不存在により表現される。
コマンド210−コマンドの役割はデータ・カプセルから値を得てチェックボックスからの方向に変更することである。
選択220−選択の役割はコマンドとデータとの間をインターフェイスすることである。
データ230−データはアクションの目標として採用される。
【0101】
(あなたを知ること)
誰でもが第3図に示されるようによりよく互いを知りたい。コマンド310はコントロールが興味があるデータがどの通知を送ることができるかをチェックボックス300に知らせる(コマンド310がどのようにして知るかは他の者に関係がない)。チェックボックス300は次に通知のためにデータ320に接続する。
【0102】
誰にも知られず、ディレクタはチェックボックス300にコマンド310と対話する最良の手法を話した。特に、それはコマンドのゲット値メソッドとセット値メソッドについて話された。チェックボックスはこの長所を少しあとで取り上げる。
【0103】
(データを反映すること)
何かがデータに起きる−それは第4図に示されるように通知を送る。チェックボックス400はインタレストを表現したそれらについて聞く。第4図では、データからの通知はチェックボックス内にXを置くことにより反映される情報を太くする(ボールドにする)ように表現する。
【0104】
チェックボックス510はデータから通知を受信してチェックボックス510を正しく表示する処理が第5図に示される。それは、知ろうとするコマンド520のゲット値メソッドを用いて行う。正しい値は何かをチェックボックス510に知らせる前に、コマンド520は選択を介してデータに行き、実際に正しい値を知っていることを確認する。チェックボックス510は必要によりそれ自身を更新する。
【0105】
(データを変更すること)
ユーザはこのシーンで、第6図に示されるようにチェックボックス600を一度押す。チェックボックス600はコマンド610のセット値メソッドを用いて選択を介してデータ620の値をセットする。全体のプロセスを第7図に再び示す。
【0106】
(アクション時のコントロール・パネル)
コントロール・パネルは第8図に示されるように一セットのコントロールを含む単なるウィンドゥである。これらのコントロールは現在の選択に作用するコマンドを含む。コントロールはコマンドがアクティブならばイネーブルされる。ユーザとの適切な対話に続いて、コントロールはコマンドを実行し、データを変更する。
【0107】
(サウンド・コントロール・パネル)
コントロール・パネルの例として第8図に示すサウンド・コントローラを考える。このコントロール・パネルはサウンドの再生を制御する4つのボタン800,802,804および806を含む。各ボタンは上記の“アクション時のコントロール”のセクションに述べられたように実行する。
【0108】
プレイ800−このコントロールはTPayコマンドである。このコマンドはある条件の下でのみアクティブで、それらの条件の下でのみコントロールをイネーブルにする。第1に、サウンドは適切なデータ・カプセル内で選択される。次にそれは既に再生中であってはならない。最後に、現在のサウンド位置は最後の前のどこかになければならない。押されたときPlayボタンはTPlayコマンドを実行して選択されたサウンドをスピーカーから出力させる。
【0109】
ステップ802−このコントロールもまた、TPlayコマンドを含む。これは何であろう。さて、これを構成しているとき以来、TPlayコマンドがそれを再生すべき期間を示すパラメータを取ることができる。ステップボタン(Stepボタン)のために、それは単一サンプルに設定される。StepボタンはTPlayボタンに対して述べたのと同じ条件の下でのみイネーブルとされる。Stepボタンが押されると、TPlayコマンドを実行して選択されたサウンドをスピーカーから出力させる。
【0110】
ストップ804−このコントロールはTStopコマンドを含む。Stopコマンドは選択されたサウンドが現在再生中であるときのみイネーブルとされる。押されたとき、StopボタンはTStopコマンドを実行して選択されたサウンドの再生を停止させ、現在のサウンド位置を開始点に設定する。
【0111】
ポーズ806−このコントロールはまたTStopコマンドを含む。しかしながらStopボタンと異なり、このTStopコマンドはサウンドを開始点に巻き戻さないよう設定される。PlayボタンあるいはStepボタンを押すと再生が中断された場所から続く。
【0112】
(アクション時のダイアログ・ボックス)
ダイアログ・ボックスは、それが一セットのコントロールを含む単純なウィンドゥであるという点でコントロール・パネルと同様である。しかしながら、選択されたデータへ作用するコントロールに変わって、それらは他のコマンドのパラメータに作用する。Applyボタンが押されるまでだけが修正されたリアル・データである。
【0113】
(カラー・エディタ)
ダイアログ・ボックスの例として第9図に示すカラー・エディタを考える。それは3つのスライダを含む。一つはカラーの赤900、一つは青910、および一つは緑920の成分のためのスライダである。スライダを望みの値に調整したあと、ユーザはアプライ930を押して選択した範囲のカラーを変更する。
【0114】
赤900,緑910,青910−ユーザにとって、これらのスライダは、ラベルを除いて同一である。すべてのコントロールと同様に、各スライダは、ユーザとの対話に続いて実行されるコマンドを含む。多くのコントロールとは異なり、特に選択されたデータにすぐに影響を与えるコントロール・パネル内のそれらと異なり、これらのスライダに含まれるコマンドは他のコマンドのパラメータ値を表示し修正する。この場合、アプライ(Apply)ボタン内に含まれるコマンドの赤、緑あるいは青のパラメータの1つである。
【0115】
アプライ930−アプライ(Apply)ボタンは、実行されるときに選択された範囲のカラーを変更するTSetColorコマンドを含む。それは3つのパラメータを有する。カラーの赤、緑および青の成分の各々に対して1つのパラメータである。これらのパラメータは表示され、ユーザとの対話に応答してスライダにより設定される。アプライ(Apply)ボタンが押されると、このコマンドが実行され新しいカラーが設定される。カラー・エディタに伴う内部アクションを例として第10図に示す。赤1000,緑1010,青1020のスライダはTFloatControlCommandを含む。これらのコマンドはコントロールが表示する単一の浮動小数点値を含む。ユーザがスライダを調整するにつれて、スライダはこの値を更新しそのコマンドを実行する。
【0116】
TFloatControlCommandの選択によりApply1040ボタン内のTSetColorコマンドが特定される。そのパラメータの1つは各TFloatControlコマンドが実行されるときに設定される。最後に、ユーザがアプライ1040ボタンを押すとき、TSetColorコマンドが実行され、選択されたカラー1050が変更される。
【0117】
(クラス)
以下のセクションはコントロールおよびダイアログ領域のクラスとそれらの基本的なメソッドを説明する。
【0118】
(コントロール)
コントロールは1またはそれ以上のコマンドへのユーザ・インターフェイスである。コントロールはその名称通りにコマンドについての情報を表示し、また、それが現在のコンテキストの中でアクティブか否かを表示する。適切なユーザとの対話に続いて、コントロールはコマンドを実行する。適切なとき、コントロールはコマンドが修正するデータの現在値を得て、それをユーザに表示する。コマンドを実行する前にこのデータの新しい値を示すコマンド・パラメータをセットすることができる。
【0119】
オプションとしてのコントロール内のコマンドの付加的仕様でコントロールについての選択を生成するメソッド。ルックアップ・コマンドは、それらがどのくらい多くのコマンドを得て、それらがどのように格納されるかについての、サブクラスにフレキシビリティを与えるための、純粋な仮想関数である。
【0120】
プレゼンテーションがオープンされクローズされるときコールされるメソッド。プレゼンテーションがオープンされるとき、コントロールはその状態に影響を与えることができる通知を接続する。プレゼンテーションがクローズされるときこれらの接続は切断される。
【0121】
プレゼンテーションが活性化されまた非活性化されるときコールされるメソッド。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ妥当な通知に接続される。プレゼンテーションの非活性化はこれらの接続を切断する。
【0122】
コントロールがイネーブルとされるかどうかに影響を与える通知者に接続しそれから切断するためにコントロールが使用するメソッド。ConnectEnabledNotifiersはコントロールがオープンされたときコマンドにより特定される通知者に接続する。DisconnectEnabledNotifiersはコントロールがクローズされるときこれらの接続を切断する。
【0123】
コントロールのデータ値のプレゼンテーションに何かが影響を与えることを示す通知を受信するメソッド。このメソッドはデフォルトにより何もしない。
【0124】
通知のためのメソッド。クリエートインタレスト(Create interest)はコントロールのインスタンスにより特定されるインタレスト(interest)を生成する。Notifyは通知を送り、インタレストを含み込むようにオーバーロード(overload)される。
【0125】
(コントロールのインタレスト)
単一の通知者はコントロールの多くのサブクラスの中で共有される。特定のコントロールインスタンス内のインタレストを表すために、インタレストは特定されなければならない。コントロールインタレストは特定のコントロールを指すポインタを含むインタレストである。このクラスはサブクラス無しで、通常そのまま使用される内部クラスである。
【0126】
(コントロールの通知)
各通知者はコントロールの多くのサブクラスの中で共有されている。コントロールがどこに通知を送るかを区別するために、通知は特定されなければならない。コントロールの通知はその通知を送ったコントロールへのポインタを含む。このクラスはサブクラス無しで通常そのまま使用される。
【0127】
(コントロールのプレゼンター)
コントロールのプレゼンターはコントロールを包むので、プレゼンテーション・データ・カプセルにより含まれることができる。それはすべてのプレゼンター・オブジェクトが提供する標準的な振る舞いを提供する。このクラスはサブクラス無しで通常そのまま使用される。
【0128】
プレゼンテーションがオープンされたときとクローズされたときコールされるメソッド。それらはデフォルトでは何もしない。サブクラスはそれが包むオブジェクトのためのこれらのメソッドを処理しなければならない。コントロールに対して、これらのメソッドは直接委任されなければならない。プレゼンテーションがオープンされたとき、コントロールはその状態に影響を与えることができる通知に接続する。クローズされるとき、接続は切断される。
【0129】
プレゼンテーションが活性化されるときと非活性化されるときコールされるメソッド。それらはデフォルトでは何もしない。サブクラスはそれが包むオブジェクトのメソッドを処理しなければならない。コントロールに対して、これらのメソッドは直接委任される。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ妥当となる通知に接続する。非活性化されるときは接続は切断される。
【0130】
(TControlSelection(コントロール選択))
コントロール選択は、コントロール・プレゼンターの中に包まれプレゼンテーションの際に格納される単一のコントロールと付加的にその中のコマンドを特定する。
【0131】
コントロール内のコマンドをアクセスするメソッド。これらはコマンドが特定されていなければ不当な値を戻す。
【0132】
(TUniControl(ユニコントロール))
ユニコントロールは、単一のコマンドを提供し、適切なユーザとの対話に続いて実行させられるコントロールのためのアブストラクト・ベース・クラスである。この形式のコントロールの例はボタンとチェックボックスである。
【0133】
コントロールにより提供され実行されるコマンドを特定するメソッド。通知が、コマンドが変更されたとき登録された接続に送られる。
【0134】
コントロールがイネーブルとされるか否かに影響を与える通知者に接続するためとそれから切断するためにコントロールが使用するメソッド。ConnectEnabledNotifiersはコントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectEnabledNotifiersは、コントロールがクローズされるときこれらの接続を切断する。
【0135】
コントロールがEnable(イネーブル)とされるべきか否かに影響を与える何かが起きたことを示す通知を受信するメソッド。更新イネーブル(UpdateEnabled)はコマンドがアクティブか否かをチェックしてイネーブル(Enable)とディスネーブル(Disable)を適切にコールする。
【0136】
コントロールのデータ値のプレゼンテーションに影響を与える通知者に接続するためとそれから切断するためにコントロールが使用するメソッド。ConnectDaTaNotifiersは、コントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectDaTaNotifiersは、コントロールがクローズされるときこれらの接続を切断する。データ値を表示しないコントロール(例えばボタン)は、何もしないようにConnectDataNotifiersをオーバライドする。
【0137】
(ボタン)
ボタンは押されるとコマンドを実行するユニコントロールである。このクラスは通常サブクラス無しで使用され、単にコマンドをセットして離れる。
【0138】
プレゼンテーションが活性化されるときと非活性化されるときにコールされるメソッド。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ適切な通知に接続する。非活性化されるときには、これらの接続は切断される。プレゼンテーションが活性化されるとき、ボタンはキー等価通知のために登録する。この接続はプレゼンテーションが非活性化されるときに切断される。
【0139】
コントロールのデータ値のプレゼンテーションに影響を与える通知者に接続しまたそれから切断してユーザを制御するメソッド。ConnectDataNotifiersはコントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectDataNotifiersはコントロールがクローズされるときこれらの接続を切断する。データ値を表示しないコントロール(例えばボタン)は何もしないように接続データ通知ConnectDataNotifiersをオーバライドする。
【0140】
(チェックボックス)
チェックボックスはブール値をセットするコマンドへのユーザ・インターフェイスである。適切なユーザとの対話に続いて、チェックボックスは、値を変更するようにコマンド・メソッドをコールしてそのコマンドを実行する。このクラスは通常サブクラス無しで使用され、単にコマンドとその値のゲッターとセッターをセットし、離れる。
【0141】
(スライダ)
スライダは、単一浮動小数点値を表示して適切なユーザとの対話に続いて変更されることを可能とするユニコントロールである。スライダの例は第9図と第10図に示した。
【0142】
(TMultiControl(マルチコントロール))
マルチコントロールはいくつかのコマンドを提供するコントロールのためのアブストラクト・ベース・クラスであり、適切なユーザとの対話に続いてそれらを変更することを可能とする。この形式のコントロールの例はラジオ・ボタンとメニューである。
【0143】
(TRadioButton(ラジオ・ボタン))
ラジオ・ボタンは2あるいはそれ以上のブール値を表示するマルチコントロールであり、適切なユーザとの対話に続いてそれらを変更することが可能となる。ラジオ・ボタンは、第11図に示すように、正確に1つのボタンが選択されるという制約を有する。紙(Paper) が選択されると、1100でその円が黒くされる。プラスチック(Plastic)が選択されると、1110でその円が選択される。両方を選択されることはできない。
【0144】
(コマンド)
コマンドは、オブジェクトへのあるいはオブジェクトのセットへのリクエストをカプセル化して特定のアクションを行う。コマンドは通常、ボタンを押すことや、メニュー項目を選択すること、あるいは直接処理のようなエンド・ユーザ・アクションに応答して実行される。コマンドは、そのアピアレンス(appearance)を決定するためにコントロールにより使用することができるそれら自身についての種々の情報(例えば、名称グラフィック、キー等価、それらがアクティブか否か)を提供することができる。サブクラスは、コマンドがアクティブか否かを決定するために、現在の選択、アクティブ・ユーザ・インターフェイス要素、あるいは他のパラメータを調べるメソッドを処理しなければならない。サブクラスは、このコマンドがアクティブか否かに影響を与えることができる通知インタレストを戻すようにゲット・アクティブ・インタレストをオーバライドしなければならない。
【0145】
第12図は本発明による詳細論理を描くフローチャートである。フローチャート論理は1200に進み、コントロールは機能ブロック1210にまで直接渡される。そこでコマンド・オブジェクトはメニューに加えられる。この機能ブロックにより実行されるステップは、(1)コマンドからメニュー項目を生成するステップ、ここでメニュー項目はコマンドを含む他のオブジェクトデータ構造であるステップ、(2)メニュー項目のリストにあるメニュー項目を追加するステップ、および(3)メニューのアピアレンスが不当であることをデータ構造fValidにマークするステップである。その後、メニューがプルダウンされると、アピアレンスはシステムの状態に基づいて再計算される。
【0146】
各メニューはビューである。ビューはサイズと位置の情報を含む。各メニューはメニュー項目のリストを含む。各メニュー項目は現在のアピアレンスを反映するコマンドと変数を含む。変数は、メニュー項目がイネーブルであるか否か(Boolean fEnabled)、その名称(TTextLabel fName)、そのグラフィック(TGraphicLabel fGraphic)、およびそのアピアレンスが現在妥当か否か(Boolean fValid)を含む。これらの変数の各々は、メニュー項目がいつ生成されたかをコマンドに訊ねることにより決定される。
【0147】
次に、クエリーは、機能ブロック1220に示されるように、通知インタレストためのコマンド・オブジェクトに送られる。各コマンドは異なる形式の通知に接続する4つのメソッドを有する。i)その名称に影響を与える通知、ii)グラフィックに影響を与える通知、iii)コマンドがアクティブか否に影響を与える通知、およびiv)いずれかのデータに影響を与える通知である。この場合、コマンドのために生成されたメニュー項目はアクティブな通知に接続する。それは接続オブジェクトをConnectActiveに渡すことにより行う。コマンドはその後、コマンドがアクティブか否に影響を与える通知者に接続オブジェクトを接続する。その後、コントロールは機能ブロック1230に通され、メニュー項目を描くことが必要なときイネーブルな状態のコマンドをクエリーする。メニュー項目を描くために、メニュー項目はそのコマンドのためにメソッド“IsActive”をコールする。そのコマンドは、それが望むシステム状態がなんであるかを見て、決定ブロック1240に示されるように、現在のコンテキスト内でそれがアクティブか否かを戻す(例えば、いくつかのコマンドは、特定の形式のウィンドゥが正面にあるとき、あるいは特定の形式のオブジェクトが選択されるときにのみアクティブである)。その後、メニュー項目は機能ブロック1250および1260に示されるように、コマンドにより戻される値にマッチするように、その内部状態(各メニュー項目内のブール値)とアピアレンスを更新する。
【0148】
ユーザ・アクションが入力ブロック1270に示されるようにコマンドを含むときは、ユーザは常にコマンドが処理されるようにする。これはメニュー項目、コントロール、あるいはオブジェクトの直接処理を介して行うことができる。このアクションは、機能ブロック1280に示すようにドキュメント状態が修正されるようにする。ドキュメントが通知を送るとき、以下のステップが実行される。(1)ドキュメントにより送られた通知に接続されたいずれかのメニュー項目(あるいは他のコントロール)は、通知メッセージを受信する。このメッセージはその通知に送られたオブジェクトへのポインタと共に変更の名称を含む。(2)その後メニュー項目はその状態を更新する。コントロールは更なる処理のため機能ブロック1230に戻される。
【0149】
第13図は、本発明による表示を示す。メニュー項目は編集(Edit)1300であり、関連付けられた多数のサブメニュー項目を有する。アンドゥ(Undo)1310は、アクティブメニュー項目であり、関連する機能を実行するように選択することができる。リドゥ(Redo)1320は非アクティブであり、灰色で提供され、この時点では選択することができない。チェックボックスはまた、デバッグ用コントロール・パネル1350の一部として1360に示されている。
【0150】
(プレゼンテーション・テンプレートと持続性)
データプレゼンテーションはテンプレートから生成され、ユーザ・インターフェイス・オブジェクト内の期間保存される。すべてのデータを有するものはシステム内ではモデルである。モデルはデータの処理を含み実行する。データ交換は、カット、コピー、ペースト動作を介して実行される。データの参照は、選択、アンカーおよびリンクにより提供される。データ・モデルは他の中に埋め込むことができる。ユーザは、関連するユーザ・インターフェイスにより提供されるプレゼンテーション(例えば、アイコン、寸描、フレーム、ウィンドゥ、ダイアログ、コントロール・パネル)を介してモデルと対話する。データ・モデルはすべてのプレゼンテーションを生成し、他のオブジェクトへのアクセスメソッドを代理し、ユーザ・インターフェイスと呼ばれる。
【0151】
ユーザ・インターフェイスは特定のモデルのためのプレゼンテーションの組、例えばアイコン、寸描、フレーム、ウィンドゥを含むモデルである。要求されるとき、プレゼンテーションは望ましいプレゼンテーションの形式、ユーザ名、場所、他の基準とに基づいて既に生成されているものから選択される。望ましいプレゼンテーションが見つからないとき、新しいプレゼンテーションを生成して関連するアーカイブ(保管所)から1つをコピーすることにより、ユーザ・インターフェイスに加える。プレゼンテーションは持続的プレゼンテーション情報(例えば、ウィンドゥサイズ場所、およびスクロール位置)がもはや要求されないときにはデリートされてもよい。
【0152】
プレゼンテーションは、データを見て処理するために使用されるユーザ・インターフェイス要素(例えば、メニュー、ウィンドゥ、ツール)を包むプレゼンテーション可能なオブジェクトのセットを含む。プレゼンテーションはこれらのオブジェクトが提供するデータへの参照を提供する。プレゼンテーションは、プレゼンテーションが活性化されるときプレゼンテーション可能なオブジェクトをインストールしあるいは活性化する。同様に、これらのオブジェクトはプレゼンテーションが非活性化されるときに除かれ、あるいは非活性化される。プレゼンテーションはその目的に従って同定され、(例えばアイコン、寸描、フレーム、ウィンドゥ)、後の選択のためまだ決定されるべき基準(例えばユーザの同一性)を保持する。
【0153】
プレゼンテーションは、プレゼンテーションがオープンされるときあるいはアクティブであるときに画面上に表示され、あるいは他に使用可能なプレゼンテーション可能なオブジェクトの集まり(例えばユーザ・インターフェイス要素)から構成される。
【0154】
プレゼンテーションは、アーカイブ(保管所)に含まれるテンプレート・プレゼンテーションから生成される。これらはユーザ・インターフェイス要素のようなオブジェクトから構成され、順にそれらはグラフィックとテキスト・ストリングのようなより小さいオブジェクトから構成される。
【0155】
アーカイブはユーザ・インターフェイス要素(例えばウィンドゥ、メニュー、コントロール、ツール)とプレゼンテーション(例えば、アイコン、寸描、フレーム、ウィンドゥ)を含むテンプレート・オブジェクトを有するモデルである。
【0156】
(ダイアログ・ボックスとコントロール・パネル)
コマンド・オブジェクトを異なる手法で用いることにより、コントロール群の2つの独立した振る舞いを制御することができる。第1は、それらが直ちにデータに影響を与えるか否か、あるいは設定が効果を上げる前に、ユーザがOKを押さなければならないか否かである。第2はそれらが互いに独立か否か、あるいは設定が原子動作を提供するか否かである。
【0157】
コントロールはコマンドを含む。ユーザがコントロールを処理するとき、コントロールはコマンド内にパラメータをセットしてそれが実行されるようにする。コマンドは選択により特定されるモデル・データに作用する。
【0158】
(イミーディエイト)
データにすぐに影響を与えるコントロールは、リアル・モデル・データを特定する選択を含むコマンドを有する。ユーザがコントロールを処理するときコマンドはこのデータを変更する。データが変わるとき、それは変更通知を送り、データの状態に依存するビューとコントロールは正確に現在の状態を反映する。
【0159】
(遅延)
リアル・データを変更しないよう設計されたコントロールは代わりにプロトタイプのデータに作用しなければならない。リアル・モデル・データはユーザがOKボタンを押すような他のアクションを取るまで変更されない。これは2つの手法で達成される。
【0160】
コントロールはコントロールそれ自身を特定する選択を含むコマンドを含む。ユーザがコントロールを処理するとき、コマンドはコントロールの値を変更するが、他のモデル・データを変更させない。ユーザがOKボタンを押すと、OKボタン内のコマンドは、ユーザが処理した各コントロール内の値に一致するようにリアル・モデル・データを変更する。
【0161】
コントロールは、OKボタンにより含まれるコマンドのパラメータを特定する選択を含むコマンドを有する。ユーザがコントロールを処理するとき、コマンドはOKボタンのコマンドを変える。ユーザがOKボタンを押すとき、OKボタンのコマンドはそれ自身に含まれる値を一致させるようにリアル・モデル・データを変更する。
【0162】
(独立)
互いに独立に動作するコントロールはコントロール・パネルあるいはダイアログ期間が完了した後、個々にアンドゥできるアクションを要求し表現する。これはコントロールにより実行された場合の、コマンドの通常の振る舞いである。
【0163】
(原子)
コントロールの他のセットは一緒に働き、原子動作としてアンドゥされ、リドゥされるように設計される。これは、ダイアログ・ボックスあるいはコントロールが開始されるときアンドゥ・スタック上にマークを置くことにより達成される。終了したとき、コントロール・パネルを解散させることによりあるいは(上記IIBのように)ユーザがOKボタンを押すときに、マークがアンドゥ・スタック上に置かれたときから実行されるコマンドのすべてが単一のコマンド群に集められる。この群は単一群としてアンドゥあるいはリドゥされることができる。
【0164】
(キャンセル)
(上記IIBのように、通常OKボタンに伴う)CANCEL(キャンセル)ボタンを含むコントロール・パネルは、上記IIIBで述べた技術と同様な技術である。マークは、ダイアログ・ボックスあるいはコントロール・パネルが開始されるときアンドゥ・スタック上に置かれる。ユーザがCANCELボタンを押すと、マークがアンドゥ(Undo)・スタックに置かれる前のすべてのコマンドがアンドゥ(Undo)される。この技術はコントロールがデータに直ちに影響を与えるか否かにかかわらず働く。
【0165】
(ダイアログ・ボックス内での原子コマンドの実行)
他のオブジェクトあるいはデータを処理するようユーザが対話するオブジェクトはコントロールと呼ぶ。コントロールの例は、メニュー、ボタン、チェックボックス、およびラジオ・ボタンである。各コントロールはコマンドを含み、それはエンド・ユーザ・アクションを実行する。コマンドは選択オブジェクトにより特定されるデータに作用する。ユーザがコントロールを処理するとき、それはコマンド内にパラメータをセットしてそれが実行されるようにする。このようにして、データ値を変更する。
【0166】
互いに独立に働くコントロールは、コントロール・パネルあるいはダイアログ期間が完了したあと、個々にアンドゥされることができる表現アクションを要求する。これは、コマンドがコントロールにより一旦実行されたとき通常の振る舞いである。他の組のコントロールは共に動作するように設計され、原子動作に従ってアンドゥされリドゥされるべきである。これはこの特許の主題である。
【0167】
原子実行の詳細な論理は第14図に提供されるフローチャートに示される。処理は端子1400に進み、コントロールは機能ブロック1410にすぐに通され、ダイアログ・ボックスが活性化される。ダイアログ・ボックスが活性化されるとき、マークはアンドゥ・スタック上に置かれる。アンドゥ・スタックはユーザが実行したすべてのコマンドのリストである。アンドゥが押されると、スタックの最上部のコマンドがアンドゥされる。すぐにリドゥされなければ、捨て去られる。その後、機能ブロック1410で、コントロールのユーザ処理が検出される。コントロールの処理が機能ブロック1430で述べたように適切にコマンドのデータ値を変更して、コントロールを実行する。例えば、チェックボックスは0と1の間でコマンドのfチェック(fChecked)フィールドを行き来する。最後に、コマンドはアンドゥ・スタック上に記録され、機能ブロック1440に示されるように、続いてアンドゥされることができる。
【0168】
判定ブロック1450で検出されるように、ユーザが続いてダイアログ・ボックス内の各コントロールを処理すると、コントロールは機能ブロック1430に進む。しかしながら、判定ブロック1460で検出されるように、ユーザがOKボタンを押したときは、コントロールは機能ブロック1420に進む。最後に、ダイアログ・ボックス内の各コントロールがユーザの満足に達したとき、ユーザはOKボタンを押す。マークが機能ブロック1440でアンドゥ・スタック上に置かれて、以来実行されたすべてのコマンドは単一のコマンド群内に集められ、機能ブロック1470で示されるようにアンドゥ・スタック上に戻される。コマンド群は多くのコマンドを一緒に集めるコマンドである。実行され、アンドゥされ、あるいはリドゥされるとき、コマンド群は順番に各コマンドを実行し、アンドゥし、あるいはリドゥする。コマンド群は、その後、単一原子動作としてアンドゥされあるいはリドゥされることができるアンドゥ・スタック上に戻される。
【0169】
(ダイアログ・ボックス内の遅延されたコマンド実行)
ユーザが他のオブジェクトあるいはデータを処理するように対話するオブジェクトは、コントロールと呼ばれる。コントロールの例はメニュー、ボタン、チェックボックス、ラジオ・ボタンである。各コントロールはコマンドを含み、それはエンド−ユーザのアクションを処理する。コマンドは選択オブジェクトにより特定されるデータに作用する。ユーザがコントロールを処理するときそれはコマンド内にパラメータをセットしてそれが実行されるようにする。これにより、データ値が変更される。ユーザが他のアクションを実行するまでデータが遅延して変更されることは、本発明の1つの特徴である。例えば、ダイアログ・ボックス内のコントロールはユーザがOKボタンを押すまで、データ値を変更しようとしない。
【0170】
コントロールが生成されるときコマンドが特定されなければならない。コントロールはこのコマンドのコピーを作りそれをフィールドfCommandに格納する。コマンドが何らかのデータ値を供給するならば、コマンドの適切なゲット(Get)メソッドとセット(Set)メソッドへのポインタがまた特定されなければならない。コントロールはこれらのメソッド・ポインタをfGetMethodとfSetMethodのフィールドにそれぞれ格納する。コマンドにより修正されるデータは選択オブジェクトにより特定される。通常、この選択オブジェクトはリアル・モデル・データを特定する。代わりに、OKボタンのコマンド内のデータ値を特定する選択オブジェクトであってもよい。
【0171】
ユーザがコントロールを処理するとき、コントロールのコマンドが実行されOKボタンのコマンド内のデータ値が変更される。ユーザがダイアログ・ボックス内の各コントロールを処理するとき、コントロールコマンドが実行されて、OKボタンのコマンド内のデータ値が変更される。このようにして、ユーザがOKボタンを押すと、OKボタン内のコマンドがコントロールのコマンドにより処理されるようにそれ自身内に含まれるデータ値に一致するようにリアル・モデル・データを更新する。この処理はコントロールの処理が完了するまで繰り返される。
【0172】
(ラベル)
ラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。それらはウィンドゥ、メニュー、ボタン、および他のコントロールを同定するために使用される。ラベルはそれらのコンテナの状態に従ってそれらの外見を変えることができる。それらは中間明度の灰色のバックグラウンド上に描かれ、特別の状態を表示する必要のないときに自然に現われる。ラベルは、非アクティブのとき、禁止されているとき、あるいは選択されたとき、その外見を変える。
【0173】
(非アクティブ)
ウィンドゥ・タイトルはウィンドゥが正面最上部でないとき非アクティブにセットされる。同様に、コントロールのラベルはコントロールが正面最上部のウィンドゥあるいはコンテナ内にないとき非アクティブにセットされる。グラフィック・ラベルは、薄暗く出現させるために、非アクティブのとき55%の白と混ぜられている。テキスト・ラベルでは、非アクティブペイントはHSVカラー・モデルの飽和成分を処理することにより自然のペイントから導かれる。飽和は、非アクティブのとき0.45倍される。
【0174】
(禁止(ディスエーブル))
コントロール・ラベルはコントロールが特定のコンテキスト中で適用しないときには薄暗くされる。グラフィック・ラベルは非アクティブのときには薄暗くするため46%の白と混ぜられている。テキスト・ラベルでは、禁止ペイントはHSVカラー・モデルの飽和成分を処理することにより自然のペイントから導かれる。飽和は、禁止のときに0.54倍される。
【0175】
(選択)
コントロール・ラベルはコントロールが処理されるにつれてハイライトにされる。グラフィックとテキストはそれらの自然状態で描かれ、ハイライト状態のときに白いバックグラウンド上に描かれる。
【0176】
(スマート・コントロール・ラベル)
コントロールはオブジェクトあるいはデータの現在の状態を決定するためのコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新してそれが実行されるようにする。例えばチェックボックスはコマンド・パラメータをオンあるいはオフにセットして、そのコマンドを実行してデータ値を変更する。コントロールはその機能を示すようにラベルを表示する。このラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。コントロールが状態を変えるとき、ラベルは、開発者が付加的なコードを書くことを要求することなく自動的にその出現を変える。これらの状態は、アクティブ/非アクティブ、イネーブル/ディスエーブルおよび選択/非選択を含む。
【0177】
第15図はスマート・ラベル処理と関連する詳細論理を示し、その処理は開始ターミナル1500に進む。そこでは、コントロールはスマート・ラベルの初期化のためすぐに1510に進む。コントロールが生成されるとき、そのラベルはその関連するコマンドにより提供されるテキスト・ストリングあるいはグラフィックで初期化される。各コマンドはこの目的のためGetGraphicとGetNameと呼ばれるメソッドを提供する。コントロールはメソッドSetActiveをコールすることにより現在アクティブか非アクティブかをラベルに知らせる。同様に、コントロールはSetEnabledメソッドをコールしてそれがイネーブルであるか否かをラベルに知らせる。また、SetSelectedメソッドをコールしてユーザにより現在選択されているか否かをラベルに知らせる。
【0178】
スマート・ラベル処理での次のステップはラベルが描かれるとき機能ブロック1520で起きる。コントロールが活性化されているとき、それはそのラベルの描写(Draw)メソッドをコールしてラベルをその画面上に出現させる。非アクティブならばラベルは通常よりも薄暗く描かれる。これはHSVカラー・モデルの飽和成分を処理することによりなされる。飽和は非アクティブのとき0.45倍される。ディスエーブルならば、ラベルは通常よりも薄暗く描かれる。これはHSVカラー・モデルの飽和成分を処理することによりなされる。飽和はラベルがディスエーブルのとき0.54倍される。選択されたならば、ラベルはハイライトされたバックグラウンド上に出現させられる。ラベルは通常、中間色グレーのバックグラウンド上に描かれる。ハイライトされるときラベルは白いバックグラウンド上に描かれる。他には、ラベルは通常通り描かれる。
【0179】
次の処理はラベルが機能ブロック1530に示されるように活性化されている/非活性化されているとき起きる。コントロールが活性化されているあるいは非活性化されているとき、それはSetActive メソッドをコールしてラベルに知らせる。コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきで無効化(Invalidate)をコールすることによりその出現を更新することが必要であることを示す。その後、機能ブロック1540で、処理はコントロールがイネーブルあるいはディスエーブルされるとき起きる。コントロールは、イネーブルあるいはディスエーブルされるとき、SetEnabledメソッドをコールすることによりラベルに知らせる。その後、コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきで無効化(Invalidate)をコールすることによりその出現を更新することが必要であると示す。
【0180】
テストが判定ブロック1550で実行され、コントロールが選択されているか非選択であるかを判定する。コントロールが選択されあるいは非選択であるときは、SetSelected メッソドをコールすることによりラベルに知らせる。その後、コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきでInvaliate(無効化)をコールすることによりその出現を更新することが必要であると示し、コントロールは更なる処理のため機能ブロック1520に進む。
【0181】
(スマート・ウィンドゥ・ラベル)
タイトルはその目的を示すためにウィンドゥ内に表示される。例えばドキュメントを編集するためのウィンドゥのためのタイトルは通常ドキュメントの名称である。ラベル・オブジェクトはタイトルの追尾を保つために使用される。このラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。ウィンドゥが状態を変えると、ラベルは、開発者が付加的なコードを書くことを要求することなく、その出現を自動的に調整する。ウィンドゥはアクティブあるいは非アクティブのどちらかである。スマート・ウィンドゥ・ラベル処理は第16図のフローチャートで示され、その詳細論理はそれを参照して説明される。
【0182】
第16図の処理はターミナル1600に進み、そこでコントロールはタイトルが初期化されるべきために機能ブロック1610にすぐに進む。ウィンドゥ・タイトルはウィンドゥが生成されるとき開発者により特定される。このタイトルはfTitleと呼ばれるTLabelオブジェクト内に格納される。コントロールは、メソッドSetActive をコールしてアクティブかあるいは非アクティブかをタイトルに知らせる。その後機能ブロック1620に進む。ウィンドゥが描かれるとき、そのfTitleオブジェクトのDrawメソッドをコールしてタイトルが画面上に出現するようにする。非アクティブのときタイトルは通常より薄暗く描かれる。これはHSVカラー・モデルの飽和成分を処理することによりなされる。飽和はラベルが非アクティブのとき0.45倍される。他の場合には、タイトルは通常通り描かれる。
【0183】
次のステップはタイトルが機能ブロック1630で活性化されている/非活性化されているとき処理される。ウィンドゥが活性化されているあるいは非活性化されているとき、それはSetActiveメソッドをコールしてそのfTitleオブジェクトに知らせる。その後、ウィンドゥは、再描画される必要がある画面の一部を示すアーギュメントつきでInvalidateをコールすることによりその出現は更新することが必要であると示す。その後、その新しい状態を反映するようにタイトルを再描画するためにコントロールは機能ブロック1620に戻る。
【0184】
(デコレーション)
ユーザ・インターフェイス要素の多くの視覚的測面は、多くの要素間で共通である。例としてシャドウ、境界、およびラベルがある。個々の可視的特徴はデコレーションとして参照される。デコレーションは他のグラフィックスと結合されてウィンドゥとコントロールのような特定のユーザ・インターフェイス要素の可視的形状を形成する。本発明の主題は多くのことなる形式のデコレーションをサポートすることである。
【0185】
(バックグラウンド)
他のオブジェクトの後ろに描かれるデコレーションはバックグラウンドと呼ばれる。1つの形式のバックグランドは周囲の描画面とフラッシュするように描かれる。それはフレームつきであるいはフレーム無しで描かれてもよい。他の形式のバックグランドはハイライトとシャドウつきで描かれ、それは回りの描画面から持ち上げられているように見える。最後の形式のバックグランドはハイライトとシャドウつきで描かれ、それは周囲の描画面より後退して見える。
【0186】
これらのバックグランドの使用例はボタンである。通常ボタンを述べるテキストあるいはグラフィックは持ち上がったバックグランドの上に描かれる。ユーザにより押されると、テキストあるいはグラフィックは後退したバックグランド上に再描画される。他のウィンドゥがアクティブのときのようにボタンが非アクティブならば、ボタンのテキストあるいはグラフィックはフラッシュ・バックグランド上に薄暗く描かれる。
【0187】
(境界)
他のオブジェクトあるいはエリアを囲むデコレーションは境界と呼ぶ。境界の例はフレームとシャドウである。フレームはリアル・ワールド内でのペイントを包み込むフレームのように他のグラフィックを囲む境界である。バックグランドのように、フレームは、周囲の描画面よりしたに後退したように、フラッシュするように、あるいはそれより持ち上がったように描くことができる。シャドウはオブジェクトの回りにシャドウを加える特定の形式の境界であり、周囲面より浮いているかのようにそれを見せる。
【0188】
ユーザ・インターフェイス要素の多くの視覚的測面は、多くの要素間で共通である。例としてシャドウ、境界、およびラベルがある。これらの個々の視覚的特徴の各々はデコレーションとして参照される。デコレーションは他のグラフィックスと結合されてウィンドゥとコントロールのような特定のユーザ・インターフェイス要素の視覚的形状を形成する。あるデコレーションはハイライトとシャドウを用いて周囲描画面より上にあるいは下にあるかのように見せる。デコレーションはこれらのハイライトとシャドウのペイントを自動的に導くことができる。
【0189】
(塗りつぶし(Fill Paint))
塗りつぶしはデコレーションの基本的カラーを表す。すべての他のペイントは塗りつぶしから導かれる。塗りつぶしはfFillPaintと呼ばれるカラー・フィールド内に管理者により格納される。塗りつぶしは通常、デコレーションが生成されるときに作成者により特定される。しかしながら、カラーが特定されないと、中間色グレーが選択される。
【0190】
(フレーム・ペイント(Frame Paint))
フレーム・ペイントはデコレーションの回りに線を描くために使用され可視的なコントラストを提供する。フレーム・ペイントはfFramePaintと呼ばれるTColorのフィールド内にデコレーションにより格納される。フレーム・ペイントはデコレーションが生成されるとき開発者により特定されてもよい。しかしながら、フレーム・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはHSVカラー・モデルの飽和と値成分を処理することによりなされる。飽和は最大値が1として、4倍される。値は4で割られる。
【0191】
(ハイライト・ペイント(Highlight Paint))
ハイライト・ペイントは、オブジェクトが実際の3次元オブジェクトであるならば光がそのオブジェクトにあたる線を描くために使用される。ハイライト・ペイントはfHighlightPaintと呼ばれるTColorフィールド内にデコレーションにより格納される。ハイライト・ペイントはデコレーションが生成されるとき開発者により特定されてもよい。しかしながら、ハイライト・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはHSVカラー・モデルの飽和と値成分を処理することによりなされる。飽和は0.8倍される。値は最大値を1として、1.25倍される。
【0192】
(シャドウ・ペイント(Shadow Paint))
シャドウ・ペイントは、オブジェクトが実際の3次元オブジェクトであるならば光がそのオブジェクトにあたる線を描くために使用される。ハイライト・ペイントはfHighlightPaintと呼ばれるTColorフィールド内にデコレーションにより格納される。ハイライト・ペイントはデコレーションを生成するとき開発者が特定してもよい。しかしながら、ハイライト・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはHSVカラー・モデルの飽和と値成分を処理することによりなされる。飽和は0.8倍される。値は最大値を1として、1.25倍される。
【0193】
(セマンティックからの入力シンタクスの分離)
グラフィック・ユーザ・インターフェイスはマウスを動かし、それらを選択するためにオブジェクトをクリックし、移動またはコピーのためにオブジェクトをドラッグし、その後それらをオープンするためにダブル・クリックすることにより処理される。これらのオペレーションは直接操作あるいは対話と呼ばれる。マウスをユーザが押し、動かし、離すことに対応するイベントのシーケンスは入力シンタクスと呼ばれる。あるイベント・シーケンスは、セマンティック・オペレーションと呼ばれる特定のアクションを示すために使用される。
【0194】
セマンティック・オペレーションを処理するコードから入力シンタクスを理解するためのコードを分離することは本発明の主題である。この処理は対話(Interacts)と対話可能(Interactable)と呼ばれるオブジェクト内にそれぞれ埋め込まれる。第17図はオブジェクトがどのようにして生成され、動かされ選択されることができるオブジェクトとの一般的な対話の間でどのように互いに通信するかを示す。
【0195】
処理はターミナル1700に進み、そこでコントロールは機能ブロック1710にすぐに通され、マウス・ボタンが押されたかどうかを決定する。マウス・ボタンが押された位置で画面の一部に対して応答可能なオブジェクトにイベントが送られる。このオブジェクトはビュー(View)と呼ばれる。その後、機能ブロック1720で、インタラクタ(Interactor)が入力シンタクスを説明するために生成される。これはビューのメソッド・インタラクタ生成(CreateInteractor)をコールすることによりなされる。インタラクタ(Interactor)が生成されると、可能なユーザ・アクションを実行するオブジェクトへのポインタがパラメータとして渡される。
【0196】
この議論のために、ユーザが、選択され動かされることができるオブジェクト上でマウス・ボタンを押したとする。この場合、選択を実行するオブジェクトと目標オブジェクトに向かって移動するオブジェクトとがパラメータとしてインタラクタ(Interactor)に渡される。初期のビュー(View)はこれらの振る舞いの両方を実行することができるであろう、あるいはそれらは1つあるいは2つの別のオブジェクトにより実行されることができるであろう。オブジェクトあるいは複数のオブジェクトは対話可能(Interactable)と統括的に呼ばれる。
【0197】
インタラクタ(Interactor)は機能ブロック1730で開始される。この処理はインタラクタ(Interactor)Viewに戻してインタラクタ(Interactor)の処理を進める。これはInteractorStartメソッドをコールしてパラメータとして初期マウス・イベントを渡すことによりなされる。Start メソッドはfInitialEventに初期マウス・イベントを保存する。インタラクタ(Interactor)は変数fIntercationTypeを定数kSelectにセットすることにより選択(Select)モードにはいる。それはそのSelectBeginメソッドをコールすることにより選択動作を開始するようインタラクタブル(Interactable)に依頼する。
【0198】
その後、インタラクタ(Interactor)は、短い時間待って、機能ブロック1740で示されるように、通過する。新しいマウス・イベントが、マウスの現在の状態を示す時間となったとき、インタラクタ(Interactor)に送られる。その後、システムはマウスが判定ブロック1750でまだ押されていることを検出すると、コントロールは機能ブロック1740にまで通される。他に、コントロールはターミナル1760に通される。マウス・ボタンがまだ押されていれば、インタラクタ(Interactor)はまだ正しい状態にあると確信して、Interactableに正しい操作を実行するよう依頼する。インタラクタ(Interactor)はfInteractionがkSelectionであれば、Selecting (選択中)である。fInteractionTypeがkMoving であれば、それはMoving(移動中)である。
【0199】
選択(select)中ならば、インタラクタ(Interactor)は現在のマウス位置と初期マウス位置を比較する。現在のマウス位置はGetCurrentLocationをコールすることにより得られる。初期マウス位置はGetInitialLocationをコールすることにより得られる。2つが同じかあるいは多少しか異ならなければ、ユーザはまだオブジェクトを選択している。その後、インタラクタ(Interactor)は、そのSelectRepeatメソッドをコールすることにより選択操作を継続するようInteractableに依頼する。しかしながら、2つの点が予め決められたスレッシュホールド以上に異なるときには、ユーザはオブジェクトを動かし始めている。この場合、インタラクタ(Interactor)はそのSelectEndメソッドをコールすることにより選択操作を終了するようInteractableに依頼する。その後、その移動開始メソッドをコールして移動動作を始めるようにInteractableに依頼する。各々の場合、現在のマウス位置は引数(argument)として渡される。Moving(移動中)ならば、インタラクタ(Interactor)はMoveRepeatをコールして移動動作を継続するようインタラクタブルInteractableに依頼する。それは引数(argument)として現在のマウス位置を渡す。
【0200】
ユーザがマウス・ボタンを離すとき、それは現在の動作の終了を知らせる。Selecting(選択中)ならば、インタラクタ(Interactor)は、そのSelectEndメソッドをコールして選択動作を終了するようInteractableに依頼する。移動中ならば、インタラクタ(Interactor)はそのMoveEndメソッドをコールして移動動作を終了するようInteractableに依頼する。
【0201】
(局所化プレゼンテーション)
局所化はアプリケーションを更新するプロセスであり、特定の場所のユニークな表現に従う。それは、言語の翻訳、グラフィック置換、およびインターフェイス要素の再配向を含む。例えば、ラベル、タイトル、およびメッセージの中で使用されるテキストは選択された言語に依存する。その方向と配向はメニュー、メニュー・バー・タイトル、スクロールバーあるいはツールバーの配置と配向に影響を与える。同様に、アイコンと他のグラフィックシンボルの選択は開発に依存する。不幸にも、メモリ内にユーザ・インターフェイス要素の多くの局在化されたバージョンをもつことは非常に高いものとなる。代わりに、ユーザ・インターフェイス要素の局在化バージョンは、メモリ内で要求されるまでディスク上に保たれる。
【0202】
さらに、ユーザ・インターフェイス要素のすべての追尾を保ち、どのバージョンが使用されるべきかを決定することは非常にエラーとなりやすく高価である。代わりに、ユーザ・インターフェイス要素が要求されるとき適切なものが現在の言語と他の文化的パラメータに従ってシステムにより自動的に選択しメモリに読み込む。
【0203】
一旦局所化されると、ユーザ・インターフェイス要素はディスク・ディクショナリ内に格納される。ディスク・ディクショナリは、キーに与えられるとき、それをディスク内にあるいはディスクから読んだあとに値を戻るオブジェクトである。このディスク・ディクショナリは保管所(アーカイブ)と呼ばれるオブジェクトにより管理される。アーカイブは特定の表現を構成する個々のユーザ・インターフェイス要素を一緒に置く。適当なユーザ・インターフェイス要素の選択のプロセスは第19図に提供される。
【0204】
処理はターミナル1900に進み、ユーザがプレゼンテーションをリクエストするときすぐに機能ブロック1910に通される。TOpenPresentationCommandはデータ・モデルに送られ、ユーザがこのデータをビューあるいは編集したいということを示す。このコマンドはTOpenPresentationCommand呼ばれる。プレゼンテーションはユーザがあるデータをビューしあるいは編集することを可能とするユーザ・インターフェイス要素の組である。プレゼンテーションはユーザ・インターフェイス・オブジェクト内の期間に渡って格納され、このようにしてユーザのために連続性を維持する。ユーザ・インターフェイス要素はメモリ内で必要となるまでディスクに格納される。それらはユーザがリクエストしたデータプレゼンテーションの一部として要求され、あるいは翻訳あるいは他の局所化プロセスのために必要とされることがある。各ユーザ・インターフェイス要素はその要素をユニークに参照するIDを含む。しかしながら、同じユーザ・インターフェイス要素のすべての局在化バージョンは単一のIDを共有する。
【0205】
局在化バージョンを異ならせるために、特定の言語、記述方向、および他の文化的パラメータが各局在化されたユーザ・インターフェイス要素と共に格納される。一緒に、これらのパラメータは場所として参照される。ユーザ・インターフェイス要素のすべてはファイルに格納される。このファイルは1つあるいはそれ以上のキー/値の対付きで、ディクショナリと同様に組織化される。そのキーはIDと場所を結合するオブジェクトである。値はユーザ・インターフェイス要素それ自身である。
【0206】
新しいプレゼンテーションが機能ブロック1920で次に生成されなければならない。適切なプレゼンテーションは既に存在しないので、新しいものがユーザ・インターフェイス、アーカイブによりテンプレートから生成されなければならない。新しいプレゼンテーションはそのCreatePresentationメソッドをコールすることによりアーカイブの中に格納されるテンプレートから生成される。プレゼンテーションの形式はパラメータとしてこのメソッドに渡される。この形式は、表示されるべきデータの形式、それがそれ自身のウィンドゥあるいは他のプレゼンテーションの一部の中に存在すべきか否か等の情報を含む。最後に、機能ブロック1930で、アーカイブは場所に従ってユーザ・インターフェイス要素を選択して、プレゼンテーションを構築する。アーカイブが特定の形式のプレゼンテーションを構築することができれば、それはプレゼンテーションを構築しユーザ・インターフェイス・オブジェクトにこれを戻す各ユーザ・インターフェイス要素を一緒に集める。
【0207】
アーカイブが構築することができる各プレゼンテーションでは、それはプレゼンテーションを一緒に構築するユーザ・インターフェイス要素のリストをもつ。ユーザ・インターフェイス要素はコールされたディスク・ディクショナリにより維持されているディスク上に格納される。キーを与えると、ディスク・ディクショナリは対応するユーザ・インターフェイス要素を戻す。ユーザ・インターフェイス要素のIDはこのキーの基本的部分を構成する。キーの第2の要素は望ましい場所である。場所は、ユーザの自然言語と他の文化的属性を特定するオブジェクトである。場所は、参照サーバ(Preferences Server)からアーカイブにより自動的に得られる。このサーバはユーザに関連する個々の好みのすべてを含む。
【0208】
好みのサーバから得られる場所はIDと共に、TUserInterfaceElementKeyと呼ばれる単一のオブジェクトの中に結合される。このキーはパラメータとしてディスク・ディクショナリのGetValueメソッドに渡される。一致するIDと場所もつユーザ・インターフェイス要素が見つけられると、プレゼンテーションの一部として戻され含まれる。他に、場所パラメータはキーから省略されなければならず、あるいは他の場所がユーザ・インターフェイス要素が見つけられるまで特定されなければならない。
【0209】
(対話フレームワーク・システム)
オブジェクト指向オペレーティング・システムのグラフィック・ユーザ・インターフェイスのユーザは、しばしば、マウスを動かし、オブジェクトを選択するためにクリックし、移動あるいはコピーのためにオブジェクトをドラッグし、その後オブジェクトをオープンするためにダブル・クリックする。これらの動作は直接操作あるいは対話と呼ばれる。マウスをユーザが押し、移動し、離すことに対応するイベントのシーケンスは入力シンタクスと呼ぶ。あるイベント・シーケンスが特定のアクションを示すために使用され、セマンティック動作と呼ばれる。本発明は、Select(選択),Peek(ピーク),Move(移動),AutoScroll(自動スクロール)およびDrag/Drop(Copy)(ドラッグ/ドロップ)(コピー)をサポートするオブジェクトのセマンティック動作に入力シンタクスを翻訳するための方法と装置を開示する。
【0210】
本発明は、マウス・ボタンの押下を検出し以下の論理を採用する。
(a)ユーザがマウス・ボタンを押したときオプション・キーが押されていたら、システムは変数fInteractionTypeを定数kDragにセットすることによりドラッグ・モードに入る。その後システムは動作の目標として選択されたオブジェクトを用いてドラッグ動作を進める。あるいは、
(b)オプション・キーが押されていなかったならば、システムは変数fInteractionTypeを定数kSelectにセットすることにより選択モードに入る。その後、選択動作が進められる。
【0211】
ユーザが既にマウス・ボタンを押していて押したままに保っているときには、以下の論理が関係する。システムは選択モードにあり、システムは最初にユーザがマウスを、移動スレッシュホールドと呼ばれるあるスレッシュホールド以上に動かしたか否かを判定する。これは、GetInitialLocationメソッドにより戻される初期のマウス位置をGetCurrentLocationメソッドにより戻される現在のマウス位置と比較することによりなされる。マウスが移動スレシュホールド以上に動かされていればシステムは選択モードを終了し移動モードに入る。それは変数InteractionTypeを定数kMoveセットすることにより行う。システムはその後そのSelectEndメソッドをコールして選択動作を終了するようオブジェクトをクエリーする。その後、システムはそのMoveBeginメソッドをコールすることにより移動動作を開始する。
【0212】
他に、マウスが動いていないときには、システムはマウスがどのくらい長く押されたままかをチェクするGetCurrentTimeメソッドにより戻される現在の時間を比較することによりなされる。マウスがピーク(peek)スレシュホールドと呼ばれるあるスレシュホールド以上押下されたままならば、システムは選択モードを終了しピーク・モードに入る。それは変数fInteractionTypeを定数kPeekにセットすることにより行う。それは、そのSelectEndメソッドをコールして選択動作を終了するようオブジェクトに依頼して、そのPeekBeginメソッドをコールしてピーク動作を開始する。他に、マウスが動かされないとき、あるいはあるピーク・スレシュホールドを越えて押されなときは、システムはオブジェクトのSelectRepeatをコールして選択動作を継続する。システムがユーザが移動モードにあることを検出したときは、システムはまずユーザがウィンドゥ内で、あるいはウィンドゥの境界上で、あるいはウィンドゥの外でマウスを動かしたか否かを判定する。それは、GetCurrentLocationメソッドにより戻される現在マウス位置とGetContainerBoundsにより戻されるオブジェクトのコンテナの境界とを比較して行う。
【0213】
マウスがまだウィンドゥ内にあれば、システムはオブジェクトのMoveRepeat(移動反復)メソッドをコールして移動動作を継続する。マウスがウィンドゥの境界上にあれば、これは自動スクロール動作を示す。システムはマウス位置により示される方向にスクロールするようにオブジェクトのコンテナに依頼する。これは、コンテナのAutoScrollメソッドをコールして、現在のマウス位置をパラメータとして通すことによりなされる。一旦完了すると、システムは、オブジェクトのMoveRepeatメソッドをコールして移動動作を継続する。
【0214】
マウスがウィンドゥの外にあれば、システムは移動動作を終了してドラッグ・モードに入る。それは、変数fInteractionTypeに定数kMoveをセットすることにより行う。それは、そのMoveEndメソッドをコールして移動動作を終了するようオブジェクトに依頼する。それは、そのDragBeginメソッドをコールしてドラッグ動作を開始するようにオブジェクトに依頼する。システムがドラッグ・モードにあるときには、システムはオブジェクトのDragRepeatメソッドをコールしてドラッグ動作を継続する。システムがピーク・モードにあるときには、システムは最初に、移動スレッシュホールドと呼ばれるあるスレッシュホールドを越えてマウスをユーザが移動したか否かを判定する。これは、GetInitialLocationメソッドにより戻される初期マウス位置とGetCurrentLocationメソッドにより戻される現在マウス位置とを比較してこれを行う。
【0215】
マウスが移動スレシュホールドを越えて動いていたときには、システムはピーク動作を終了して移動モードに入る。それは、変数fInteractionTypeを定数kMoveにセットすることにより行う。それは、そのPeekEndメソッドをコールしてピーク動作を終了するようオブジェクトに依頼する。それは、そのMoveBeginメソッドをコールして移動動作を開始する様にオブジェクトに依頼する。他に、マウスが動かされていないときには、システムはオブジェクトのPeekRepeatメソッドをコールしてピーク動作を継続する。
【0216】
システムがマウス・ボタンをユーザが離したことを検出したときには、選択モードにあれば、システムは選択モードを終了する。それは変数fInteractionTypeを定数kNoneにセットすることにより行う。システムはそのメソッド選択終了をコールして選択動作を終了するようオブジェクトにクエリーする。システムが移動モードにあるときには、システムは移動モードを終了する。それは変数fInteractonTypeを定数kNoneにセットすることによりこれを行う。その後、システムはそのMoveEndメソッドをコールして移動動作を終了するようオブジェクトにクエリーして、変数fInteractonTypeを定数kNoneにセットすることによりドラッグ・モードを終了する。システムがピーク・モードにあるときには、システムはピーク・モードを終了する。それは変数fInteractonTypeを定数kNoneにセットすることにより行う。それは、そのPeekEndメソッドをコールしてピーク動作を終了するようオブジェクトに依頼する。
【0217】
ユーザがスクロールバーを動かすにつれて動的にウィンドゥの内容を更新することを可能とするハードウェアとソフトウェアのシステムを提供することが本発明の基本的目的である。システムはユーザがスクロールバーを押したことを検出する。ユーザがスクロールバーを押したとき、システムはスクロール・コマンドの初期化を始め、ウィンドゥ内に表示されているデータ部分を変更する。コマンドはスクロールのようなエンド・ユーザ・アクションを処理するオブジェクトである。スクロール・コマンドは1つのパラメータ、内容のビューがスクロールされるべき位置を有する。システムはこの位置を現在のスクロール位置にセットする。これは、コマンドのSetScrollPositionメソッドをコールして、スクロールバーのメソッドのGetScrollPositionにより戻される値に位置にスクロールを設定することによりなされる。
【0218】
ユーザがスクローバー内でマウスを動かすときには、システムはスクロール・コマンドの実行を継続してウィンドゥ内に表示されているデータ部分を動的に変更する。システムはコマンドのスクロール位置を新しいスクロール位置にセットする。この処理はコマンドSetScrollPositionをコールしてスクロールバーのメソッドのGetScrollPositionにより戻される値に等しく値をセットすることによりなされる。コマンドの実行は、その後、そのDoRepeatメソッドをコールすることにより繰り返される。これによりビューの内容が新しい位置にスクロールされる。この処理はユーザがマウス・ボタンを押し続けている間継続する。
【0219】
ユーザがマウス・ボタンを離したときには、システムはスクロール・コマンドの実行を終了してウィンドゥ内に表示されているデータ部分を動的に変更する。システムはコマンドのスクロール位置を最終スクロール位置にセットする。この処理はコマンドSetScrollPositionをコールしてスクロールバー・メソッドのGetScrollPositionにより戻される値に位置にそれが等しくなるようにセットすることによりなされる。
【0220】
第20図は本発明によるスクロールと関連する詳細論理を示すフローチャートである。処理はターミナルブロック2000に進み、すぐに機能ブロック2010に通される。そこで、現在のスクロール位置が現在のカーソル位置に基づいて初期化される。その後、判定ブロック2020で、スクロールバーつまみ(scrollbar thumb) 選択されたかどうかを検出するようにテストを行う。スクロールバーつまみの例を第21A図にラベル2110に示す。スクロールバーつまみが選択されたときには、コントロールは、スクロールバーが動かされたか否かを判定するために判定ブロック2030に通される。そうならば、スクロール位置はスクロールバーつまみの新しい位置に送られ、表示がすぐスクロール動作に反映して再フォーマットされユーザのために表示がなされる。スクロールバーつまみが動いていなければ、他のテストが判定ブロック2050で行われ、スクロールバーつまみが離されたか否かが判定される。そうでなければ、コントロールは判定ブロック2030に戻される。スクロールバーつまみが離されていれば、コントロールは機能ブロック2060に通され、スクロール動作を終了してシステムを非スクロール動作状態に戻り、処理はターミナル2070で完了する。
【0221】
第21A図、第21B図、および第21C図は本発明によるウィンドゥ・スクロールを示す。第21A図では、スクロールバーつまみ2110はウィンドゥ2112の最上部にある。第21B図は、スクロールバーつまみ2120がウィンドゥの中央に動かされ、従ってウィンドゥの内容2122が更新されることを示す。第21図は、スクロールバーつまみ2140がウィンドゥの底部に動かされ、ウィンドゥの最も底の部分が表示されていることを示している。
【図面の簡単な説明】
【0222】
【図1A】本発明のパーソナル・コンピュータ・システムのブロック図である。
【図1B】本発明による表示を示す図である。
【図2】本発明によりアプリケーションを生成するために使用されるツールを示す図である。
【図3】本発明によるコマンド・プロセスのフローチャートである。
【図4】本発明によるチェックボックス・コントロールを示す図である。
【図5】本発明によるチェックボックス・コントロールの活性化を示す図である。
【図6】本発明によるチェックボックスの更新を示す図である。
【図7】本発明によるチェックボックス・コントロール処理の要約を示す図である。
【図8】本発明によるコントロール・パネルを示す図である。
【図9】本発明によるダイアログ・ボックスを示す図である。
【図10】本発明によるダイアログ・ボックス・カラー・コントローラを示す図である。
【図11】本発明によるラジオ・ボタンを示す図である。
【図12】本発明によるメニュー状態処理の詳細なフローチャートである。
【図13】本発明による表示の絵を示す図である。
【図14】本発明による原子実行の詳細論理を示す図である。
【図15】本発明によるスマート・ラベル処理と関連する詳細論理を示す図である。
【図16】本発明によるスマート・ウィンドゥ・ラベル処理の詳細論理を示す図である。
【図17】本発明により動かされ選択されることができるオブジェクトとの一般的対話の間にどのようにしてオブジェクトが生成されるかとどのようにしてオブジェクトが相互に通信するかを示す図である。
【図18】本発明による通知ソース・オブジェクトのためのオブジェクト生成通知フローチャートである。
【図19】本発明による適当なユーザ・インターフェイス要素を選択することと関連する詳細論理を示すフローチャートである。
【図20】本発明によるスクロールと関連する詳細論理を示すフローチャートである。
【図21A】本発明によるウィンドゥ・スクロールを示す図である。
【図21B】本発明によるウィンドゥ・スクロールを示す図である。
【図21C】本発明によるウィンドゥ・スクロールを示す図である。
【符号の説明】
【0223】
10 中央演算装置
12 システム・バス
14 ランダム・アクセス・メモリ(RAM)
16 リード・オンリ・メモリ(ROM)
18 I/Oアダプタ
20 ディスク・ユニット
22 ユーザ・インターフェイス・アダプタ
24 キーボード
26 マウス
28 スピーカー
32 マイクロフォン
34 通信アダプタ
36 表示アダプタ
38 表示装置
【技術分野】
【0001】
本発明は、一般的には、表示システムにおける改良に関し、より具体的には、オブジェクト指向オペレーティング・システムを提供することに関する。
【背景技術】
【0002】
ワークステーション・ソフトウェアの開発者の間で、ユーザ・インターフェイス内の一貫性を維持しながらフレキシブルなソフトウェア環境を提供することの重要性が増してきている。この種の動作環境を提供する初期の試みがヘルナンデスらの米国特許第4,686,522号に開示されている。この特許はカーソルの位置にある動的オブジェクトをユーザが引き出して、そのオブジェクトから種々の関数を引き出すことができるグラフィックとテキストの結合処理システムについて議論している。この種のユーザとの自然な相互作用あるいは対話はユーザ・インターフェイスを改善し、アプリケーションをより直感的にする。
【発明の開示】
【発明が解決しようとする課題】
【0003】
また、オブジェクト指向アプリケーションは、どのアプリケーションが現在アクティブであるかに関係なく、ユーザとの一貫性のある対話(インターアクション)インターフェイスを反映している必要がある。本件出願人が知っている公知文献には、いずれも、すべてのオブジェクト指向アプリケーションが、オブジェクト指向機能をオペレーティング・システムに組み入れるように構築することによって統一的に機能することを可能にする革新的なハードウェアおよびソフトウェア・システム機能が記載されていない。
【課題を解決するための手段】
【0004】
従って、本発明の主要目的は革新的なオブジェクト指向アプリケーション・インターフェイスを提供することである。オブジェクト指向オペレーティング・システムのグラフィカル・ユーザ・インターフェイスのユーザは、マウスを移動し、オブジェクト上でクリックしてオブジェクトを選択し、オブジェクトをドラグしてオブジェクトを移動またはコピーし、ダブル・クリックしてオブジェクトをオープンしているのが普通である。これらのオペレーションは直接操作(direct manipulation)とも、対話(interaction−やりとりすること)とも呼ばれている。ユーザがマウスを押し、移動し、解放することに対応する一連のイベントは、入力シンタクス(input syntax)と呼ばれている。ある種のイベント列は、セマンティック・オペレーション(semantic operation)と呼ばれる特定のアクションを示すために使用されている。本発明によれば、選択(Select)、ピーク(Peek)、移動(Move)、自動スクロール(AutoScroll)、およびドラグ/ドロップ(コピー)(Drag/Drop(Copy))をサポートするオブジェクトについて入力シンタクスをセマンティック・オペレーションに変換する方法および装置が開示されている。
【0005】
本発明では、マウス・ボタンが押されたことを検出すると、次のようなロジック(論理)が採用される。
【0006】
(a)ユーザがマウス・ボタンを押したときオプション(Option)キーが押されていれば、システムは、変数fInteractionType(fインターアクション・タイプ)を定数kDrag(kドラグ)にセットすることによってドラグ・モードに入る。そのあとシステムは、選択されたオブジェクトをオペレーションのターゲットとしてドラグ・オペレーションを開始する。
【0007】
(b)オプション・キーが押されていなければ、システムは、変数fInteractionTypeを定数kSelect(k選択)にセットすることによって選択モードに入る。そのあと、選択オペレーションが開始される。
【0008】
ユーザがすでにマウス・ボタンを押していて、マウス・ボタンを押えたままにしていれば、次のようなロジックに入る。システムが選択モードにあれば、システムは、まず、ユーザが移動スレッショルド(move threshold)と呼ばれる、一定のスレッショルドを越えてマウスを移動させたかどうかを判断する。これは、GetInitialLocation(初期位置獲得)メソッドから返された初期マウス位置を、GetCurrentLocation(現在位置獲得)メソッドから返された現在マウス位置を比較することによって行われる。マウスが移動スレッショルドを越えて移動していれば、システムは選択モードを終了し、移動モードに入る。これは、変数fInteractionTypeを定数kMove(k移動)にセットすることによって行われる。そのあと、システムは、そのSelectEnd(選択終了)メソッドをコールすることによって選択モードを終了するようにオブジェクトに指示する。次に、システムは、そのMoveBegin(移動開始)メソッドをコールすることによって移動オペレーションを開始する。
【0009】
逆に、マウスが移動していなければ、システムはマウスがどれだけ長く押されていたかをチェックする。これは、GetInitialTime(初期時間獲得)メソッドから返された初期マウス押え時間を、GetCurrentTime(現在時間獲得)メソッドから返された現在時間と比較することによって行われる。マウスがピーク・スレッショルドと呼ばれる一定のスレッショルドを越えて押されていれば、システムは選択モードを終了し、ピーク・モードに入る。これは、変数fInteractionTypeを定数kPeek(kピーク)にセットすることにより行われる。システムは、SelectEnd(選択終了)メソッドをコールすることによって選択オペレーションを終了するようにオブジェクトに指示し、PeekBegin(ピーク開始)メソッドをコールすることによってピーク・オペレーションを開始する。逆に、マウスが移動していなければ、あるいはマウスがピーク・スレッショルドを越えて押えられていなければ、システムはオブジェクトのSelectRepeat(選択反復)メソッドをコールすることによって選択オペレーションを継続する。ユーザが移動モードに入っていることをシステムが検出すると、システムは、まず、ユーザがマウスをウィンドゥ内で移動したか、ウィンドゥの境界上で移動したか、ウィンドゥの外で移動したかを判断する。これは、GetCurrentLocation(現在位置獲得)メソッドから返された現在位置を、GetContainerBounds(コンテナ境界獲得)から返されたオブジェクトのコンテナの境界と比較することによって行われる。
【0010】
マウスがまだウィンドゥ内にあれば、システムは、オブジェクトのMoveRepeat(移動反復)メソッドをコールすることによって移動オペレーションを継続する。マウスがウィンドゥの境界上にあれば、これは自動スクロール(AutoScroll)オペレーションを示している。システムは、マウス位置で示された方向にスクロールするようにオブジェクトのコンテナに指示する。これは、コンテナのAutoScrollメソッドをコールし、現在マウス位置をパラメータとして渡すことによって行われる。完了すると、システムはオブジェクトのMoveRepeatメソッドをコールすることによって移動オペレーションを継続する。
【0011】
マウスがウィンドゥの外に移動していれば、システムは移動モードを終了し、ドラグ・モードに入る。これは、変数fInteractionTypeを定数kDrag(kドラグ)にセットすることにより行われる。システムは、そのMoveEnd(移動終了)メソッドをコールすることによって移動オペレーションを終了するようにオブジェクトに指示する。システムは、そのDragBegin(ドラグ開始)メソッドをコールすることによってドラグ・オペレーションを開始するようにオブジェクトに指示する。システムがドラグ・モードにあれば、システムはオブジェクトのDragRepeat(ドラグ反復)メソッドをコールすることによってドラグ・オペレーションを継続する。システムがピーク・モードにあれば、システムは、まず、ユーザが移動スレッショルドと呼ばれる一定のスレッショルドを越えてマウスを移動したかどうかを判断する。これは、GetInitialLocationメソッドから返された初期マウス位置を、GetCurrentLocationメソッドから返された現在マウス位置と比較することにより行われる。
【0012】
マウスが移動スレッショルドを越えて移動していれば、システムはピーク・モードを終了し、移動モードに入る。これは、変数fInteractionTypeを定数kMove にセットすることにより行われる。システムは、そのPeekEnd(ピーク終了)メソッドをコールすることによってピーク・オペレーションを終了するようにオブジェクトに指示する。システムは、そのMoveBegin(移動開始)メソッドをコールすることによって移動オペレーションを開始するようにオブジェクトに指示する。逆に、マウスが移動していなければ、システムはオブジェクトのPeekRepeat(ピーク反復)メソッドをコールすることによってピーク・オペレーションを継続する。
【0013】
ユーザがマウス・ボタンを解放したことをシステムが検出すると、システムが選択モードに入っていれば、システムは選択モードを終了する。これは、変数fInteractionTypeを定数kNone(k無し)にセットすることにより行われる。システムは、SelectEnd(選択終了)メソッドをコールすることによって選択オペレーションを終了するようにオブジェクトに照会する。システムが移動モードに入っていれば、システムは移動モードを終了する。これは、変数fInteractionTypeを定数kNoneにセットすることにより行われる。そのあと、システムは、そのMoveEnd(移動終了)メソッドをコールすることによって移動オペレーションを終了するようにオブジェクトに照会して、変数fInteractionTypeを定数kNoneにセットすることによりドラグ・モードを終了する。システムは、そのDragEnd(ドラグ終了)メソッドをコールすることによってドラグ・オペレーションを終了するようにオブジェクトに指示する。システムがピーク・モードに入っていれば、システムはピーク・モードを終了する。これは、変数fInteractionTypeを定数kNoneにセットすることにより行われる。システムは、PeekEnd(ピーク終了)メソッドをコールすることによってピークを終了するようにオブジェクトに指示する。
【発明を実施するための最良の形態】
【0014】
本発明は、IBM(登録商標)社のPS/2(登録商標)あるいはアップル(登録商標)社のマッキントッシュ(登録商標)コンピュータのようなパーソナル・コンピュータ上に駐在するオペレーティング・システムで実現されることが望ましい。代表的なハードウェア環境を第1A図に示す。この図は、従来のマイクロ・プロセッサのような中央演算装置10と、システム・バス12に内部接続された多数の他のユニットを有する本発明のワークステーションの典型的なハードウェア構成を示している。第1A図に示されるワークステーションは、ランダム・アクセス・メモリ(RAM)14と、リード・オンリ・メモリ(ROM)16と、ディスク・ユニット20のような周辺装置をバスに接続するためのI/Oアダプタ18と、キーボード24、マウス26、スピーカー28、マイクロフォン32、および/あるいはタッチ画面装置(図示せず)のような他のユーザ・インターフェイス装置をバスに接続するためのユーザ・インターフェイス・アダプタ22と、ワークステーションをデータ処理ネットワークに接続するための通信アダプタ34と、バスを表示装置38に接続するための表示アダプタ36とを具備している。ワークステーションは、その上に駐在するIBM社のOS/2(登録商標)オペレーティング・システムあるいはアップルのシステム/7(登録商標)オペレーティング・システムのようなオペレーティング・システムを有する。
【0015】
本発明は、オペレーティング・システムとエンド・ユーザ、開発者、およびシステム・ベンダのためのパーソナル・コンピュータの使用に革命をもたらすように意図された開発環境からなる新規なオブジェクト指向システム・ソフトウェア・プラットフォームである。このシステムは、完全なスタンド・アローン・タイプのネイティブ・オペレーティング・システムであり、また高性能パーソナル・コンピュータのためのバックグラウンドから達成された開発環境である。本発明は、フレームワークの価値、クラス・ライブラリおよび新世代オブジェクト指向プログラミング環境を含む完全なオブジェクト指向システムであり、サードパーティのアプリケーション・ソフトウェアの開発の経済性を基本的に改善するよう意図されている。本発明は完全にポータブルなオペレーティング・システムである。
【0016】
従来のオペレーティング・システムは、ソフトウェア開発者がソフトウェアを創作するために使用できる1組のサービスを提供する。それらのプログラムはオペレーティング・システム環境全体の中に非常に緩く統合されている。例えば、DOSアプリケーションはマシン全体を支配する。これは、ユーザに関する限り、アプリケーションはオペレーティング・システムであることを意味する。マッキントッシュ(登録商標)およびウィンドウズ(登録商標)・オペレーティング・システムでは、アプリケーションは同じように見え、それらはアプリケーション間での切り出し(カット)と貼り付け(ペースト)をサポートしている。この共通化によりユーザが単一環境で多数のアプリケーションを使用することが容易となった。しかしながら、その共通化はサービスとフレームワークに組み入れられていないので、ソフトウェアを開発することはまだ非常に困難である。
【0017】
本発明では、“アプリケーション”を書くことは、オペレーティング・システム環境に統合されるオブジェクトの組を創造することを意味する。ソフトウェア開発者は、ソフトウェアを開発するための複雑なサービスの組とフレームワークの両方のためのオペレーティング・システムにたよることができる。本発明のフレームワークは、ソフトウェア開発者が基盤を構築するよりはむしろ問題に集中することを可能とする強力な抽象化を提供する。さらに、ソフトウェア開発者のための基本的抽象化は、ユーザがソフトウェアを操作するために理解しなければならない基本的な概念に非常に近い。このアーキテクチャにより、複雑なアプリケーションの開発が容易となる。
【0018】
このセクションでは、本発明を採用するソフトウェアを書くため4つのステップを述べる。アプリケーションの開発を意図するユーザは一般に以下の質問に関心がある。
・何をモデル化するか
ワードプロセッサではこれは入力しようとするテキストであり、スプレッドシートではそれはセル内の値と公式である。
・データをどのように表現し提供するか
再び、ワードプロセッサでは文字が適当な改行および改ページを用いて画面上に“見るものが得るもの”(wysiwyg)形式で表示され、スプレッドシートでは表またはグラフとして表示され、構造化グラフィック・プログラム(例えばマックドロー(MacDraw))では、グラフィック・オブジェクトの組として表示される。
・何が選択可能か
ワードプロセッサアプリケーションでは、選択されるのは文字の範囲であり、構造化グラフィック・プログラムではグラフィック・オブジェクトの組である。
・この選択の上で動作するコマンドは何か
ワードプロセッサではコマンドは文字のスタイルをボールドに変更することかもしれない。構造化グラフィック・プログラムにおけるコマンドはグラフィック・オブジェクトを回転させることかもしれない。第1B図は本発明による表示を示す。表示の前面にピクチャーをもってくるためのコマンドは41に描かれている。グラフィック情報のプレゼンテーションは40に描かれている。最後に、特定のグラフィック・オブジェクト、円の選択が42に示されている。
【0019】
開発者は、ユーザからたずねられる同じ4つの質問に答えなければならない。幸運にも、本発明はこれら4つの質問の各々を志向するサービスとフレームワークを提供する。答えられなければならない最初の質問は、何をモデル化するかである。ワードプロセッサ・プログラムではデータは文書を構成する文字を含む。スプレッドシートでのデータはセル内の値と公式を含む。カレンダ・プログラムではデータは時間と日付に関係するアポイントを含む。本発明は、データをモデル化するのを助ける機能を提供する。テキスト、構造化グラフィックス、サウンド、および映像を含む特定のデータ形式をモデル化するためのクラスが存在する。これらの特定のクラスに加えて、本発明は、コレクション・クラス、同一制御、リカバリ・フレームワークおよびC++言語を含む、問題のモデル化をサポートする多数の他の抽象化を提供する。特定のデータ形式のためにデータ・モデルをカプセル化するクラスは、そのデータ・カプセルに含まれるデータをアクセスし修正するための特定のプロトコルと、他のデータ・カプセルを埋め込み、他のデータ・カプセルに埋め込まれるためのジェネリックなプロトコルをオーバライド(override)にするためのサポートと、データが変わるときのすべての登録されたオブジェクトに対する通知と、データのプレゼンテーションを生成するためのジェネリックなプロトコルのオーバライドとを提供する。
【0020】
答えなければならない次の質問はデータをどのように提供するかである。構造化グラフィック・プログラムではグラフィック・オブジェクトの組は一般にキャンバス上に描かれる。スプレッドシートではそれは通常、セルの表あるいはグラフである。プレゼンテーション・プログラムではスライドの組あるいはアウトラインである。本発明は、データ・カプセルに含まれるデータの“ながめ(ビュー、view)”を提供する。ビューは“ビュー(view)システム”とグラフィック・システムのセルを用いて生成される。しかしながら、サウンドあるいはビデオ・クリップを動作させることもデータのプレゼンテーションとして考えられる。
【0021】
次に、何が選択されるかである?
ワードプロセッサ・プログラムでは、選択されるのは文字の範囲であり、構造化グラフィック・プログラムではグラフィック・オブジェクトの組である。スプレッドシートではセルの範囲である。本発明は、システムがサポートする全ての基本的なデータ形式のために選択クラスを提供する。ユーザによりなされた選択を表す抽象ベース・クラスは選択されたデータの、アドレス空間から独立した指定を提供する。テキストでは、これは文字に対する一対のポインタよりはむしろ文字の数値範囲であるであろう。この限定は、他のユーザとの(リアルタイムでの)共同作業のとき、選択された範囲が他のマシンとの間で交換されるので重要である。ベース・クラスはまたジェネリック・プロトコルをオーバライドして、この選択に対応する持続的選択を生成する。持続的選択はアンカー・オブジェクトのサブクラスであり、持続的選択が変更の編集から生き延びなければならないので、対応する短命な選択より重いと考えられる。例えば、持続的テキスト選択は、テキストがその前後に挿入されるときそれ自身を調整しなければならない。アンカーはハイパーメディアのリンク、データ・フローのリンクおよびアノテーションの実行に際して使用される。
【0022】
ベース・クラスはまた、データ・カプセル内に含まれるデータを吸収し、埋め込み、送り出するためのオーバライド・ジェネリック・プロトコルを提供する。ベース・クラスはそれらを生成するために使用されるユーザ・インターフェイス技術から独立である。選択は、一般的に(例えばテキストの範囲あるいはセルをトラック(追尾)して)ユーザによる直接操作を介して生成されるが、スクリプトを介してあるいはコマンドの結果として生成されてもよい。このユーザ・インターフェイスとの直交性が非常に重要である。ベース・クラスはまたデータ・カプセルをアクセスするための特定のプロトコルを提供する。カプセル・クラスの特定のサブクラスとモデル選択クラスのサブクラスとの間には非常に強い関連性がある。
【0023】
最後に、この選択された範囲について動作をすることができるコマンドは何か。ワードプロセッサのプログラムでは、コマンドは文字の選択された範囲のスタイルを変更するものでもよく、構造化グラフィック・プログラムではコマンドはグラフィック・オブジェクトを回転させるものでもよい。本発明は、多くのユーザ・インターフェイス・コマンドと共に、カット、コピー、ペースト、ハイパーメディア・リンク・スタート、リンク完了、リンクの運行、リンク上でのデータのプッシュ、リンク上でのデータのプルをするためのジェネリック・コマンドを提供すると共に、全ての組込データ形式のための多数の組込コマンド・オブジェクトを提供する。ユーザにより作られたコマンドを表すアブストラクト・ベース・クラスは、ユーザ・アクションのセマンティクス(意味)を捉える責任を負い、コマンドがドゥ(do:実行)され、アンドゥ(undo:取り消し)され、リドゥ(redo:再実行)されることができかどうかを決定する。コマンド・オブジェクトは、コマンドがドゥされた後、コマンドをアンドゥするために必要な情報のすべてをカプセル化する責任を負う。コマンドが実行される前は、コマンド・オブジェクトは、ユーザ・アクションの非常にコンパクトな表現である。ベース・クラスは、それらを生成するために使用されるユーザ・インターフェイスの技術から独立である。コマンドはユーザによる直接の操作(例えば、グラフィック・オブジェクトの移動)を介して、あるいはメニューから一般に生成されるが、スクリプトを介して生成されることはできない。ユーザ・インターフェイスとの直交性は非常に重要である。
【0024】
(フレームワークの利益)
本発明内の抽象化にプラグを差し込む利益は、概念的モデルを提供するよりも大きい。フレームワークにプラグを差すことはベース・オペレーティング・システム中に構成された多くの複雑な特徴を提供する。これは、比較的小さいメソッドをコールすることによりフレームワークが多数のユーザ特徴を実行することを意味する。フレームワークのための符号化への投資がいくつかの特徴に渡って影響をもたらす。
【0025】
新種のデータが操作されると、新しいデータ形式がシステムの一部となる。データのカプセルを取り扱うことができる既存のソフトウェアは修正無しに新しいデータ形式を取り扱うことができる。これは、マッキントッシュ・コンピュータ・システムのような現在のコンピュータ・システムとは異なる。例えば、スクラップ・ブック・デスク・アクセサリはある種のデータを格納することができるが、テキストあるいはクイックドロー画像成分を有するデータを表示することができるだけである。対照的に、本発明のスクラップ・ブックは、オブジェクトの形でデータを取り扱うので、あらゆる種のデータを表示する。生成された新しいデータ形式はシステム提供データ形式と全く同様に振る舞う。加えて、スクラップ・ブック内のデータは、オブジェクトがデータを編集するための標準プロトコルを提供するので、編集可能である。
【0026】
スクラップ・ブックの例はデータのカプセル化の長所を際立たせる。ソフトウェアがデータのカプセル化を扱うことができるように開発されていれば、アプリケーションを、新しいデータ形式を簡単に扱うように設計することができる。新しいアプリケーションは修正無しに新しい形式のデータを表示し編集することができる。
【0027】
(マルチレベル・アンドゥ)
本発明はマルチレベル・アンドゥをサポートするように設計されている。この特徴を折り込むことは、しかしながら、開発者の側に余分な努力を要求しない。システムは、生成されるすべてのコマンド・オブジェクトを単に思い出すだけである。対応するコマンド・オブジェクトが存在する限り、ユーザは、データへの特定の変更をアンドゥ、即ち取り消すことができる。システムが、コマンドを保存し、どのコマンドをアンドゥあるいはリドゥ(再実行)すべきかを決定するので、ユーザはアンドゥの手順を折り込まない。
【0028】
データのカプセル化のプロトコルの一部は、データをストリームにファイルすることと他の場所および/あるいは他の時間までデータを休ませることを行う。システムは、このプロトコルを使用してドキュメントの保存を行う。デフォルトでは、ユーザのデータ・オブジェクトは、保存されるときファイルに流される。ドキュメントがオープンされているときは、データ・オブジェクトは休まされる。システムは、データ管理フレームワークを使用してディスクに書かれたデータが一貫性をもつ状態であることを確認する。ユーザは、システムが壊れたときにデータがディスク上に保たれているように、しばしばファイルを保存しようとする。システムがすべてのコマンド・オブジェクトを保持するので、本発明はこの種の保存を必要としない。ドキュメントの状態は、ドキュメントの最新のディスクバージョンから始めて、その時点からのコマンド・オブジェクトを再度与えることにより再構成することができる。信頼性のために、システムはコマンド・オブジェクトが起動される毎にそれらをディスクに自動的にログするので、システムが壊れたとしてもユーザは最後のコマンド以外失うことはない。本発明はまたドキュメントのバージョン化をサポートする。ユーザはドキュメントの現在の状態からドラフトを生成することができる。ドラフトは特定の時点におけるドキュメントの不変の“スナップショット”である(ドラフトを生成する1つの理由はコメントのために他のユーザにそれを回覧することである)。システムは新しいドラフトの生成に含まれる詳細を自動的に扱う。
【0029】
(協同作業)
上記のように、ドキュメントは、ある過去の時の状態から始め、そのとき以降なされたコマンド・オブジェクトのシーケンスを適用することにより再構築することができる。このためユーザは故障の場合に仕事を回復することができ、リアルタイム協同作業をサポートすることができる。コマンド・オブジェクトは選択されたものについて動作し、それらの選択されたものはアドレス空間に独立である。従って、選択されたオブジェクトをネットワークを介して協同作業者に送ることができ、遠隔マシンで使用することができる。同じことがコマンド・オブジェクトについても言える。1人の協同作業者が行ったコマンドを他の者に送り同じようにそれらの者のマシンで実行することができる。協同作業者が同一のデータコピーから始めるならば、コピーは協同作業者が変更を行うにつれて“同期して”残る。選択の生成はコマンド・オブジェクトを使用して行うので、すべての協同作業者は同じ現在の選択をもつ。
【0030】
システムは、“モデル・ペース・トラッキング”として知られている特徴を用いて各協同作業者のマシン上でマウス・トラッキングを行う。マウスの押下を扱うように生成されたトラッカー・オブジェクトはユーザがマウスを動かすにつれて一連のインクレメンタルコマンドを生成し実行する。これらのコマンドは協同作業者に送られて各協同作業者により実行される。各協同作業者はそれが起きるにつれてトラッキング・フィードバックをビューすることになる。システムはまた共同作業ポリシーを確立する。共同作業ポリシーは、データに変更を加えるときあるいは自由に変化するとき、ターンするように強制されるかどうかを決定する。本発明はアプリケーション開発者から責任を取り除く共同作業マシンを取り扱う。
【0031】
(スクリプト)
コマンド・オブジェクトのシーケンスを管理するようにシステムを設計すると、システムワイドのスクリプト機能を実行することが可能となる。コマンド・オブジェクトのシーケンスはローカルアクションのスクリプトと等価である。スクリプト機能は、あるドキュメントに適用されるコマンド・オブジェクトを単にトラッキング(追尾)し続ける。スクリプト機能はまた、スクリプトに際して選択オブジェクトを使用する。この機能は、適用する選択を変えることによりスクリプトの注文化を提供する。コマンド・オブジェクトはそれらが特定の選択に適用できるかどうかを示すためのプロトコルを含むので、システムはユーザのスクリプトの変更が妥当であることを確認する。
【0032】
(ハイパーメディアのリンク)
アンカーとして知られている持続的な選択はリンク・オブジェクトにより接続されることができる。リンク・オブジェクトは、その終点を形成する2つのアンカーへの参照を有する。システムでは、リンクは双方向であり、両端は等しい能力を有する。リンクのより高いレベルの使用はリンクに方向を課すことができる。単一リンク・オブジェクトは2つの標準的特徴、即ち運行とデータ・フローとをサポートする。ユーザはリンクの一端から他端へ運行する。通常、これは指定アンカーを含み、持続的な選択をハイライトとするドキュメントをオープンすることを含む。正確な振る舞いは宛先でのアンカー・オブジェクトにより決定される。例えば、アニメーションへのリンクはアニメーションを演ずることができる。データベースクエリーへのリンクはクエリーを実行する。
【0033】
また、リンクはデータ・フローを容易にする。リンクの一端で選択されたデータは他端に転送され、そこで選択を置き換える。ほとんどの場合、その効果は、ユーザが一端で選択をコピーし、他端へ運行するようにリンクを使用し、データを貼り付けることと同じである。システムは、リンクの一端から他端への運行(例えば、宛先ドキュメントを置き、それをオープンし、宛先アンカーをビュー(視野)内にスクロールする等)が含まれる詳細を取り扱う。同様に、システムは、リンクを横切るデータの転送の詳細を取り扱う。後者は、それが参照するデータをアクセスし、修正するための選択のプロトコルを用いて実行される。
【0034】
(注釈(アノテーション))
本発明はシステムワイドの注釈の機能をサポートする。この機能により著者(使用者)は見直しのためドキュメントのドラフトを分配することができる。見直し者はドキュメントにポスト・ノート(posted note) 添付することができ、実行されたとき著者にドキュメントを戻す。著者はポスト・ノートを調べ、それぞれについてアクションを取る(著者はドキュメント内のポスト・ノートを生成することができる)。見直し者が著者と同じソフトウェアをもつ必要はない。代わりに、見直し者は標準注釈アプリケーションを使用することができる。このアプリケーションは著者のドラフトからデータを読み、注釈可能なプレゼンテーションを生成する(そのようなプレゼンテーションの生成は標準データ・カプセルプロトコルの一部である)。
【0035】
見直し者は、ドキュメント内に選択を生成することができ、その選択にポスト・ノートをリンクすることができる。ポスト・ノートと選択の間のリンクによりシステムはそれが参照する選択に“近い”ポスト・ノートを位置決めすることができる。リンクはまた注釈構造を明白にし、システムは注釈を処理するように標準コマンドを実行することができる。ポスト・ノートの内容は、単なるテキストあるいはグラフィックではなく、システム内で実行されるデータ形式でよい。ノートの内容はデータ・カプセルを用いて実行され、ノートをオープンすることはデータの編集可能プレゼンテーションを生成することになる。
【0036】
(データ表現)
データ表現は、モデル化するデータは何かとの質門への答えと関係する。本発明はデータのモデル化を助ける機能を提供する。テキスト、構造化グラフィックス、サウンドおよび映像を含めて、特定のデータ形式をモデル化するためのクラスがある。これらの特定のクラスに加えて、本発明は問題をモデル化するのを助ける多数の他の抽象化、コレクション(収集)クラス、同時の制御と回復フレームワーク、およびC++言語自身を提供する。本発明の主題では、特定データ形式のためのデータ・モデルをカプセル化するクラスはカプセル化クラスのサブクラスである。
【0037】
(カプセル化クラス(Encapsulator Class))
開発者は、カプセル化クラスから導かれるクラスを生成することにより特定形式のデータ表現に対するコンテナを生成する。例えばグラフィック・オブジェクト、様式化されたテキスト、スプレッドシートのセルのようなシステム内の各形式のデータのために、ある形式のデータのためのコンテナとして働く異なる導かれたクラスが存在しなければならない。カプセル化クラスの各々は、それに含まれるデータをアクセスし、修正するための形式の特定プロトコルを提供する。このプロトコルは、一般に、データを表示するためのプレゼンテーションにより、またデータを修正するためのコマンドにより使用される。形式特定プロトコルに加えて、カプセル化クラスは、“ブラック・ボックス”としてのデータ・カプセルの他のエイリアン(異なる見知らぬ)形式への埋め込みをサポートするジェネリック・プロトコルを提供する。このプロトコルは導かれたクラスの中で実行され、カプセル化データのためにプレゼンテーション、編集および選択の生成をサポートしなければならない。コンテナは、エイリアン・データ形式の埋め込みをサポートするように、このジェネリック・プロトコルを理解する必要があるにすぎない。
【0038】
(データ表現の選択)
データ形式の設計者は、特定形式のデータのための表現を設計するときに、C++ オブジェクト・モデルと、選択されるべき豊富な標準クラスの組との両方をもっている。データを表現するためのユニークなクラスを設計する前に、本発明により提供されるクラスが、常に考慮されるべきである。これにより、システム内の既存のクラスに同様なあるいは同一の機能を提供する新しいクラスを生成する無駄な努力を軽減することができる。これらのうちで最も基本となるのがC++ オブジェクト・モデルである。設計者は、ユーザが扱うクラスを表現するためにユーザのメンタル(精神的)モデルに近づける1または2以上のクラスを生成することができる。
【0039】
本発明の基本的なクラスはデータを表現する多くの標準的な方法を提供する。収集クラスは、簡単な組から辞書までランク付けして、メモリ内に関連付けられたオブジェクトを収集するための多数の方法を提供する。持続的な間違いの少ないオブジェクトの収集を提供するためのディスクベースの収集がまた使用可能である。グラフィック編集のような、2次元(2D)あるいは3次元(3D)のグラフィック・モデル化を必要とするデータ形式がまたサポートされている。多数の2Dと3Dのモデル化オブジェクトが変形され、マトリクス・クラスおよび3Dカメラと共に提供される。同様に、本発明は全世界テキスト、審美的なタイポグラフィおよび拡張可能なスタイル(様式)機構をサポートする複雑なテキスト・データ形式を提供する。本発明はまた、サウンドおよび映像のような時間ベースのメディアのためのサポートを提供する。複雑な時間制御機構が使用可能であり、種々の形式の時間ベースメディア間の同期を提供する。
【0040】
(プレゼンテーション・プロトコル)
カプセル化クラスは、カプセル内に含まれるデータの種々のクラスのプレゼンテーションを生成するためのプロトコルを提供する。プレゼンテーションは、寸描プレゼンテーション、“ブラウズ・オンリ”(拾い読み)プレゼンテーション、選択可能プレゼンテーションおよび編集可能プレゼンテーションを含む。プレゼンテーションのためのサイズのネゴシエーションを行い、選ばれたサイズ内にデータを適応させるためのプロトコルがまた存在する。このプロトコルを実行するカプセル化クラスのサブクラスは、他のカプセルへのデータの埋め込みをサポートする。現在サポートされているプレゼンテーションは、以下のものを含む。
【0041】
・寸描(Thumbnail)−このプレゼンテーションはユーザにカプセル内に何が含まれているかを“ピーク”することができるように(覗くことができるように)意図されている。一般にサイズは小さく、そのサイズに合うようにデータを縮小および/あるいはクリップしてもよい。
【0042】
・拾い読み(Browse-only)−このプレゼンテーションによりユーザは通常のサイズでデータを見ることができるようになるが、いずれのデータも選択し修正することはできない。
【0043】
・選択可能(Selectable)−このプレゼンテーションは、拾い読みプレゼンテーションにより提供される能力にデータを選択する能力を加える。データそれ自身への修正を許すことなく、注釈がデータの選択に結びつけられることができるように注釈の中で使用される。選択可能プレゼンテーションは、一般に拾い読みプレゼンテーションのサブクラスとして実行される。
【0044】
・編集可能(Editable)−このプレゼンテーションは、選択可能プレゼンテーションにより提供される能力にデータを修正する能力を加える。これは、ユーザが新たなデータを生成し既存のデータを編集することを可能とするプレゼンテーションである。現在、このプレゼンテーションはそれ自身の編集のためのウィンドゥを提供する。将来的にはその場で編集を可能とするプレゼンテーションのためのサポートが加えられる。編集可能プレゼンテーションは一般に選択可能プレゼンテーションのサブクラスとして実行される。
【0045】
(変更通知)
カプセル化クラスに含まれるデータが変更されたとき、クライアント(例えばデータの使用者)に変更を通知する必要がある。カプセルは標準通知サポートのための組込クラスにあり、カプセルがデータ表現への変更をクライアントに通知することを可能とする。クライアントは、特定の変更についての通知あるいはすべての変更についての通知のためのカプセルに接続することができる。変更が起きたとき、カプセルはすべての関連するクライアントに変更についての通知を伝搬するように、このモデルに依頼する。
【0046】
(データのプレゼンテーション)
このセクションでは、どのようにしてシステムがデータをユーザにプレゼンテーションするかについて説明する。データが一旦システムに表現されると、適当な意味ある方法でデータをユーザにプレゼンテーションすることがユーザ・インターフェイスの役割である。ユーザ・インターフェイスはユーザとモデル化データの間のダイアログを確立する。このダイアログはユーザがデータを見、あるいは他に知覚することを可能とし、ユーザにデータを修正あるいは処理する機会を与える。このセクションはデータ表現に焦点を当てている。
【0047】
(ユーザ・インターフェイス)
開発者は、データ・カプセルと相互作用するようにデータのプレゼンテーションを容易にするクラスを生成する。プレゼンテーションからデータ・モデルを分離することにより、本発明は同じデータの多数のプレゼンテーションを容易にする。アップル社のマッキントッシュ・ファインダのようなアプリケーションは、同一データを多数にプレゼンテーションすることを制限された形で既にサポートしている。同じ時間に同じデータを異なる観点で表示することを可能とすることはある場合には有用である。これらの異なる観点は、同じデータの4つの異なる観点を示す3D−CADプログラムのような同じクラスのインスタンスであってもよい。各種のプレゼンテーションのため、ユーザには、モデルを表示することができるビューと、モデルを選択し修正できるトラッキング(追尾)ツールと追尾コマンドの組を前もって書くことを要求されていた。
【0048】
(静的プレゼンテーション)
最も簡単なプレゼンテーション形式はデータの名称である。名称はデータの内容あるいは形式を示すテキスト・ストリングである。例としては、“第4章”、“1990年連邦税収”、“すべきこと”等がある。他の簡単なプレゼンテーション形式であるアイコンは、データの小さいグラフィックプレゼンテーションである。それは通常データ形式を示す。例としては、本、レポート、金融モデル、サウンドあるいは映像の記録、図面等がある。しかしながら、また、それらは印刷しているプリンタのようなステータスを表示し、あるいは図面の縮尺図のような内容を示してもよい。最後に、寸描プレゼンテーションはモデル・データの小さいビューである。たとえば、縮尺された図、本の内容の表、縮尺された手紙、あるいは長い書類の縮尺された最初のページである。拾い読みプレゼンテーションは、ユーザが通常のサイズでデータを見ることを可能とするが、データのいずれも選択しあるいは修正することはできない。
【0049】
(選択可能プレゼンテーション)
選択可能プレゼンテーションは、ユーザがデータを見、調べ、データから情報を抽出することを可能とする。これらのプレゼンテーションは、コンテクスト、即ち、何がデータか、データはどこか、データはいつ生成されたかを提供する。それはリスト、グリッドのような構造化手法でデータを外観としてあるいは部分的にプレゼンテーションするのを助けることができる。それはまた、データ要素間の関係、データのコンテナあるいは同胞との関係、あるいは他の依存性を表示するのに有用である。
【0050】
選択可能プレゼンテーションはまたメタデータを表示することができる。例としては、ユーザが現在処理しているデータ要素を示す現在選択がある。他の形式のメタデータはデータ要素間のハイパーメディア・リンクである。ビューはまた、データについて共同作業をしている他のユーザを示すことができる。
【0051】
選択可能プレゼンテーションは、通常データ形式により非常に特定される。それらはウィンドゥ、ビュー、およびデータ形式を最良に反映するようにカスタマイズされたユーザ・インターフェイス・オブジェクトからなる。いくつかの例は、
・サウンドの記録−コントロール・パネルは可聴プレゼンテーションを実行する。ビューは音楽のスコアとしてあるいは一連の波形としてサウンドを表す。ビューはサンプル番号あるいは時間表示を含む。
【0052】
・金融モデル−モデルは公式と他のパラメータの組として見ることができる。時間についての特定のインスタンスで、あるいはスプレッドシートのような特定の入力値で、あるいは種々のグラフィックなスタイルに、モデルからのデータを表すことができる。
【0053】
・本−モデルは、内容の表、インデックス、図のリストとしてみられることができる。それは、一連のページ、一連の章、あるいは連続するテキストの流れとして見られることができる。
【0054】
・映像の記録−モデルは、一連の個々のフレーム、あるいは連続するプレゼンテーションとして見られることができる。ビューは追尾マーク、フレーム数、および時間表示を含む。
【0055】
・他のオブジェクトを含むコンテナ−オブジェクトは名称により、形式あるいは他の属性により、一連のアイコン、1組の寸描としてアルファベット順に表示されることができる。
【0056】
(編集可能プレゼンテーション)
編集可能プレゼンテーションは、データの修正を行うことを除いて、対話的プレゼンテーションと同様である。編集可能プレゼンテーションは、マウスあるいは他のポインタでデータの直接の処理を可能とすることによりこれを行う。また、データがメニュー項目と他のコントロールを介してシンボル的に処理されることを可能とする。
【0057】
(データ・アクセス)
プレゼンテーションは、データとプレゼンテーションされるべき他の情報とを決定するためにデータ・カプセルと相互に作用する(対話する)。プレゼンテーションは要求されるデータをモデルにクエリー(照会)する。プレゼンテーションは含まれるデータのすべてあるいは一部だけをプレゼンテーションしてもよいし、あるいはデータ・カプセルのデータから導かれてもよい。
【0058】
(変更通知)
アクティブな単一のモデルの多くのプレゼンテーションが一時に存在することができるので、データは、協同作業者を含めて多くのソースから変更され得る。モデル・データに関して、各プレゼンテーションは自身を更新し続ける責任がある。これは、モデルのすべてあるいは部分が変更するとき、通知を登録することにより達成される。プレゼンテーションと関連するデータにある変更が生じたとき、プレゼンテーションは通知を受け取り、そのビューを更新する。変更通知は以下にリストされている手法のいずれかで発生することが可能である。第1に、変更通知は実際にモデル・データを変更するデータ・カプセル内のメソッドから生成される。第2に、変更通知は変更を引き起こすコマンドから発生される。前に述べたように、これら2つのアプローチには利益がある。データ・カプセル内から通知を発生することはデータが変化するときにはいつでもクライアントは通知されることを保証する。コマンドからの通知の発生は、“高級”通知を可能とし、複雑な変更により生成される通知の混乱を減少させる。
【0059】
(通知フレームワーク外観)
通知フレームワークは、オブジェクト間の変更情報を伝搬するための機構を提供する。フレームワークは、オブジェクトが、それらが依存するオブジェクトに関係することを表し、オブジェクトの変更についての通知を受け取ることを可能とする。標準インターフェイスはクライアントに通知を提供するクラスのために提供される。通知者クラスはクライアントのリストを管理しそれらのクライアントに通知をデスパッチする手段を通知ソース・オブジェクトに提供する。通知者オブジェクトは通知を受け取るオブジェクトのクラスについての特別の知識を要求しない。接続オブジェクトは通知者からの通知のデスパッチを特定の通知受信オブジェクトに提供する。これらの接続オブジェクトは通知が受信者の異なるクラスにどのようにして配信されるかを特定することを可能とする。最後に、通知オブジェクトは変更について記述した情報を転送し、インタレストは通知ソース・オブジェクトを記述する。
【0060】
(通知伝搬フローチャート)
第18図は通知ソース・オブジェクトに対するオブジェクト発生識別フローチャートである。処理はターミナル1800で始まり、機能ブロック1810まですぐに通過する。そこでは、通知受信オブジェクトがそれ自身への接続を生成する。その後、機能ブロック1820で、通知受信オブジェクトは1またはそれ以上の通知ソース・オブジェクトからの1またそれ以上の通知に対して適切なインタレストを加える。これらのインタレストは通知ソース・オブジェクトにより定義される。
【0061】
クライアントオブジェクトは、機能ブロック1830において、接続の際にインタレストにより特定される通知のために通知ソースに接続するよう接続オブジェクトに依頼する。その後機能ブロック1840で、接続に際しての各インタレストについて、接続はその通知と関連するとしてインタレスト内の通知者と共に登録される。次に機能ブロック1845で、システムは変更が検出されるまで待ち状態に入る。システム変更が起きたとき、コントロールは直ちに1850まで通過し、そこで通知ソース・オブジェクトは変化し、コールがその変更を記述する通知を、その通知者に通知する。
【0062】
通知に関係する通知者と共に登録された各接続では、機能ブロック1860で、接続は通知をデスパッチするよう依頼される。次に、機能ブロック1870では、接続は通知受信者の適切なメソッドに通知をデスパッチする。最後に、機能ブロック1880で、通知受信者は通知のための適切なアクションを起こし、テストが決定ブロック1885で行われ、他の接続が通知に関係する通知者と共に登録されているか否かを決定する。他の接続が存在するときは、コントロールは1850に進む。サービスすべき他の接続が無いときは、コントロールは機能ブロック1845に進み、次の変更を待つ。
【0063】
(データ仕様)
データ仕様はデータ処理の選択を発行することを目的とする。ユーザが表現に含まれるデータを処理しなければならないとき、データはそのデータのサブセットを特定できなければならない。ユーザは一般にこの仕様を“選択”と呼び、システムはすべての選択クラスが降りたベース・クラスを提供する。本発明はまたシステムがサポートする基本的データ形式のすべてのための選択クラスを提供する。
【0064】
(モデル選択)
表現内のデータのサブセットの仕様を含むオブジェクトはモデル選択クラスである。テキスト表現の場合には、ある可能な選択仕様は一対の文字オフセットである。構造化グラフィック・モデルでは、各形状にはユニークなIDが割り当てられなければならず、選択仕様は1組のユニークなIDである。仕様のどれもが選択データを直接ポイントせず、それらをデータの多数のコピーに適用することができる。
【0065】
(特定データのアクセス)
選択は、データをアクセスし修正する表現プロトコルを理解し、ローカル・アドレス空間でデータを見つける方法を知る。コマンド・オブジェクトはデータ選択を介して表現データをアクセスし、従って仕様からローカル・モデル内のリアル・データに変換する知識を要求しない。それは選択オブジェクトの仕事であり、アドレス空間独立仕様からリアル・データへのアクセスを提供する。テキスト・カプセルでは処理はある範囲内に含まれる実際の文字に対するカプセルをクエリーすることを要求できる。グラフィック・エディタのようなベース・モデルでは、選択はリアル・オブジェクトの代用物を保持する。カプセルはリアル・オブジェクトへ代用物を変換するためのルックアップ機能を提供する。
【0066】
(標準編集プロトコル)
モデル選択クラスは選択間のデータの交換のためのプロトコルを提供する。形式ネゴシエーション、データの吸収、埋め込み、および運び出しを行うためのプロトコルを実行することにより、導かれたクラスは標準編集コマンドのほとんどのサポートを提供する。これは、システムにより提供される(カット、コピー、ペースト、データをプッシュ等の)編集コマンドが、表現されたデータ形式のために機能し、各アプリケーションの再実行を要求しないということを意味する。モデル選択クラスは、また、アンカーとリンクの交換のために直接にサポートを提供するが、表現データの交換をサポートするためいくつかのキーメソッドの導かれたクラスの実行上にある。
【0067】
CopyDataは、導かれたクラスにより実行されなければならず、特定データのコピーを運び出す。実行は特定データのコピーを含む要求され形式の新たなデータ・カプセルを生成してリターンする。
【0068】
AdoptDataは、仕様に関連する表現にデータを吸収しあるいは埋め込むことをサポートするように導かれたクラスにより実行されなければならない。データが吸収されるべきならば、それは受信者の表現に直接組み込まれることができる形式でなければならない。吸収されたデータは仕様で定義されたように表現に加えられる。多くのデータ形式に対して現在特定されているデータを新たに吸収しデータで置き換えることは共通である。いずれかの置換されたデータはアンドゥをサポートするようにデータ・カプセルに戻される。データが埋め込まれるべきならば、カプセルはブラック・ボックスとして組み込まれ、表現の子として加えられる。
【0069】
ClearDataは、関連する表現から特定されたデータをデリートするように導かれたクラスにより実行されなければならない。デリートされたデータを含む表現の元来の形式のカプセルは戻されなければならない。
【0070】
(ユーザ・インターフェイス)
仕様を生成するユーザ・インターフェイスは一般にはデータの表現の応答性である。多数の機構がデータ形式とプレゼンテーション・スタイルに基づいて使用可能である。選択を生成するための最も好ましいユーザ・インターフェイスは直接実行である。簡単なグラフィック・モデルでは、マウスでオブジェクトを直接クリックしあるいはマウス・トラッカーを用いていくつかのオブジェクトを横切って選択ボックスをドラッグすることによりオブジェクトを選択することができる。テキストでは、選択はファインド・コマンドの結果として生成することができる。選択が生成される他の共通の手法は、“ファインド”のようなメニューコマンドの結果としてである。コマンドが発行されたあと、ドキュメントは適切な場所にスクロールされ、サーチされたテキストが選択される。
【0071】
最後に、選択はスクリプトから生成され(あるいはプログラム的に発生され)る。その結果はユーザが直接選択を生成したかのようである。スクリプトのための“名称付け”選択は選択を記述するための言語を生成することを含む。例えば、テキストでは、選択は“2ページの第4節の2番目の語”である。本発明のアーキテクチャはスクリプトのためのサポートを提供する。
【0072】
(データの修正)
データ修正(Data Modeification)は質問を発する:この選択に関して動作することができるコマンドは何か?
ユーザが表現内に含まれるデータを修正すべきとき、システムはなされるべき修正の形式を正確に特定できなければならない。例えば、ワードプロセッサ・プログラムでは、ユーザは選択された範囲の文字のスタイルを変更することを望むことができる。あるいは、構造化グラフィック・プログラムでは、ユーザはグラフィック・オブジェクトの回転を望むことができる。データ・カプセルに含まれるデータを修正するすべてのユーザのアクションは、“コマンド・オブジェクト”により表現される。
【0073】
(モデル・コマンド・オブジェクト)
ユーザによりなされたコマンドを表すアブストラクト・ベース・クラスはモデル・コマンド・オブジェクトである。モデル・コマンド・オブジェクトのサブクラスはドゥ、アンドゥ、リドゥされることができるというようなユーザ・アクションの意味を捉える。これらのサブクラスはそれらを生成するために使用されるユーザ・インターフェイス技術から独立している。MacAPPと異なり、ユーザ・アクションの意味が知られるとすぐに、デバイス・イベントがシステムによりコマンド・オブジェクトに翻訳される。
ハンドル・ドゥ(HandleDo)、
ハンドル・アンドゥ(HandleUndo)、
ハンドル・リドゥ(HandleRedo)。
【0074】
新しいクラスのコマンドを生成することは多数のメソッドをオーバライド(override)することを含む。オーバライドするための最も重要な3つのメソッドは、Handledo、HandleUndo、およびHandleRedoである。HandleDoメソッドは、そのままであるコマンド形式とそのコマンドが適用される選択とに基づいて適切にデータ・カプセルを変更するように応答可能である。例えば、ワードプロセッサにおいてコマンドがある範囲の文字に対するスタイル変更を含むならば、HandleDoメソッドはこのコマンドのあとに“アンドゥ(Undo)”する必要のある情報のすべてを保存する。スタイルの変更の例では、アンドゥ(undo)情報の保存は文字範囲の旧スタイルを記録することも含む。ほとんどのコマンドに対するアンドゥ情報は保存が非常に簡単である。しかしながら、ファインドおよび変更のようないくらかのコマンドは大量の情報を記録したあとでコマンドをアンドゥすることを含む。最後に、HandleDoメソッドは、データ・カプセルになされる変更を記述する変更通知を発行する。
【0075】
HandleUndoメソッドはコマンドが“ドゥ”される(done)前にそうであった状態にドキュメントを戻す。適用されなければならないステップは上記のHandleDoでなされたステップと同様である。HandleRedoメソッドは、ドゥ(do)され、そしてアンドゥ(undo)されたあとコマンドを“リドゥ(redo)”する。ユーザはしばしばアンドゥ/リドゥ(undo/redo)の組み合わせを用いてコマンドの結果を比較して、ドキュメントの2つの状態の間をいったりきたりする。一般に、HandleRedoメソッドは、Redoメソッドにおいて、最後に導かれた情報がこのコマンドが完了したとき再使用されることがきることを除いてHandleDoメソッドと非常に近い(情報は同じであることが保証されるので、再計算する必要はない)。
【0076】
(ユーザ・インターフェイス)
コマンド・オブジェクトは、ユーザ・アクションの意味を捉える。実際、コマンドは(種々のユーザ・インターフェイス技術を用いて)ユーザにより最も多く生成されるが、同様に他の手法で生成することができる“ワーク・リクエスト”を表す。重要な概念は、コマンド・オブジェクトがデータ・カプセルに含まれるデータを修正するための唯一の手段を表すことである。データ・カプセルへのすべての変更は、無限のアンドゥの利益、保存無しのモデル、本発明の他の特徴が実現されるべきならば、コマンド・オブジェクトにより処理されなければならない。
【0077】
コマンドを発行する最も好ましいユーザ・インターフェイスは、ある種の直接操作を含む。デバイス・イベントをコマンドに翻訳し、ユーザ・フィードバック・プロセスを“ドライブ”するように応答可能なオブジェクトはトラッカーとして知られている。本発明は組込データ形式を処理するための“トラッキング・コマンド”の豊かな組を提供する。例えば、直線、曲線、多角形等のような“ピンク(Pink)”において2Dオブジェクトのすべてを回転させ、スケーリングして、動かすためのトラッキング・コマンドがある。
【0078】
コマンドを発行するための共通のユーザ・インターフェイスはメニュー・システムからあるいはコントロールを介している。メニューは生成され関連するコマンドの組がメニューに加えられる。ユーザがメニュー内の項目を選ぶとき、適切なコマンドが“クローン(複製)”され、コマンドのドゥ・メソッドがコールされる。プログラマはデバイス・イベントに巻き込まれない。さらに、コマンドはそれらが適用されることができる選択の形式が何かを知っているので、メニュー項目はそれらが適切でないとき自動的に薄暗くさせられる。
【0079】
最後に、コマンドはスクリプトから発行することができ(あるいはプログラム的に発行することができ)、その結果はユーザがコマンドを直接発行したときと同様である。“ピンク”アーキテクチャはスクリプトするためのサポートを提供する。しかしながら、この時点ではこれらのスクリプトを生成するために使用可能なユーザ・インターフェイスはない。
【0080】
(組込コマンド)
本発明は、多くのユーザ・インターフェイス・コマンドと同様に、カット、コピー、ペースト、ハイパーメディア・リンクのスタート、リンクの完了、リンクの運行、リンクに関するデータのプッシュ、リンクに関するデータのプルのためのジェネリック・コマンドを提供することに加えて、全ての組込データ形式のための多数の組込コマンド・オブジェクトを提供する。
【0081】
(他の特徴)
このドキュメントの前のセクションは、本発明の基本的な特徴に焦点を当てた。本発明には、さらに進んだ特徴を実行する多くの追加される機能がある。特に、これらの機能は、モデルベースのトラッキング(追尾)、ファイリング、アンカー、および共同作業を含む。
【0082】
(モデル・ベース・トラッキング)
トラッキング(追尾)は、直接処理ユーザ・インターフェイスの心臓部である。トラッキングにより、ユーザは、テキストの範囲を選択し、オブジェクトをドラッグし、オブジェクトを再サイズ調整し、オブジェクトを描くことが可能となる。本発明は、モデルを実際に修正することにより多数のビュー(表示)、および多数のマシンに渡る機能にトラッキングを拡張する。トラッカーは、モデルにコマンドを発行し、モデルはすべての関係するビューへ変更通知を発行する。
【0083】
モデル・ベース・トラッキングは、ドキュメント内でトラッキングするための最良の解決策であるが、それは、以下の欠点を有する。(1)モデル・ビューを、変更イベントへの急速応答を提供するように最適化しなければならない。(2)モデルは中間トラック状態を表すことができなければならない。
【0084】
(アンカー(Anchors))
持続性選択即ち“アンカー”はデータの仕様を表現する点で選択と非常によく似ている。違いは、アンカーはデータへの変更に渡って維持されるので、アンカーは編集変更を生き続けなければならない点である。ドキュメントの初期で述べたグラフィック選択の実行は持続的である。しかしながら、テキスト選択の実行はない。ユーザが選択の前にテキストを挿入しあるいはデリートするならば、文字オフセットを調整しなければならない。テキストアンカーを実行するためには2つのアプローチがある。第1に、テキスト表現は、スタイルが維持される手法と同様に、テキスト内を指すマーカーの集まりを維持する。アンカーはマーカーを参照するユニークなIDを含む。テキストが変更されたとき、マーカーはユニークにされるが、アンカーは同じままである。他のアプローチは、テキストに対する編集履歴を維持することである。アンカーは時間スタンプと同様に1対の文字位置を含むことができる。テキストが編集される毎に、履歴は更新され、変更(例えば、時間Tに位置Xからデリートされた5文字)を記録する。アンカーが使用されるとき、システムは、最後に使用されたとき以来起きた編集変更に基づいて文字位置を補正しなければならない。適切な時に、履歴は凝縮され、アンカーは永久的に更新される。
【0085】
システムは、アンカー機能を介して“フリー”のための非常に多数の特徴を提供する。ハイパーメディア・コマンドのすべて(CreateLink、PushData、PullDataおよびFollow)は、それらの実行時にアンカーを使用する。システム中の注釈機能実行時にアンカーを使用する。ベース・データ・カプセルはアンカーとリンクの追尾を保つサービスを提供する。しかしながら、ユーザは、アンカーをプレゼンテーションを介してユーザに見えるようにする。アプリケーションはまたユーザがアンカーを選択するとき適当なコマンド・オブジェクトを発行しなければならない。アンカーとリンクのためのユーザ・インターフェイスが釘付けにされたあと、ドキュメント・フレームワークは処理を簡略化するよう付加的サポートを提供する。
【0086】
(ファイリング)
ファイリングはデータを永久格納に保存しあるいは永久格納から再生するプロセスである。ユーザがファイリング作業をするためにしなければならないことは、データ・カプセルのための一連の操作を実行することのみである。本発明のデフォルト・ファイリングは”イメージ”ベースである。ユーザがドキュメントを開くとき、ドキュメントの内容全体はメモリに読み出される。ユーザがドキュメントを閉じるとき、ドキュメントの内容の全体がディスクに書き込まれる。このアプローチは、簡単で、フレキシブルで、理解しやすいので採用された。異なるフォーマットでデータを格納するためには、前もって存在する標準のファイル・フォーマットとの互換性を保つために、2つのアプローチが可能である。第1に、カプセル・クラスは実際のデータへの参照を一連の流れとすることができ、実際のデータを見つけるために参照を使用することができ、あるいは新しいサブクラスがファイル・サブクラスを生成し、リターンするように定義することができる。
【0087】
第1のアプローチの長所はデータ・カプセル型のドキュメント内でカプセル化することができることである。第2のアプローチの長所は、完全なドキュメントのための既存のファイル・フォーマットに正確に適合するようにした完全な自由である。
【0088】
(共同作業)
同時ネットワーク共同作業は、2人あるいはそれ以上の人が同時に同じドキュメントを編集することを意味する。システムはまた共同作業ポリシーを確立する。即ち、ユーザがデータを変更するときあるいは自由に変更させるとき後退させられるかどうかである。開発者は共同作業ポリシーあるいは共同作業の機構を心配する必要はない。
【0089】
(協同作業選択スタイルのサポート)
混乱の減少を助けモデル選択を増強するため、ドキュメント・アーキテクチャは協同作業者のイニシャルと望ましいハイライトの束について情報を含む協同作用者クラスを提供する。
【0090】
(多数選択のサポート)
多数の選択をサポートするために、ユーザは、各協同作業者が選択を有するのでプレゼンテーション・ビューを修正しなければならない。アクティブな協同作業者の選択が変わるとき、標準変更通知が送られる。受動的協同作業者の選択が変わるとき異なる通知イベントが送られる。ビューは両方のイベントのために登録すべきである。どちらかのイベントに応答して取られたアクションも通常同じなので、両方のイベントのために同じハンドラー・メソッドを登録することにより経済性が実現される。
【0091】
(本発明によるユーザ・インターフェイス)
本発明のこの部分は、基本的に、先に議論されたオペレーティング・システム・フレームワークの基本上に構築するユーザ・インターフェイスの観点に焦点が絞られる。ユーザ・インターフェイスの第1の観点はユーザがコントロールとして参照する種々のオブジェクトあるいはデータとの対話(相互作用)を管理することを可能とする機構である。
【0092】
(コントロール)
ユーザが他のオブジェクトあるいはデータを処理するよう対話するオブジェクトはコントロールと呼ぶ。コントロールはオブジェクトあるいはデータの現在の状態を決定するためのコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新し、それが実行されるようにする。コントロールの例はメニュー、ボタン、チェックボックス、およびらラジオ・ボタンである。
【0093】
コントロールはオブジェクトあるいはデータの現在の状態を決定するためにコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新し、それが実行されるようにする。例えば、チェックボックスはコマンド・パラメータをオンにあるいはオフにセットし、データ値を変更するためにコマンドを実行する。
【0094】
多くのコントロールはそれらが処理をするデータの現在の値を表示する。例えば、チェックボックスはブール(代数)データ値が真(TRUE)のときだけチェックを表示する。データが変わるにつれてコントロールの出現はここで述べられた通知システムを用いて日付を付けるよう保たれる。そのプロセスはメニュー項目をイネーブル/ディスエーブルするように使用されるプロセスと同様である。
【0095】
コントロールが生成されるとき、コマンドが特定される。コントロールはこのコマンドのコピーを作り、それをフィールドfCommandに格納する。コマンドがいずれかのデータ値を供給するならばコマンドの適切なゲット(Get)とセット(Set)のメソッドのポインタがまた特定される。コントロールはこれらのメソッド・ポインタをフィールドfGetMethodとfSetMethodにそれぞれ格納する。その後、コントロールはデータ値が日付以外であることを示す通知に接続する。各コマンドはこのためにコネクトデータ(ConnectData)と呼ばれるメソッドを提供する。
【0096】
各コントロールは通知を受信すべきオブジェクトとメソッドを示すfDataCommection と呼ばれる接続オブジェクトを含む。この接続オブジェクトはコマンドへのアーギュメントとして渡される。コマンド・オブジェクトは接続オブジェクトの接続メソッドをコールして、そのデータ値に影響を与えるかも知れない各通知者とインタレストを加える。完了時に、コントロールは接続オブジェクトの接続メソッドをコールして第3図に示される接続を確立する。コントロールはそのデータ値をそのコマンドから更新する。それはコマンド(fCommand->(*fGetMethod())のゲット(Get)メソッドをコールすることにより行う。第5図に示されるように、コントロールはこの値を適切なフィールドに格納する(たとえば、チェックボックスがfCheckedと名前が付けられたブール・フィールドに格納する)。その後、コントロールはその出現を更新する。画面の一部が更新を必要としていることを示して、ビュー・システムの不当化メソッドをコールすることによりこのアクションを行う。
【0097】
最後に、データの変更と通知が送られる。ある点で、コントロールにより反映されているデータの値を変更するコマンドが実行される。このコマンドは、コントロール、メニュー項目から、あるいは直接操作により実行することができる。コントロールは第4図に示される通知を受け付けて次のユーザ選択を待つように渡される。
【0098】
(コントロール・パネル)
コントロールのある集まりは、コントロール・パネルと呼ばれる。コントロール・パネル内のコントロールは一般に実際のデータに作用する(これはデフォルトであり、必要はない)。それらのアクションは通常直接的であり、互いに独立である。コントロール・パネルは必要によりコントロールの間で入力フォーカスの進行を制御する。コントロール・パネルはシステムですべてのユーザ・インターフェイスに渡って共有されるであろう。
【0099】
(ダイアログ・ボックス)
コントロールの他の集まりはダイアログ・ボックスと呼ばれる。ダイアログ・ボックス内のコントロールは一般にプロトタイプのデータに作用する(これはデフォルトであり、必要はない)。それらのアクションは通常グループ内に一緒に集められ、その後ユーザが Apply ボタンを押すとき一緒に実行される。ダイアログ・ボックスは必要によりコントロールの間で入力フォーカスの進行を制御する。
【0100】
(アクションにおけるコントロール)
3つのアクションの役割を提供して、アクションにおけるコントロールを説明する。第2図は種々のコントロールを示す。役割の例はコントロール(この場合チェックボックス)、コマンド、選択およびデータ・カプセルと似た手法により使用される。
チェックボックス200−チェックボックスの役割はデータ・カプセル内に格納されたブール値を表示して変更を容易にすることである。この値はチェックの存在不存在により表現される。
コマンド210−コマンドの役割はデータ・カプセルから値を得てチェックボックスからの方向に変更することである。
選択220−選択の役割はコマンドとデータとの間をインターフェイスすることである。
データ230−データはアクションの目標として採用される。
【0101】
(あなたを知ること)
誰でもが第3図に示されるようによりよく互いを知りたい。コマンド310はコントロールが興味があるデータがどの通知を送ることができるかをチェックボックス300に知らせる(コマンド310がどのようにして知るかは他の者に関係がない)。チェックボックス300は次に通知のためにデータ320に接続する。
【0102】
誰にも知られず、ディレクタはチェックボックス300にコマンド310と対話する最良の手法を話した。特に、それはコマンドのゲット値メソッドとセット値メソッドについて話された。チェックボックスはこの長所を少しあとで取り上げる。
【0103】
(データを反映すること)
何かがデータに起きる−それは第4図に示されるように通知を送る。チェックボックス400はインタレストを表現したそれらについて聞く。第4図では、データからの通知はチェックボックス内にXを置くことにより反映される情報を太くする(ボールドにする)ように表現する。
【0104】
チェックボックス510はデータから通知を受信してチェックボックス510を正しく表示する処理が第5図に示される。それは、知ろうとするコマンド520のゲット値メソッドを用いて行う。正しい値は何かをチェックボックス510に知らせる前に、コマンド520は選択を介してデータに行き、実際に正しい値を知っていることを確認する。チェックボックス510は必要によりそれ自身を更新する。
【0105】
(データを変更すること)
ユーザはこのシーンで、第6図に示されるようにチェックボックス600を一度押す。チェックボックス600はコマンド610のセット値メソッドを用いて選択を介してデータ620の値をセットする。全体のプロセスを第7図に再び示す。
【0106】
(アクション時のコントロール・パネル)
コントロール・パネルは第8図に示されるように一セットのコントロールを含む単なるウィンドゥである。これらのコントロールは現在の選択に作用するコマンドを含む。コントロールはコマンドがアクティブならばイネーブルされる。ユーザとの適切な対話に続いて、コントロールはコマンドを実行し、データを変更する。
【0107】
(サウンド・コントロール・パネル)
コントロール・パネルの例として第8図に示すサウンド・コントローラを考える。このコントロール・パネルはサウンドの再生を制御する4つのボタン800,802,804および806を含む。各ボタンは上記の“アクション時のコントロール”のセクションに述べられたように実行する。
【0108】
プレイ800−このコントロールはTPayコマンドである。このコマンドはある条件の下でのみアクティブで、それらの条件の下でのみコントロールをイネーブルにする。第1に、サウンドは適切なデータ・カプセル内で選択される。次にそれは既に再生中であってはならない。最後に、現在のサウンド位置は最後の前のどこかになければならない。押されたときPlayボタンはTPlayコマンドを実行して選択されたサウンドをスピーカーから出力させる。
【0109】
ステップ802−このコントロールもまた、TPlayコマンドを含む。これは何であろう。さて、これを構成しているとき以来、TPlayコマンドがそれを再生すべき期間を示すパラメータを取ることができる。ステップボタン(Stepボタン)のために、それは単一サンプルに設定される。StepボタンはTPlayボタンに対して述べたのと同じ条件の下でのみイネーブルとされる。Stepボタンが押されると、TPlayコマンドを実行して選択されたサウンドをスピーカーから出力させる。
【0110】
ストップ804−このコントロールはTStopコマンドを含む。Stopコマンドは選択されたサウンドが現在再生中であるときのみイネーブルとされる。押されたとき、StopボタンはTStopコマンドを実行して選択されたサウンドの再生を停止させ、現在のサウンド位置を開始点に設定する。
【0111】
ポーズ806−このコントロールはまたTStopコマンドを含む。しかしながらStopボタンと異なり、このTStopコマンドはサウンドを開始点に巻き戻さないよう設定される。PlayボタンあるいはStepボタンを押すと再生が中断された場所から続く。
【0112】
(アクション時のダイアログ・ボックス)
ダイアログ・ボックスは、それが一セットのコントロールを含む単純なウィンドゥであるという点でコントロール・パネルと同様である。しかしながら、選択されたデータへ作用するコントロールに変わって、それらは他のコマンドのパラメータに作用する。Applyボタンが押されるまでだけが修正されたリアル・データである。
【0113】
(カラー・エディタ)
ダイアログ・ボックスの例として第9図に示すカラー・エディタを考える。それは3つのスライダを含む。一つはカラーの赤900、一つは青910、および一つは緑920の成分のためのスライダである。スライダを望みの値に調整したあと、ユーザはアプライ930を押して選択した範囲のカラーを変更する。
【0114】
赤900,緑910,青910−ユーザにとって、これらのスライダは、ラベルを除いて同一である。すべてのコントロールと同様に、各スライダは、ユーザとの対話に続いて実行されるコマンドを含む。多くのコントロールとは異なり、特に選択されたデータにすぐに影響を与えるコントロール・パネル内のそれらと異なり、これらのスライダに含まれるコマンドは他のコマンドのパラメータ値を表示し修正する。この場合、アプライ(Apply)ボタン内に含まれるコマンドの赤、緑あるいは青のパラメータの1つである。
【0115】
アプライ930−アプライ(Apply)ボタンは、実行されるときに選択された範囲のカラーを変更するTSetColorコマンドを含む。それは3つのパラメータを有する。カラーの赤、緑および青の成分の各々に対して1つのパラメータである。これらのパラメータは表示され、ユーザとの対話に応答してスライダにより設定される。アプライ(Apply)ボタンが押されると、このコマンドが実行され新しいカラーが設定される。カラー・エディタに伴う内部アクションを例として第10図に示す。赤1000,緑1010,青1020のスライダはTFloatControlCommandを含む。これらのコマンドはコントロールが表示する単一の浮動小数点値を含む。ユーザがスライダを調整するにつれて、スライダはこの値を更新しそのコマンドを実行する。
【0116】
TFloatControlCommandの選択によりApply1040ボタン内のTSetColorコマンドが特定される。そのパラメータの1つは各TFloatControlコマンドが実行されるときに設定される。最後に、ユーザがアプライ1040ボタンを押すとき、TSetColorコマンドが実行され、選択されたカラー1050が変更される。
【0117】
(クラス)
以下のセクションはコントロールおよびダイアログ領域のクラスとそれらの基本的なメソッドを説明する。
【0118】
(コントロール)
コントロールは1またはそれ以上のコマンドへのユーザ・インターフェイスである。コントロールはその名称通りにコマンドについての情報を表示し、また、それが現在のコンテキストの中でアクティブか否かを表示する。適切なユーザとの対話に続いて、コントロールはコマンドを実行する。適切なとき、コントロールはコマンドが修正するデータの現在値を得て、それをユーザに表示する。コマンドを実行する前にこのデータの新しい値を示すコマンド・パラメータをセットすることができる。
【0119】
オプションとしてのコントロール内のコマンドの付加的仕様でコントロールについての選択を生成するメソッド。ルックアップ・コマンドは、それらがどのくらい多くのコマンドを得て、それらがどのように格納されるかについての、サブクラスにフレキシビリティを与えるための、純粋な仮想関数である。
【0120】
プレゼンテーションがオープンされクローズされるときコールされるメソッド。プレゼンテーションがオープンされるとき、コントロールはその状態に影響を与えることができる通知を接続する。プレゼンテーションがクローズされるときこれらの接続は切断される。
【0121】
プレゼンテーションが活性化されまた非活性化されるときコールされるメソッド。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ妥当な通知に接続される。プレゼンテーションの非活性化はこれらの接続を切断する。
【0122】
コントロールがイネーブルとされるかどうかに影響を与える通知者に接続しそれから切断するためにコントロールが使用するメソッド。ConnectEnabledNotifiersはコントロールがオープンされたときコマンドにより特定される通知者に接続する。DisconnectEnabledNotifiersはコントロールがクローズされるときこれらの接続を切断する。
【0123】
コントロールのデータ値のプレゼンテーションに何かが影響を与えることを示す通知を受信するメソッド。このメソッドはデフォルトにより何もしない。
【0124】
通知のためのメソッド。クリエートインタレスト(Create interest)はコントロールのインスタンスにより特定されるインタレスト(interest)を生成する。Notifyは通知を送り、インタレストを含み込むようにオーバーロード(overload)される。
【0125】
(コントロールのインタレスト)
単一の通知者はコントロールの多くのサブクラスの中で共有される。特定のコントロールインスタンス内のインタレストを表すために、インタレストは特定されなければならない。コントロールインタレストは特定のコントロールを指すポインタを含むインタレストである。このクラスはサブクラス無しで、通常そのまま使用される内部クラスである。
【0126】
(コントロールの通知)
各通知者はコントロールの多くのサブクラスの中で共有されている。コントロールがどこに通知を送るかを区別するために、通知は特定されなければならない。コントロールの通知はその通知を送ったコントロールへのポインタを含む。このクラスはサブクラス無しで通常そのまま使用される。
【0127】
(コントロールのプレゼンター)
コントロールのプレゼンターはコントロールを包むので、プレゼンテーション・データ・カプセルにより含まれることができる。それはすべてのプレゼンター・オブジェクトが提供する標準的な振る舞いを提供する。このクラスはサブクラス無しで通常そのまま使用される。
【0128】
プレゼンテーションがオープンされたときとクローズされたときコールされるメソッド。それらはデフォルトでは何もしない。サブクラスはそれが包むオブジェクトのためのこれらのメソッドを処理しなければならない。コントロールに対して、これらのメソッドは直接委任されなければならない。プレゼンテーションがオープンされたとき、コントロールはその状態に影響を与えることができる通知に接続する。クローズされるとき、接続は切断される。
【0129】
プレゼンテーションが活性化されるときと非活性化されるときコールされるメソッド。それらはデフォルトでは何もしない。サブクラスはそれが包むオブジェクトのメソッドを処理しなければならない。コントロールに対して、これらのメソッドは直接委任される。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ妥当となる通知に接続する。非活性化されるときは接続は切断される。
【0130】
(TControlSelection(コントロール選択))
コントロール選択は、コントロール・プレゼンターの中に包まれプレゼンテーションの際に格納される単一のコントロールと付加的にその中のコマンドを特定する。
【0131】
コントロール内のコマンドをアクセスするメソッド。これらはコマンドが特定されていなければ不当な値を戻す。
【0132】
(TUniControl(ユニコントロール))
ユニコントロールは、単一のコマンドを提供し、適切なユーザとの対話に続いて実行させられるコントロールのためのアブストラクト・ベース・クラスである。この形式のコントロールの例はボタンとチェックボックスである。
【0133】
コントロールにより提供され実行されるコマンドを特定するメソッド。通知が、コマンドが変更されたとき登録された接続に送られる。
【0134】
コントロールがイネーブルとされるか否かに影響を与える通知者に接続するためとそれから切断するためにコントロールが使用するメソッド。ConnectEnabledNotifiersはコントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectEnabledNotifiersは、コントロールがクローズされるときこれらの接続を切断する。
【0135】
コントロールがEnable(イネーブル)とされるべきか否かに影響を与える何かが起きたことを示す通知を受信するメソッド。更新イネーブル(UpdateEnabled)はコマンドがアクティブか否かをチェックしてイネーブル(Enable)とディスネーブル(Disable)を適切にコールする。
【0136】
コントロールのデータ値のプレゼンテーションに影響を与える通知者に接続するためとそれから切断するためにコントロールが使用するメソッド。ConnectDaTaNotifiersは、コントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectDaTaNotifiersは、コントロールがクローズされるときこれらの接続を切断する。データ値を表示しないコントロール(例えばボタン)は、何もしないようにConnectDataNotifiersをオーバライドする。
【0137】
(ボタン)
ボタンは押されるとコマンドを実行するユニコントロールである。このクラスは通常サブクラス無しで使用され、単にコマンドをセットして離れる。
【0138】
プレゼンテーションが活性化されるときと非活性化されるときにコールされるメソッド。プレゼンテーションが活性化されるとき、いくつかのコントロールはアクティブのときだけ適切な通知に接続する。非活性化されるときには、これらの接続は切断される。プレゼンテーションが活性化されるとき、ボタンはキー等価通知のために登録する。この接続はプレゼンテーションが非活性化されるときに切断される。
【0139】
コントロールのデータ値のプレゼンテーションに影響を与える通知者に接続しまたそれから切断してユーザを制御するメソッド。ConnectDataNotifiersはコントロールがオープンされるときコマンドにより特定される通知者に接続する。DisconnectDataNotifiersはコントロールがクローズされるときこれらの接続を切断する。データ値を表示しないコントロール(例えばボタン)は何もしないように接続データ通知ConnectDataNotifiersをオーバライドする。
【0140】
(チェックボックス)
チェックボックスはブール値をセットするコマンドへのユーザ・インターフェイスである。適切なユーザとの対話に続いて、チェックボックスは、値を変更するようにコマンド・メソッドをコールしてそのコマンドを実行する。このクラスは通常サブクラス無しで使用され、単にコマンドとその値のゲッターとセッターをセットし、離れる。
【0141】
(スライダ)
スライダは、単一浮動小数点値を表示して適切なユーザとの対話に続いて変更されることを可能とするユニコントロールである。スライダの例は第9図と第10図に示した。
【0142】
(TMultiControl(マルチコントロール))
マルチコントロールはいくつかのコマンドを提供するコントロールのためのアブストラクト・ベース・クラスであり、適切なユーザとの対話に続いてそれらを変更することを可能とする。この形式のコントロールの例はラジオ・ボタンとメニューである。
【0143】
(TRadioButton(ラジオ・ボタン))
ラジオ・ボタンは2あるいはそれ以上のブール値を表示するマルチコントロールであり、適切なユーザとの対話に続いてそれらを変更することが可能となる。ラジオ・ボタンは、第11図に示すように、正確に1つのボタンが選択されるという制約を有する。紙(Paper) が選択されると、1100でその円が黒くされる。プラスチック(Plastic)が選択されると、1110でその円が選択される。両方を選択されることはできない。
【0144】
(コマンド)
コマンドは、オブジェクトへのあるいはオブジェクトのセットへのリクエストをカプセル化して特定のアクションを行う。コマンドは通常、ボタンを押すことや、メニュー項目を選択すること、あるいは直接処理のようなエンド・ユーザ・アクションに応答して実行される。コマンドは、そのアピアレンス(appearance)を決定するためにコントロールにより使用することができるそれら自身についての種々の情報(例えば、名称グラフィック、キー等価、それらがアクティブか否か)を提供することができる。サブクラスは、コマンドがアクティブか否かを決定するために、現在の選択、アクティブ・ユーザ・インターフェイス要素、あるいは他のパラメータを調べるメソッドを処理しなければならない。サブクラスは、このコマンドがアクティブか否かに影響を与えることができる通知インタレストを戻すようにゲット・アクティブ・インタレストをオーバライドしなければならない。
【0145】
第12図は本発明による詳細論理を描くフローチャートである。フローチャート論理は1200に進み、コントロールは機能ブロック1210にまで直接渡される。そこでコマンド・オブジェクトはメニューに加えられる。この機能ブロックにより実行されるステップは、(1)コマンドからメニュー項目を生成するステップ、ここでメニュー項目はコマンドを含む他のオブジェクトデータ構造であるステップ、(2)メニュー項目のリストにあるメニュー項目を追加するステップ、および(3)メニューのアピアレンスが不当であることをデータ構造fValidにマークするステップである。その後、メニューがプルダウンされると、アピアレンスはシステムの状態に基づいて再計算される。
【0146】
各メニューはビューである。ビューはサイズと位置の情報を含む。各メニューはメニュー項目のリストを含む。各メニュー項目は現在のアピアレンスを反映するコマンドと変数を含む。変数は、メニュー項目がイネーブルであるか否か(Boolean fEnabled)、その名称(TTextLabel fName)、そのグラフィック(TGraphicLabel fGraphic)、およびそのアピアレンスが現在妥当か否か(Boolean fValid)を含む。これらの変数の各々は、メニュー項目がいつ生成されたかをコマンドに訊ねることにより決定される。
【0147】
次に、クエリーは、機能ブロック1220に示されるように、通知インタレストためのコマンド・オブジェクトに送られる。各コマンドは異なる形式の通知に接続する4つのメソッドを有する。i)その名称に影響を与える通知、ii)グラフィックに影響を与える通知、iii)コマンドがアクティブか否に影響を与える通知、およびiv)いずれかのデータに影響を与える通知である。この場合、コマンドのために生成されたメニュー項目はアクティブな通知に接続する。それは接続オブジェクトをConnectActiveに渡すことにより行う。コマンドはその後、コマンドがアクティブか否に影響を与える通知者に接続オブジェクトを接続する。その後、コントロールは機能ブロック1230に通され、メニュー項目を描くことが必要なときイネーブルな状態のコマンドをクエリーする。メニュー項目を描くために、メニュー項目はそのコマンドのためにメソッド“IsActive”をコールする。そのコマンドは、それが望むシステム状態がなんであるかを見て、決定ブロック1240に示されるように、現在のコンテキスト内でそれがアクティブか否かを戻す(例えば、いくつかのコマンドは、特定の形式のウィンドゥが正面にあるとき、あるいは特定の形式のオブジェクトが選択されるときにのみアクティブである)。その後、メニュー項目は機能ブロック1250および1260に示されるように、コマンドにより戻される値にマッチするように、その内部状態(各メニュー項目内のブール値)とアピアレンスを更新する。
【0148】
ユーザ・アクションが入力ブロック1270に示されるようにコマンドを含むときは、ユーザは常にコマンドが処理されるようにする。これはメニュー項目、コントロール、あるいはオブジェクトの直接処理を介して行うことができる。このアクションは、機能ブロック1280に示すようにドキュメント状態が修正されるようにする。ドキュメントが通知を送るとき、以下のステップが実行される。(1)ドキュメントにより送られた通知に接続されたいずれかのメニュー項目(あるいは他のコントロール)は、通知メッセージを受信する。このメッセージはその通知に送られたオブジェクトへのポインタと共に変更の名称を含む。(2)その後メニュー項目はその状態を更新する。コントロールは更なる処理のため機能ブロック1230に戻される。
【0149】
第13図は、本発明による表示を示す。メニュー項目は編集(Edit)1300であり、関連付けられた多数のサブメニュー項目を有する。アンドゥ(Undo)1310は、アクティブメニュー項目であり、関連する機能を実行するように選択することができる。リドゥ(Redo)1320は非アクティブであり、灰色で提供され、この時点では選択することができない。チェックボックスはまた、デバッグ用コントロール・パネル1350の一部として1360に示されている。
【0150】
(プレゼンテーション・テンプレートと持続性)
データプレゼンテーションはテンプレートから生成され、ユーザ・インターフェイス・オブジェクト内の期間保存される。すべてのデータを有するものはシステム内ではモデルである。モデルはデータの処理を含み実行する。データ交換は、カット、コピー、ペースト動作を介して実行される。データの参照は、選択、アンカーおよびリンクにより提供される。データ・モデルは他の中に埋め込むことができる。ユーザは、関連するユーザ・インターフェイスにより提供されるプレゼンテーション(例えば、アイコン、寸描、フレーム、ウィンドゥ、ダイアログ、コントロール・パネル)を介してモデルと対話する。データ・モデルはすべてのプレゼンテーションを生成し、他のオブジェクトへのアクセスメソッドを代理し、ユーザ・インターフェイスと呼ばれる。
【0151】
ユーザ・インターフェイスは特定のモデルのためのプレゼンテーションの組、例えばアイコン、寸描、フレーム、ウィンドゥを含むモデルである。要求されるとき、プレゼンテーションは望ましいプレゼンテーションの形式、ユーザ名、場所、他の基準とに基づいて既に生成されているものから選択される。望ましいプレゼンテーションが見つからないとき、新しいプレゼンテーションを生成して関連するアーカイブ(保管所)から1つをコピーすることにより、ユーザ・インターフェイスに加える。プレゼンテーションは持続的プレゼンテーション情報(例えば、ウィンドゥサイズ場所、およびスクロール位置)がもはや要求されないときにはデリートされてもよい。
【0152】
プレゼンテーションは、データを見て処理するために使用されるユーザ・インターフェイス要素(例えば、メニュー、ウィンドゥ、ツール)を包むプレゼンテーション可能なオブジェクトのセットを含む。プレゼンテーションはこれらのオブジェクトが提供するデータへの参照を提供する。プレゼンテーションは、プレゼンテーションが活性化されるときプレゼンテーション可能なオブジェクトをインストールしあるいは活性化する。同様に、これらのオブジェクトはプレゼンテーションが非活性化されるときに除かれ、あるいは非活性化される。プレゼンテーションはその目的に従って同定され、(例えばアイコン、寸描、フレーム、ウィンドゥ)、後の選択のためまだ決定されるべき基準(例えばユーザの同一性)を保持する。
【0153】
プレゼンテーションは、プレゼンテーションがオープンされるときあるいはアクティブであるときに画面上に表示され、あるいは他に使用可能なプレゼンテーション可能なオブジェクトの集まり(例えばユーザ・インターフェイス要素)から構成される。
【0154】
プレゼンテーションは、アーカイブ(保管所)に含まれるテンプレート・プレゼンテーションから生成される。これらはユーザ・インターフェイス要素のようなオブジェクトから構成され、順にそれらはグラフィックとテキスト・ストリングのようなより小さいオブジェクトから構成される。
【0155】
アーカイブはユーザ・インターフェイス要素(例えばウィンドゥ、メニュー、コントロール、ツール)とプレゼンテーション(例えば、アイコン、寸描、フレーム、ウィンドゥ)を含むテンプレート・オブジェクトを有するモデルである。
【0156】
(ダイアログ・ボックスとコントロール・パネル)
コマンド・オブジェクトを異なる手法で用いることにより、コントロール群の2つの独立した振る舞いを制御することができる。第1は、それらが直ちにデータに影響を与えるか否か、あるいは設定が効果を上げる前に、ユーザがOKを押さなければならないか否かである。第2はそれらが互いに独立か否か、あるいは設定が原子動作を提供するか否かである。
【0157】
コントロールはコマンドを含む。ユーザがコントロールを処理するとき、コントロールはコマンド内にパラメータをセットしてそれが実行されるようにする。コマンドは選択により特定されるモデル・データに作用する。
【0158】
(イミーディエイト)
データにすぐに影響を与えるコントロールは、リアル・モデル・データを特定する選択を含むコマンドを有する。ユーザがコントロールを処理するときコマンドはこのデータを変更する。データが変わるとき、それは変更通知を送り、データの状態に依存するビューとコントロールは正確に現在の状態を反映する。
【0159】
(遅延)
リアル・データを変更しないよう設計されたコントロールは代わりにプロトタイプのデータに作用しなければならない。リアル・モデル・データはユーザがOKボタンを押すような他のアクションを取るまで変更されない。これは2つの手法で達成される。
【0160】
コントロールはコントロールそれ自身を特定する選択を含むコマンドを含む。ユーザがコントロールを処理するとき、コマンドはコントロールの値を変更するが、他のモデル・データを変更させない。ユーザがOKボタンを押すと、OKボタン内のコマンドは、ユーザが処理した各コントロール内の値に一致するようにリアル・モデル・データを変更する。
【0161】
コントロールは、OKボタンにより含まれるコマンドのパラメータを特定する選択を含むコマンドを有する。ユーザがコントロールを処理するとき、コマンドはOKボタンのコマンドを変える。ユーザがOKボタンを押すとき、OKボタンのコマンドはそれ自身に含まれる値を一致させるようにリアル・モデル・データを変更する。
【0162】
(独立)
互いに独立に動作するコントロールはコントロール・パネルあるいはダイアログ期間が完了した後、個々にアンドゥできるアクションを要求し表現する。これはコントロールにより実行された場合の、コマンドの通常の振る舞いである。
【0163】
(原子)
コントロールの他のセットは一緒に働き、原子動作としてアンドゥされ、リドゥされるように設計される。これは、ダイアログ・ボックスあるいはコントロールが開始されるときアンドゥ・スタック上にマークを置くことにより達成される。終了したとき、コントロール・パネルを解散させることによりあるいは(上記IIBのように)ユーザがOKボタンを押すときに、マークがアンドゥ・スタック上に置かれたときから実行されるコマンドのすべてが単一のコマンド群に集められる。この群は単一群としてアンドゥあるいはリドゥされることができる。
【0164】
(キャンセル)
(上記IIBのように、通常OKボタンに伴う)CANCEL(キャンセル)ボタンを含むコントロール・パネルは、上記IIIBで述べた技術と同様な技術である。マークは、ダイアログ・ボックスあるいはコントロール・パネルが開始されるときアンドゥ・スタック上に置かれる。ユーザがCANCELボタンを押すと、マークがアンドゥ(Undo)・スタックに置かれる前のすべてのコマンドがアンドゥ(Undo)される。この技術はコントロールがデータに直ちに影響を与えるか否かにかかわらず働く。
【0165】
(ダイアログ・ボックス内での原子コマンドの実行)
他のオブジェクトあるいはデータを処理するようユーザが対話するオブジェクトはコントロールと呼ぶ。コントロールの例は、メニュー、ボタン、チェックボックス、およびラジオ・ボタンである。各コントロールはコマンドを含み、それはエンド・ユーザ・アクションを実行する。コマンドは選択オブジェクトにより特定されるデータに作用する。ユーザがコントロールを処理するとき、それはコマンド内にパラメータをセットしてそれが実行されるようにする。このようにして、データ値を変更する。
【0166】
互いに独立に働くコントロールは、コントロール・パネルあるいはダイアログ期間が完了したあと、個々にアンドゥされることができる表現アクションを要求する。これは、コマンドがコントロールにより一旦実行されたとき通常の振る舞いである。他の組のコントロールは共に動作するように設計され、原子動作に従ってアンドゥされリドゥされるべきである。これはこの特許の主題である。
【0167】
原子実行の詳細な論理は第14図に提供されるフローチャートに示される。処理は端子1400に進み、コントロールは機能ブロック1410にすぐに通され、ダイアログ・ボックスが活性化される。ダイアログ・ボックスが活性化されるとき、マークはアンドゥ・スタック上に置かれる。アンドゥ・スタックはユーザが実行したすべてのコマンドのリストである。アンドゥが押されると、スタックの最上部のコマンドがアンドゥされる。すぐにリドゥされなければ、捨て去られる。その後、機能ブロック1410で、コントロールのユーザ処理が検出される。コントロールの処理が機能ブロック1430で述べたように適切にコマンドのデータ値を変更して、コントロールを実行する。例えば、チェックボックスは0と1の間でコマンドのfチェック(fChecked)フィールドを行き来する。最後に、コマンドはアンドゥ・スタック上に記録され、機能ブロック1440に示されるように、続いてアンドゥされることができる。
【0168】
判定ブロック1450で検出されるように、ユーザが続いてダイアログ・ボックス内の各コントロールを処理すると、コントロールは機能ブロック1430に進む。しかしながら、判定ブロック1460で検出されるように、ユーザがOKボタンを押したときは、コントロールは機能ブロック1420に進む。最後に、ダイアログ・ボックス内の各コントロールがユーザの満足に達したとき、ユーザはOKボタンを押す。マークが機能ブロック1440でアンドゥ・スタック上に置かれて、以来実行されたすべてのコマンドは単一のコマンド群内に集められ、機能ブロック1470で示されるようにアンドゥ・スタック上に戻される。コマンド群は多くのコマンドを一緒に集めるコマンドである。実行され、アンドゥされ、あるいはリドゥされるとき、コマンド群は順番に各コマンドを実行し、アンドゥし、あるいはリドゥする。コマンド群は、その後、単一原子動作としてアンドゥされあるいはリドゥされることができるアンドゥ・スタック上に戻される。
【0169】
(ダイアログ・ボックス内の遅延されたコマンド実行)
ユーザが他のオブジェクトあるいはデータを処理するように対話するオブジェクトは、コントロールと呼ばれる。コントロールの例はメニュー、ボタン、チェックボックス、ラジオ・ボタンである。各コントロールはコマンドを含み、それはエンド−ユーザのアクションを処理する。コマンドは選択オブジェクトにより特定されるデータに作用する。ユーザがコントロールを処理するときそれはコマンド内にパラメータをセットしてそれが実行されるようにする。これにより、データ値が変更される。ユーザが他のアクションを実行するまでデータが遅延して変更されることは、本発明の1つの特徴である。例えば、ダイアログ・ボックス内のコントロールはユーザがOKボタンを押すまで、データ値を変更しようとしない。
【0170】
コントロールが生成されるときコマンドが特定されなければならない。コントロールはこのコマンドのコピーを作りそれをフィールドfCommandに格納する。コマンドが何らかのデータ値を供給するならば、コマンドの適切なゲット(Get)メソッドとセット(Set)メソッドへのポインタがまた特定されなければならない。コントロールはこれらのメソッド・ポインタをfGetMethodとfSetMethodのフィールドにそれぞれ格納する。コマンドにより修正されるデータは選択オブジェクトにより特定される。通常、この選択オブジェクトはリアル・モデル・データを特定する。代わりに、OKボタンのコマンド内のデータ値を特定する選択オブジェクトであってもよい。
【0171】
ユーザがコントロールを処理するとき、コントロールのコマンドが実行されOKボタンのコマンド内のデータ値が変更される。ユーザがダイアログ・ボックス内の各コントロールを処理するとき、コントロールコマンドが実行されて、OKボタンのコマンド内のデータ値が変更される。このようにして、ユーザがOKボタンを押すと、OKボタン内のコマンドがコントロールのコマンドにより処理されるようにそれ自身内に含まれるデータ値に一致するようにリアル・モデル・データを更新する。この処理はコントロールの処理が完了するまで繰り返される。
【0172】
(ラベル)
ラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。それらはウィンドゥ、メニュー、ボタン、および他のコントロールを同定するために使用される。ラベルはそれらのコンテナの状態に従ってそれらの外見を変えることができる。それらは中間明度の灰色のバックグラウンド上に描かれ、特別の状態を表示する必要のないときに自然に現われる。ラベルは、非アクティブのとき、禁止されているとき、あるいは選択されたとき、その外見を変える。
【0173】
(非アクティブ)
ウィンドゥ・タイトルはウィンドゥが正面最上部でないとき非アクティブにセットされる。同様に、コントロールのラベルはコントロールが正面最上部のウィンドゥあるいはコンテナ内にないとき非アクティブにセットされる。グラフィック・ラベルは、薄暗く出現させるために、非アクティブのとき55%の白と混ぜられている。テキスト・ラベルでは、非アクティブペイントはHSVカラー・モデルの飽和成分を処理することにより自然のペイントから導かれる。飽和は、非アクティブのとき0.45倍される。
【0174】
(禁止(ディスエーブル))
コントロール・ラベルはコントロールが特定のコンテキスト中で適用しないときには薄暗くされる。グラフィック・ラベルは非アクティブのときには薄暗くするため46%の白と混ぜられている。テキスト・ラベルでは、禁止ペイントはHSVカラー・モデルの飽和成分を処理することにより自然のペイントから導かれる。飽和は、禁止のときに0.54倍される。
【0175】
(選択)
コントロール・ラベルはコントロールが処理されるにつれてハイライトにされる。グラフィックとテキストはそれらの自然状態で描かれ、ハイライト状態のときに白いバックグラウンド上に描かれる。
【0176】
(スマート・コントロール・ラベル)
コントロールはオブジェクトあるいはデータの現在の状態を決定するためのコマンドを使用する。ユーザとの適切な対話に続いて、コントロールはコマンド・パラメータを更新してそれが実行されるようにする。例えばチェックボックスはコマンド・パラメータをオンあるいはオフにセットして、そのコマンドを実行してデータ値を変更する。コントロールはその機能を示すようにラベルを表示する。このラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。コントロールが状態を変えるとき、ラベルは、開発者が付加的なコードを書くことを要求することなく自動的にその出現を変える。これらの状態は、アクティブ/非アクティブ、イネーブル/ディスエーブルおよび選択/非選択を含む。
【0177】
第15図はスマート・ラベル処理と関連する詳細論理を示し、その処理は開始ターミナル1500に進む。そこでは、コントロールはスマート・ラベルの初期化のためすぐに1510に進む。コントロールが生成されるとき、そのラベルはその関連するコマンドにより提供されるテキスト・ストリングあるいはグラフィックで初期化される。各コマンドはこの目的のためGetGraphicとGetNameと呼ばれるメソッドを提供する。コントロールはメソッドSetActiveをコールすることにより現在アクティブか非アクティブかをラベルに知らせる。同様に、コントロールはSetEnabledメソッドをコールしてそれがイネーブルであるか否かをラベルに知らせる。また、SetSelectedメソッドをコールしてユーザにより現在選択されているか否かをラベルに知らせる。
【0178】
スマート・ラベル処理での次のステップはラベルが描かれるとき機能ブロック1520で起きる。コントロールが活性化されているとき、それはそのラベルの描写(Draw)メソッドをコールしてラベルをその画面上に出現させる。非アクティブならばラベルは通常よりも薄暗く描かれる。これはHSVカラー・モデルの飽和成分を処理することによりなされる。飽和は非アクティブのとき0.45倍される。ディスエーブルならば、ラベルは通常よりも薄暗く描かれる。これはHSVカラー・モデルの飽和成分を処理することによりなされる。飽和はラベルがディスエーブルのとき0.54倍される。選択されたならば、ラベルはハイライトされたバックグラウンド上に出現させられる。ラベルは通常、中間色グレーのバックグラウンド上に描かれる。ハイライトされるときラベルは白いバックグラウンド上に描かれる。他には、ラベルは通常通り描かれる。
【0179】
次の処理はラベルが機能ブロック1530に示されるように活性化されている/非活性化されているとき起きる。コントロールが活性化されているあるいは非活性化されているとき、それはSetActive メソッドをコールしてラベルに知らせる。コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきで無効化(Invalidate)をコールすることによりその出現を更新することが必要であることを示す。その後、機能ブロック1540で、処理はコントロールがイネーブルあるいはディスエーブルされるとき起きる。コントロールは、イネーブルあるいはディスエーブルされるとき、SetEnabledメソッドをコールすることによりラベルに知らせる。その後、コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきで無効化(Invalidate)をコールすることによりその出現を更新することが必要であると示す。
【0180】
テストが判定ブロック1550で実行され、コントロールが選択されているか非選択であるかを判定する。コントロールが選択されあるいは非選択であるときは、SetSelected メッソドをコールすることによりラベルに知らせる。その後、コントロールは、再描画される必要がある画面の一部を示すアーギュメントつきでInvaliate(無効化)をコールすることによりその出現を更新することが必要であると示し、コントロールは更なる処理のため機能ブロック1520に進む。
【0181】
(スマート・ウィンドゥ・ラベル)
タイトルはその目的を示すためにウィンドゥ内に表示される。例えばドキュメントを編集するためのウィンドゥのためのタイトルは通常ドキュメントの名称である。ラベル・オブジェクトはタイトルの追尾を保つために使用される。このラベルはグラフィックあるいはテキスト・ストリングを含むグラフィック・オブジェクトである。ウィンドゥが状態を変えると、ラベルは、開発者が付加的なコードを書くことを要求することなく、その出現を自動的に調整する。ウィンドゥはアクティブあるいは非アクティブのどちらかである。スマート・ウィンドゥ・ラベル処理は第16図のフローチャートで示され、その詳細論理はそれを参照して説明される。
【0182】
第16図の処理はターミナル1600に進み、そこでコントロールはタイトルが初期化されるべきために機能ブロック1610にすぐに進む。ウィンドゥ・タイトルはウィンドゥが生成されるとき開発者により特定される。このタイトルはfTitleと呼ばれるTLabelオブジェクト内に格納される。コントロールは、メソッドSetActive をコールしてアクティブかあるいは非アクティブかをタイトルに知らせる。その後機能ブロック1620に進む。ウィンドゥが描かれるとき、そのfTitleオブジェクトのDrawメソッドをコールしてタイトルが画面上に出現するようにする。非アクティブのときタイトルは通常より薄暗く描かれる。これはHSVカラー・モデルの飽和成分を処理することによりなされる。飽和はラベルが非アクティブのとき0.45倍される。他の場合には、タイトルは通常通り描かれる。
【0183】
次のステップはタイトルが機能ブロック1630で活性化されている/非活性化されているとき処理される。ウィンドゥが活性化されているあるいは非活性化されているとき、それはSetActiveメソッドをコールしてそのfTitleオブジェクトに知らせる。その後、ウィンドゥは、再描画される必要がある画面の一部を示すアーギュメントつきでInvalidateをコールすることによりその出現は更新することが必要であると示す。その後、その新しい状態を反映するようにタイトルを再描画するためにコントロールは機能ブロック1620に戻る。
【0184】
(デコレーション)
ユーザ・インターフェイス要素の多くの視覚的測面は、多くの要素間で共通である。例としてシャドウ、境界、およびラベルがある。個々の可視的特徴はデコレーションとして参照される。デコレーションは他のグラフィックスと結合されてウィンドゥとコントロールのような特定のユーザ・インターフェイス要素の可視的形状を形成する。本発明の主題は多くのことなる形式のデコレーションをサポートすることである。
【0185】
(バックグラウンド)
他のオブジェクトの後ろに描かれるデコレーションはバックグラウンドと呼ばれる。1つの形式のバックグランドは周囲の描画面とフラッシュするように描かれる。それはフレームつきであるいはフレーム無しで描かれてもよい。他の形式のバックグランドはハイライトとシャドウつきで描かれ、それは回りの描画面から持ち上げられているように見える。最後の形式のバックグランドはハイライトとシャドウつきで描かれ、それは周囲の描画面より後退して見える。
【0186】
これらのバックグランドの使用例はボタンである。通常ボタンを述べるテキストあるいはグラフィックは持ち上がったバックグランドの上に描かれる。ユーザにより押されると、テキストあるいはグラフィックは後退したバックグランド上に再描画される。他のウィンドゥがアクティブのときのようにボタンが非アクティブならば、ボタンのテキストあるいはグラフィックはフラッシュ・バックグランド上に薄暗く描かれる。
【0187】
(境界)
他のオブジェクトあるいはエリアを囲むデコレーションは境界と呼ぶ。境界の例はフレームとシャドウである。フレームはリアル・ワールド内でのペイントを包み込むフレームのように他のグラフィックを囲む境界である。バックグランドのように、フレームは、周囲の描画面よりしたに後退したように、フラッシュするように、あるいはそれより持ち上がったように描くことができる。シャドウはオブジェクトの回りにシャドウを加える特定の形式の境界であり、周囲面より浮いているかのようにそれを見せる。
【0188】
ユーザ・インターフェイス要素の多くの視覚的測面は、多くの要素間で共通である。例としてシャドウ、境界、およびラベルがある。これらの個々の視覚的特徴の各々はデコレーションとして参照される。デコレーションは他のグラフィックスと結合されてウィンドゥとコントロールのような特定のユーザ・インターフェイス要素の視覚的形状を形成する。あるデコレーションはハイライトとシャドウを用いて周囲描画面より上にあるいは下にあるかのように見せる。デコレーションはこれらのハイライトとシャドウのペイントを自動的に導くことができる。
【0189】
(塗りつぶし(Fill Paint))
塗りつぶしはデコレーションの基本的カラーを表す。すべての他のペイントは塗りつぶしから導かれる。塗りつぶしはfFillPaintと呼ばれるカラー・フィールド内に管理者により格納される。塗りつぶしは通常、デコレーションが生成されるときに作成者により特定される。しかしながら、カラーが特定されないと、中間色グレーが選択される。
【0190】
(フレーム・ペイント(Frame Paint))
フレーム・ペイントはデコレーションの回りに線を描くために使用され可視的なコントラストを提供する。フレーム・ペイントはfFramePaintと呼ばれるTColorのフィールド内にデコレーションにより格納される。フレーム・ペイントはデコレーションが生成されるとき開発者により特定されてもよい。しかしながら、フレーム・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはHSVカラー・モデルの飽和と値成分を処理することによりなされる。飽和は最大値が1として、4倍される。値は4で割られる。
【0191】
(ハイライト・ペイント(Highlight Paint))
ハイライト・ペイントは、オブジェクトが実際の3次元オブジェクトであるならば光がそのオブジェクトにあたる線を描くために使用される。ハイライト・ペイントはfHighlightPaintと呼ばれるTColorフィールド内にデコレーションにより格納される。ハイライト・ペイントはデコレーションが生成されるとき開発者により特定されてもよい。しかしながら、ハイライト・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはHSVカラー・モデルの飽和と値成分を処理することによりなされる。飽和は0.8倍される。値は最大値を1として、1.25倍される。
【0192】
(シャドウ・ペイント(Shadow Paint))
シャドウ・ペイントは、オブジェクトが実際の3次元オブジェクトであるならば光がそのオブジェクトにあたる線を描くために使用される。ハイライト・ペイントはfHighlightPaintと呼ばれるTColorフィールド内にデコレーションにより格納される。ハイライト・ペイントはデコレーションを生成するとき開発者が特定してもよい。しかしながら、ハイライト・ペイントが特定されないと、塗りつぶしから自動的に計算される。これはHSVカラー・モデルの飽和と値成分を処理することによりなされる。飽和は0.8倍される。値は最大値を1として、1.25倍される。
【0193】
(セマンティックからの入力シンタクスの分離)
グラフィック・ユーザ・インターフェイスはマウスを動かし、それらを選択するためにオブジェクトをクリックし、移動またはコピーのためにオブジェクトをドラッグし、その後それらをオープンするためにダブル・クリックすることにより処理される。これらのオペレーションは直接操作あるいは対話と呼ばれる。マウスをユーザが押し、動かし、離すことに対応するイベントのシーケンスは入力シンタクスと呼ばれる。あるイベント・シーケンスは、セマンティック・オペレーションと呼ばれる特定のアクションを示すために使用される。
【0194】
セマンティック・オペレーションを処理するコードから入力シンタクスを理解するためのコードを分離することは本発明の主題である。この処理は対話(Interacts)と対話可能(Interactable)と呼ばれるオブジェクト内にそれぞれ埋め込まれる。第17図はオブジェクトがどのようにして生成され、動かされ選択されることができるオブジェクトとの一般的な対話の間でどのように互いに通信するかを示す。
【0195】
処理はターミナル1700に進み、そこでコントロールは機能ブロック1710にすぐに通され、マウス・ボタンが押されたかどうかを決定する。マウス・ボタンが押された位置で画面の一部に対して応答可能なオブジェクトにイベントが送られる。このオブジェクトはビュー(View)と呼ばれる。その後、機能ブロック1720で、インタラクタ(Interactor)が入力シンタクスを説明するために生成される。これはビューのメソッド・インタラクタ生成(CreateInteractor)をコールすることによりなされる。インタラクタ(Interactor)が生成されると、可能なユーザ・アクションを実行するオブジェクトへのポインタがパラメータとして渡される。
【0196】
この議論のために、ユーザが、選択され動かされることができるオブジェクト上でマウス・ボタンを押したとする。この場合、選択を実行するオブジェクトと目標オブジェクトに向かって移動するオブジェクトとがパラメータとしてインタラクタ(Interactor)に渡される。初期のビュー(View)はこれらの振る舞いの両方を実行することができるであろう、あるいはそれらは1つあるいは2つの別のオブジェクトにより実行されることができるであろう。オブジェクトあるいは複数のオブジェクトは対話可能(Interactable)と統括的に呼ばれる。
【0197】
インタラクタ(Interactor)は機能ブロック1730で開始される。この処理はインタラクタ(Interactor)Viewに戻してインタラクタ(Interactor)の処理を進める。これはInteractorStartメソッドをコールしてパラメータとして初期マウス・イベントを渡すことによりなされる。Start メソッドはfInitialEventに初期マウス・イベントを保存する。インタラクタ(Interactor)は変数fIntercationTypeを定数kSelectにセットすることにより選択(Select)モードにはいる。それはそのSelectBeginメソッドをコールすることにより選択動作を開始するようインタラクタブル(Interactable)に依頼する。
【0198】
その後、インタラクタ(Interactor)は、短い時間待って、機能ブロック1740で示されるように、通過する。新しいマウス・イベントが、マウスの現在の状態を示す時間となったとき、インタラクタ(Interactor)に送られる。その後、システムはマウスが判定ブロック1750でまだ押されていることを検出すると、コントロールは機能ブロック1740にまで通される。他に、コントロールはターミナル1760に通される。マウス・ボタンがまだ押されていれば、インタラクタ(Interactor)はまだ正しい状態にあると確信して、Interactableに正しい操作を実行するよう依頼する。インタラクタ(Interactor)はfInteractionがkSelectionであれば、Selecting (選択中)である。fInteractionTypeがkMoving であれば、それはMoving(移動中)である。
【0199】
選択(select)中ならば、インタラクタ(Interactor)は現在のマウス位置と初期マウス位置を比較する。現在のマウス位置はGetCurrentLocationをコールすることにより得られる。初期マウス位置はGetInitialLocationをコールすることにより得られる。2つが同じかあるいは多少しか異ならなければ、ユーザはまだオブジェクトを選択している。その後、インタラクタ(Interactor)は、そのSelectRepeatメソッドをコールすることにより選択操作を継続するようInteractableに依頼する。しかしながら、2つの点が予め決められたスレッシュホールド以上に異なるときには、ユーザはオブジェクトを動かし始めている。この場合、インタラクタ(Interactor)はそのSelectEndメソッドをコールすることにより選択操作を終了するようInteractableに依頼する。その後、その移動開始メソッドをコールして移動動作を始めるようにInteractableに依頼する。各々の場合、現在のマウス位置は引数(argument)として渡される。Moving(移動中)ならば、インタラクタ(Interactor)はMoveRepeatをコールして移動動作を継続するようインタラクタブルInteractableに依頼する。それは引数(argument)として現在のマウス位置を渡す。
【0200】
ユーザがマウス・ボタンを離すとき、それは現在の動作の終了を知らせる。Selecting(選択中)ならば、インタラクタ(Interactor)は、そのSelectEndメソッドをコールして選択動作を終了するようInteractableに依頼する。移動中ならば、インタラクタ(Interactor)はそのMoveEndメソッドをコールして移動動作を終了するようInteractableに依頼する。
【0201】
(局所化プレゼンテーション)
局所化はアプリケーションを更新するプロセスであり、特定の場所のユニークな表現に従う。それは、言語の翻訳、グラフィック置換、およびインターフェイス要素の再配向を含む。例えば、ラベル、タイトル、およびメッセージの中で使用されるテキストは選択された言語に依存する。その方向と配向はメニュー、メニュー・バー・タイトル、スクロールバーあるいはツールバーの配置と配向に影響を与える。同様に、アイコンと他のグラフィックシンボルの選択は開発に依存する。不幸にも、メモリ内にユーザ・インターフェイス要素の多くの局在化されたバージョンをもつことは非常に高いものとなる。代わりに、ユーザ・インターフェイス要素の局在化バージョンは、メモリ内で要求されるまでディスク上に保たれる。
【0202】
さらに、ユーザ・インターフェイス要素のすべての追尾を保ち、どのバージョンが使用されるべきかを決定することは非常にエラーとなりやすく高価である。代わりに、ユーザ・インターフェイス要素が要求されるとき適切なものが現在の言語と他の文化的パラメータに従ってシステムにより自動的に選択しメモリに読み込む。
【0203】
一旦局所化されると、ユーザ・インターフェイス要素はディスク・ディクショナリ内に格納される。ディスク・ディクショナリは、キーに与えられるとき、それをディスク内にあるいはディスクから読んだあとに値を戻るオブジェクトである。このディスク・ディクショナリは保管所(アーカイブ)と呼ばれるオブジェクトにより管理される。アーカイブは特定の表現を構成する個々のユーザ・インターフェイス要素を一緒に置く。適当なユーザ・インターフェイス要素の選択のプロセスは第19図に提供される。
【0204】
処理はターミナル1900に進み、ユーザがプレゼンテーションをリクエストするときすぐに機能ブロック1910に通される。TOpenPresentationCommandはデータ・モデルに送られ、ユーザがこのデータをビューあるいは編集したいということを示す。このコマンドはTOpenPresentationCommand呼ばれる。プレゼンテーションはユーザがあるデータをビューしあるいは編集することを可能とするユーザ・インターフェイス要素の組である。プレゼンテーションはユーザ・インターフェイス・オブジェクト内の期間に渡って格納され、このようにしてユーザのために連続性を維持する。ユーザ・インターフェイス要素はメモリ内で必要となるまでディスクに格納される。それらはユーザがリクエストしたデータプレゼンテーションの一部として要求され、あるいは翻訳あるいは他の局所化プロセスのために必要とされることがある。各ユーザ・インターフェイス要素はその要素をユニークに参照するIDを含む。しかしながら、同じユーザ・インターフェイス要素のすべての局在化バージョンは単一のIDを共有する。
【0205】
局在化バージョンを異ならせるために、特定の言語、記述方向、および他の文化的パラメータが各局在化されたユーザ・インターフェイス要素と共に格納される。一緒に、これらのパラメータは場所として参照される。ユーザ・インターフェイス要素のすべてはファイルに格納される。このファイルは1つあるいはそれ以上のキー/値の対付きで、ディクショナリと同様に組織化される。そのキーはIDと場所を結合するオブジェクトである。値はユーザ・インターフェイス要素それ自身である。
【0206】
新しいプレゼンテーションが機能ブロック1920で次に生成されなければならない。適切なプレゼンテーションは既に存在しないので、新しいものがユーザ・インターフェイス、アーカイブによりテンプレートから生成されなければならない。新しいプレゼンテーションはそのCreatePresentationメソッドをコールすることによりアーカイブの中に格納されるテンプレートから生成される。プレゼンテーションの形式はパラメータとしてこのメソッドに渡される。この形式は、表示されるべきデータの形式、それがそれ自身のウィンドゥあるいは他のプレゼンテーションの一部の中に存在すべきか否か等の情報を含む。最後に、機能ブロック1930で、アーカイブは場所に従ってユーザ・インターフェイス要素を選択して、プレゼンテーションを構築する。アーカイブが特定の形式のプレゼンテーションを構築することができれば、それはプレゼンテーションを構築しユーザ・インターフェイス・オブジェクトにこれを戻す各ユーザ・インターフェイス要素を一緒に集める。
【0207】
アーカイブが構築することができる各プレゼンテーションでは、それはプレゼンテーションを一緒に構築するユーザ・インターフェイス要素のリストをもつ。ユーザ・インターフェイス要素はコールされたディスク・ディクショナリにより維持されているディスク上に格納される。キーを与えると、ディスク・ディクショナリは対応するユーザ・インターフェイス要素を戻す。ユーザ・インターフェイス要素のIDはこのキーの基本的部分を構成する。キーの第2の要素は望ましい場所である。場所は、ユーザの自然言語と他の文化的属性を特定するオブジェクトである。場所は、参照サーバ(Preferences Server)からアーカイブにより自動的に得られる。このサーバはユーザに関連する個々の好みのすべてを含む。
【0208】
好みのサーバから得られる場所はIDと共に、TUserInterfaceElementKeyと呼ばれる単一のオブジェクトの中に結合される。このキーはパラメータとしてディスク・ディクショナリのGetValueメソッドに渡される。一致するIDと場所もつユーザ・インターフェイス要素が見つけられると、プレゼンテーションの一部として戻され含まれる。他に、場所パラメータはキーから省略されなければならず、あるいは他の場所がユーザ・インターフェイス要素が見つけられるまで特定されなければならない。
【0209】
(対話フレームワーク・システム)
オブジェクト指向オペレーティング・システムのグラフィック・ユーザ・インターフェイスのユーザは、しばしば、マウスを動かし、オブジェクトを選択するためにクリックし、移動あるいはコピーのためにオブジェクトをドラッグし、その後オブジェクトをオープンするためにダブル・クリックする。これらの動作は直接操作あるいは対話と呼ばれる。マウスをユーザが押し、移動し、離すことに対応するイベントのシーケンスは入力シンタクスと呼ぶ。あるイベント・シーケンスが特定のアクションを示すために使用され、セマンティック動作と呼ばれる。本発明は、Select(選択),Peek(ピーク),Move(移動),AutoScroll(自動スクロール)およびDrag/Drop(Copy)(ドラッグ/ドロップ)(コピー)をサポートするオブジェクトのセマンティック動作に入力シンタクスを翻訳するための方法と装置を開示する。
【0210】
本発明は、マウス・ボタンの押下を検出し以下の論理を採用する。
(a)ユーザがマウス・ボタンを押したときオプション・キーが押されていたら、システムは変数fInteractionTypeを定数kDragにセットすることによりドラッグ・モードに入る。その後システムは動作の目標として選択されたオブジェクトを用いてドラッグ動作を進める。あるいは、
(b)オプション・キーが押されていなかったならば、システムは変数fInteractionTypeを定数kSelectにセットすることにより選択モードに入る。その後、選択動作が進められる。
【0211】
ユーザが既にマウス・ボタンを押していて押したままに保っているときには、以下の論理が関係する。システムは選択モードにあり、システムは最初にユーザがマウスを、移動スレッシュホールドと呼ばれるあるスレッシュホールド以上に動かしたか否かを判定する。これは、GetInitialLocationメソッドにより戻される初期のマウス位置をGetCurrentLocationメソッドにより戻される現在のマウス位置と比較することによりなされる。マウスが移動スレシュホールド以上に動かされていればシステムは選択モードを終了し移動モードに入る。それは変数InteractionTypeを定数kMoveセットすることにより行う。システムはその後そのSelectEndメソッドをコールして選択動作を終了するようオブジェクトをクエリーする。その後、システムはそのMoveBeginメソッドをコールすることにより移動動作を開始する。
【0212】
他に、マウスが動いていないときには、システムはマウスがどのくらい長く押されたままかをチェクするGetCurrentTimeメソッドにより戻される現在の時間を比較することによりなされる。マウスがピーク(peek)スレシュホールドと呼ばれるあるスレシュホールド以上押下されたままならば、システムは選択モードを終了しピーク・モードに入る。それは変数fInteractionTypeを定数kPeekにセットすることにより行う。それは、そのSelectEndメソッドをコールして選択動作を終了するようオブジェクトに依頼して、そのPeekBeginメソッドをコールしてピーク動作を開始する。他に、マウスが動かされないとき、あるいはあるピーク・スレシュホールドを越えて押されなときは、システムはオブジェクトのSelectRepeatをコールして選択動作を継続する。システムがユーザが移動モードにあることを検出したときは、システムはまずユーザがウィンドゥ内で、あるいはウィンドゥの境界上で、あるいはウィンドゥの外でマウスを動かしたか否かを判定する。それは、GetCurrentLocationメソッドにより戻される現在マウス位置とGetContainerBoundsにより戻されるオブジェクトのコンテナの境界とを比較して行う。
【0213】
マウスがまだウィンドゥ内にあれば、システムはオブジェクトのMoveRepeat(移動反復)メソッドをコールして移動動作を継続する。マウスがウィンドゥの境界上にあれば、これは自動スクロール動作を示す。システムはマウス位置により示される方向にスクロールするようにオブジェクトのコンテナに依頼する。これは、コンテナのAutoScrollメソッドをコールして、現在のマウス位置をパラメータとして通すことによりなされる。一旦完了すると、システムは、オブジェクトのMoveRepeatメソッドをコールして移動動作を継続する。
【0214】
マウスがウィンドゥの外にあれば、システムは移動動作を終了してドラッグ・モードに入る。それは、変数fInteractionTypeに定数kMoveをセットすることにより行う。それは、そのMoveEndメソッドをコールして移動動作を終了するようオブジェクトに依頼する。それは、そのDragBeginメソッドをコールしてドラッグ動作を開始するようにオブジェクトに依頼する。システムがドラッグ・モードにあるときには、システムはオブジェクトのDragRepeatメソッドをコールしてドラッグ動作を継続する。システムがピーク・モードにあるときには、システムは最初に、移動スレッシュホールドと呼ばれるあるスレッシュホールドを越えてマウスをユーザが移動したか否かを判定する。これは、GetInitialLocationメソッドにより戻される初期マウス位置とGetCurrentLocationメソッドにより戻される現在マウス位置とを比較してこれを行う。
【0215】
マウスが移動スレシュホールドを越えて動いていたときには、システムはピーク動作を終了して移動モードに入る。それは、変数fInteractionTypeを定数kMoveにセットすることにより行う。それは、そのPeekEndメソッドをコールしてピーク動作を終了するようオブジェクトに依頼する。それは、そのMoveBeginメソッドをコールして移動動作を開始する様にオブジェクトに依頼する。他に、マウスが動かされていないときには、システムはオブジェクトのPeekRepeatメソッドをコールしてピーク動作を継続する。
【0216】
システムがマウス・ボタンをユーザが離したことを検出したときには、選択モードにあれば、システムは選択モードを終了する。それは変数fInteractionTypeを定数kNoneにセットすることにより行う。システムはそのメソッド選択終了をコールして選択動作を終了するようオブジェクトにクエリーする。システムが移動モードにあるときには、システムは移動モードを終了する。それは変数fInteractonTypeを定数kNoneにセットすることによりこれを行う。その後、システムはそのMoveEndメソッドをコールして移動動作を終了するようオブジェクトにクエリーして、変数fInteractonTypeを定数kNoneにセットすることによりドラッグ・モードを終了する。システムがピーク・モードにあるときには、システムはピーク・モードを終了する。それは変数fInteractonTypeを定数kNoneにセットすることにより行う。それは、そのPeekEndメソッドをコールしてピーク動作を終了するようオブジェクトに依頼する。
【0217】
ユーザがスクロールバーを動かすにつれて動的にウィンドゥの内容を更新することを可能とするハードウェアとソフトウェアのシステムを提供することが本発明の基本的目的である。システムはユーザがスクロールバーを押したことを検出する。ユーザがスクロールバーを押したとき、システムはスクロール・コマンドの初期化を始め、ウィンドゥ内に表示されているデータ部分を変更する。コマンドはスクロールのようなエンド・ユーザ・アクションを処理するオブジェクトである。スクロール・コマンドは1つのパラメータ、内容のビューがスクロールされるべき位置を有する。システムはこの位置を現在のスクロール位置にセットする。これは、コマンドのSetScrollPositionメソッドをコールして、スクロールバーのメソッドのGetScrollPositionにより戻される値に位置にスクロールを設定することによりなされる。
【0218】
ユーザがスクローバー内でマウスを動かすときには、システムはスクロール・コマンドの実行を継続してウィンドゥ内に表示されているデータ部分を動的に変更する。システムはコマンドのスクロール位置を新しいスクロール位置にセットする。この処理はコマンドSetScrollPositionをコールしてスクロールバーのメソッドのGetScrollPositionにより戻される値に等しく値をセットすることによりなされる。コマンドの実行は、その後、そのDoRepeatメソッドをコールすることにより繰り返される。これによりビューの内容が新しい位置にスクロールされる。この処理はユーザがマウス・ボタンを押し続けている間継続する。
【0219】
ユーザがマウス・ボタンを離したときには、システムはスクロール・コマンドの実行を終了してウィンドゥ内に表示されているデータ部分を動的に変更する。システムはコマンドのスクロール位置を最終スクロール位置にセットする。この処理はコマンドSetScrollPositionをコールしてスクロールバー・メソッドのGetScrollPositionにより戻される値に位置にそれが等しくなるようにセットすることによりなされる。
【0220】
第20図は本発明によるスクロールと関連する詳細論理を示すフローチャートである。処理はターミナルブロック2000に進み、すぐに機能ブロック2010に通される。そこで、現在のスクロール位置が現在のカーソル位置に基づいて初期化される。その後、判定ブロック2020で、スクロールバーつまみ(scrollbar thumb) 選択されたかどうかを検出するようにテストを行う。スクロールバーつまみの例を第21A図にラベル2110に示す。スクロールバーつまみが選択されたときには、コントロールは、スクロールバーが動かされたか否かを判定するために判定ブロック2030に通される。そうならば、スクロール位置はスクロールバーつまみの新しい位置に送られ、表示がすぐスクロール動作に反映して再フォーマットされユーザのために表示がなされる。スクロールバーつまみが動いていなければ、他のテストが判定ブロック2050で行われ、スクロールバーつまみが離されたか否かが判定される。そうでなければ、コントロールは判定ブロック2030に戻される。スクロールバーつまみが離されていれば、コントロールは機能ブロック2060に通され、スクロール動作を終了してシステムを非スクロール動作状態に戻り、処理はターミナル2070で完了する。
【0221】
第21A図、第21B図、および第21C図は本発明によるウィンドゥ・スクロールを示す。第21A図では、スクロールバーつまみ2110はウィンドゥ2112の最上部にある。第21B図は、スクロールバーつまみ2120がウィンドゥの中央に動かされ、従ってウィンドゥの内容2122が更新されることを示す。第21図は、スクロールバーつまみ2140がウィンドゥの底部に動かされ、ウィンドゥの最も底の部分が表示されていることを示している。
【図面の簡単な説明】
【0222】
【図1A】本発明のパーソナル・コンピュータ・システムのブロック図である。
【図1B】本発明による表示を示す図である。
【図2】本発明によりアプリケーションを生成するために使用されるツールを示す図である。
【図3】本発明によるコマンド・プロセスのフローチャートである。
【図4】本発明によるチェックボックス・コントロールを示す図である。
【図5】本発明によるチェックボックス・コントロールの活性化を示す図である。
【図6】本発明によるチェックボックスの更新を示す図である。
【図7】本発明によるチェックボックス・コントロール処理の要約を示す図である。
【図8】本発明によるコントロール・パネルを示す図である。
【図9】本発明によるダイアログ・ボックスを示す図である。
【図10】本発明によるダイアログ・ボックス・カラー・コントローラを示す図である。
【図11】本発明によるラジオ・ボタンを示す図である。
【図12】本発明によるメニュー状態処理の詳細なフローチャートである。
【図13】本発明による表示の絵を示す図である。
【図14】本発明による原子実行の詳細論理を示す図である。
【図15】本発明によるスマート・ラベル処理と関連する詳細論理を示す図である。
【図16】本発明によるスマート・ウィンドゥ・ラベル処理の詳細論理を示す図である。
【図17】本発明により動かされ選択されることができるオブジェクトとの一般的対話の間にどのようにしてオブジェクトが生成されるかとどのようにしてオブジェクトが相互に通信するかを示す図である。
【図18】本発明による通知ソース・オブジェクトのためのオブジェクト生成通知フローチャートである。
【図19】本発明による適当なユーザ・インターフェイス要素を選択することと関連する詳細論理を示すフローチャートである。
【図20】本発明によるスクロールと関連する詳細論理を示すフローチャートである。
【図21A】本発明によるウィンドゥ・スクロールを示す図である。
【図21B】本発明によるウィンドゥ・スクロールを示す図である。
【図21C】本発明によるウィンドゥ・スクロールを示す図である。
【符号の説明】
【0223】
10 中央演算装置
12 システム・バス
14 ランダム・アクセス・メモリ(RAM)
16 リード・オンリ・メモリ(ROM)
18 I/Oアダプタ
20 ディスク・ユニット
22 ユーザ・インターフェイス・アダプタ
24 キーボード
26 マウス
28 スピーカー
32 マイクロフォン
34 通信アダプタ
36 表示アダプタ
38 表示装置
【特許請求の範囲】
【請求項1】
プロセッサと表示装置とを含むコンピュータ・システムにおいて、ポインタ画像を制御するユーザ操作ボタンを有するカーソル位置決定デバイスと、特定の機能を実行する論理とデータを有する複数のオブジェクトを含むオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する装置であって、
(a)前記オブジェクト指向アプリケーション・プログラムにおける論理とデータを有する複数のオブジェクトの1つであって、前記表示装置にアイコンおよびサムネイルの両方を表示する論理と、前記表示装置上で前記アイコンを操作する論理とを含む対話可能オブジェクトと、
(b)前記カーソル位置決定デバイスのユーザ操作ボタンの押下に応答して、デバイス・イベント信号を生成する手段と、
(c)前記表示装置上の前記ポインタ画像の物理的な位置に応答して、デバイス位置信号を生成する手段と、
(d)前記デバイス・イベント信号に応答して、前記ユーザ操作ボタンが所定の時間間隔でいつ押下されたかを検出するタイミング手段と、
ピークしきい値を格納する記憶手段と、
前記所定の時間間隔および前記ピークしきい値に応答して、前記ユーザ操作ボタンが前記ピークしきい値よりも長く押下されたときピークメッセージを生成する手段と、
前記ピークメッセージに応答して、前記対話オブジェクトの論理を用いて前記アイコンの表示から前記サムネイル表示に前記表示装置を変更する手段とを含む対話オブジェクトと
を備えたことを特徴とする装置。
【請求項2】
前記表示装置は、表示領域を有し、
前記装置は、
(e)前記対話可能オブジェクトと協働して、前記アイコンが前記表示装置のどこに位置するかを判定する手段と、
前記表示装置上の選択された領域の境界を判定する手段と、
前記アイコンが前記表示装置のどこに位置するか、および前記境界に応答して、前記アイコンが前記境界に位置したときに位置信号を生成する手段とを含むビュー・オブジェクトをさらに備え、
前記対話オブジェクトは、前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記対話可能オブジェクトの論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かすことを特徴とする請求項1に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項3】
前記表示装置は、表示領域を有し、
前記装置は、
(e)前記対話可能オブジェクトと協働して、前記アイコンが表示されている前記表示領域における表示位置を判定する手段と、
前記表示領域内の選択された領域の境界を判定する手段と、
前記表示位置および前記境界に応答して、前記アイコンが前記境界に位置したときに位置信号を生成する手段とを含むビュー・オブジェクトをさらに備え、
前記対話オブジェクトは、
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記ビュー・オブジェクトの論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かす手段と、
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記ビュー・オブジェクトの論理を用いて、前記アイコンが前記境界の外にあるとき前記動き操作を停止する手段と
を含むことを特徴とする請求項1に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項4】
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記ビュー・オブジェクトの論理を用いて、前記アイコンが前記境界の中にあるとき前記動き操作を続行する手段をさらに備えたことを特徴とする請求項3に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項5】
前記表示装置は、表示領域を有し、
前記装置は、
(e)前記対話可能オブジェクトと協働して、前記アイコンが表示されている前記表示領域における表示位置を判定する手段と、
前記表示領域内の選択された領域の境界を判定する手段と、
前記表示位置および前記境界に応答して、前記アイコンが前記境界に位置したときに位置信号を生成する手段とを含むビュー・オブジェクトをさらに備え、
前記対話オブジェクトは、
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記対話オブジェクトの論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かす手段と、
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記対話オブジェクトの論理を用いて、前記アイコンが前記境界の上にあるときスクロール操作を行う手段と
を含むことを特徴とする請求項1に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項6】
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記対話オブジェクトの論理を用いて、前記アイコンが前記境界の中にあるとき前記スクロール操作を続行する手段をさらに備えたことを特徴とする請求項5に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項7】
プロセッサと表示装置とを含むコンピュータ・システムにおいて、ポインタ画像を制御するユーザ操作ボタンを有するカーソル位置決定デバイスと、特定の機能を実行する論理とデータを有する複数のオブジェクトを含むオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する方法であって、
(a)前記論理とデータを有する複数のオブジェクトから対話可能オブジェクト生成し、前記オブジェクト指向アプリケーション・プログラムに関連付けられた特定の機能を実行するステップであって、前記対話可能オブジェクトは、前記表示装置にアイコンおよびサムネイルの両方を表示する論理と、前記表示装置上で前記アイコンを操作する論理とを含むステップと、
(b)前記ユーザ操作ボタンの押下に応答して、デバイス・イベント信号を生成するステップと、
(c)前記表示装置上の前記ポインタ画像の物理的な位置に応答して、デバイス位置信号を生成するステップと、
(d1)前記ユーザ操作ボタンが所定の時間間隔でいつ押下されたかを検出するステップと、
(d2)ピークしきい値を格納するステップと、
(d3)前記ユーザ操作ボタンが前記ピークしきい値よりも長く押下されたときピークメッセージを生成するステップと、
(d4)前記対話オブジェクトの論理を用いて前記アイコンから前記サムネイルに前記表示装置を変更するステップとを実行する対話オブジェクトを生成するステップと
を備えたことを特徴とする方法。
【請求項8】
前記表示装置は、表示領域を有し、
(e1)前記アイコンが表示された前記表示領域における表示位置を判定するステップと、
(e2)前記表示領域内の選択された領域の境界を判定するステップと、
(e3)前記アイコンが前記境界に位置したときに位置信号を生成するステップとを実行するビュー・オブジェクトを生成するステップをさらに備え、
前記対話オブジェクトは、
(d5)前記論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かすステップをさらに実行することを特徴とする請求項7に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項9】
前記表示装置は、表示領域を有し、
(e1)前記アイコンが表示されている前記表示領域における表示位置を判定するステップと、
(e2)前記表示領域内の選択された領域の境界を判定するステップと、
(e3)前記アイコンが前記境界に位置したときに位置信号を生成するステップとを実行するビュー・オブジェクトを生成するステップをさらに備え、
前記対話オブジェクトは、
(d5)前記ビュー・オブジェクトの論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かすステップと、
(d6)前記ビュー・オブジェクトの論理を用いて、前記アイコンが前記境界の外にあるとき前記動き操作を停止するステップとをさらに実行することを特徴とする請求項7に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項10】
前記対話オブジェクトは、
(d7)前記ビュー・オブジェクトの論理を用いて、前記アイコンが前記境界の中にあるとき前記動き操作を続行するステップをさらに実行することを特徴とする請求項9に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項11】
前記表示装置は、表示領域を有し、
(e)前記特定の機能を実行する論理とデータを有する複数のオブジェクトからビュー・オブジェクトを生成するステップであって、前記特定の機能は、
(e1)前記アイコンが表示されている前記表示領域における表示位置を判定するステップと、
(e2)前記表示領域内の選択された領域の境界を判定するステップと、
(e3)前記アイコンが前記境界に位置したときに位置信号を生成するステップとを実行するステップをさらに備え、
前記対話オブジェクトは、
(d5)前記論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かすステップと、
(d6)前記論理を用いて、前記アイコンが前記境界の上にあるときスクロール操作を行うステップとをさらに実行することを特徴とする請求項7に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項12】
前記対話オブジェクトは、
前記論理を用いて、前記アイコンが前記境界の中にあるとき前記スクロール操作を続行するステップをさらに実行することを特徴とする請求項11に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項13】
メモリと該メモリのシステムアドレス空間に格納されたオブジェクト指向オペレーティング・システムを有するコンピュータ・システムで使用する装置であって、デバイス・イベント信号を生成するユーザ入力装置と、前記メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する装置において、
(a)前記アプリケーションアドレス空間に、前記システムアドレス空間に格納された対話可能クラス情報から生成され、前記オブジェクト指向アプリケーション・プログラムによって使用されるデータおよび該データを操作する複数のメソッドを含む対話可能オブジェクトと、
(b)前記システムアドレス空間に、前記システムアドレス空間に格納された対話クラス情報から生成され、前記デバイス・イベント信号に応答して前記対話可能オブジェクトに含まれる前記オブジェクト操作メソッドのうち予め定められた1つを呼び出し、前記データを変更する対話オブジェクトと
を備えたことを特徴とする装置。
【請求項14】
前記コンピュータ・システムは、表示画面を含み、
前記対話可能オブジェクトは、前記表示画面に表示する画像を定義するデータを含むことを特徴とする請求項13に記載の装置。
【請求項15】
前記対話可能オブジェクトは、前記画像データを操作することにより前記表示画面上の画像のアピアランスを変更する選択メソッドを含むことを特徴とする請求項14に記載の装置。
【請求項16】
前記対話可能オブジェクトは、前記表示画面上の画像を動かすムーブ・メソッドを含むことを特徴とする請求項15に記載の装置。
【請求項17】
前記ユーザ入力装置は、マウスであり、
前記対話オブジェクトは、前記マウスからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すことを特徴とする請求項16に記載の装置。
【請求項18】
前記ユーザ入力装置は、キーボードであり、
前記対話オブジェクトは、前記キーボードからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すことを特徴とする請求項16に記載の装置。
【請求項19】
前記対話可能オブジェクトは、前記アプリケーションアドレス空間において、前記システムアドレス空間に格納された対話可能クラス情報から生成されることを特徴とする請求項13に記載の装置。
【請求項20】
前記対話オブジェクトは、前記デバイス・イベント信号に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の1つを呼び出し、前記要求された動作を実行することを特徴とする請求項13に記載の装置。
【請求項21】
前記対話オブジェクトは、前記デバイス・イベント信号の時間系列に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の1つを呼び出し、前記要求された動作を実行することを特徴とする請求項13に記載の装置。
【請求項22】
前記コンピュータ・システムは、表示画面を含み、
前記表示画面の一部に情報を表示する手段と、前記デバイス・イベント信号に応答するビュー・オブジェクトにおいて対話オブジェクトのインスタンスを作成する手段とを有するビュー・オブジェクトをさらに備えたことを特徴とする請求項13に記載の装置。
【請求項23】
メモリと該メモリのシステムアドレス空間に格納されたオブジェクト指向オペレーティング・システムを有するコンピュータ・システムで使用するコンピュータ・プログラム製品であって、デバイス・イベント信号を生成するユーザ入力装置と、前記メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供するコンピュータ・プログラム製品において、
(a)前記アプリケーションアドレス空間に、前記システムアドレス空間に格納された対話可能クラス情報から対話可能オブジェクトのインスタンスを生成するプログラム・コードであって、前記対話可能オブジェクトは、前記オブジェクト指向アプリケーション・プログラムによって使用されるデータおよび該データを操作する複数のメソッドを含むプログラム・コードと、
(b)前記システムアドレス空間に、前記システムアドレス空間に格納された対話クラス情報から対話オブジェクトのインスタンスを生成するプログラム・コードであって、前記対話オブジェクトは、前記デバイス・イベント信号に応答して前記対話可能オブジェクトに含まれる前記オブジェクト操作メソッドのうち予め定められた1つを呼び出し、前記データを変更するプログラム・コードと
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項24】
前記コンピュータ・システムは、表示画面を含み、
前記対話可能オブジェクトは、前記表示画面に表示する画像を定義するデータを含むことを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項25】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記画像データを操作することにより前記表示画面上の画像のアピアランスを変更する選択メソッドを含む前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項24に記載のコンピュータ・プログラム製品。
【請求項26】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記表示画面上の画像を動かすムーブ・メソッドを含む前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項25に記載のコンピュータ・プログラム製品。
【請求項27】
前記ユーザ入力装置は、マウスであり、
前記対話オブジェクトは、前記マウスからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すプログラム・コードを含むことを特徴とする請求項26に記載のコンピュータ・プログラム製品。
【請求項28】
前記ユーザ入力装置は、キーボードであり、
前記対話オブジェクトは、前記キーボードからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すプログラム・コードを含むことを特徴とする請求項26に記載のコンピュータ・プログラム製品。
【請求項29】
前記システムアドレス空間に前記対話可能クラス情報をロードするプログラム・コードをさらに備え、
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記アプリケーションアドレス空間において、前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項30】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記対話オブジェクトは、前記システムアドレス空間において、前記システムアドレス空間に格納された対話可能クラス情報から前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項31】
前記対話オブジェクトは、前記デバイス・イベント信号に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の1つを呼び出し、前記要求された動作を実行するプログラム・コードでインスタンス化されることを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項32】
前記対話オブジェクトは、前記デバイス・イベント信号の時間系列に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の1つを呼び出し、前記要求された動作を実行するプログラム・コードでインスタンス化されることを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項33】
前記コンピュータ・システムは、表示画面を含み、
前記表示画面の一部に情報を表示する手段と、前記デバイス・イベント信号に応答するビュー・オブジェクトにおいて対話オブジェクトのインスタンスを作成する手段とを有するビュー・オブジェクトのインスタンスを生成するプログラム・コードをさらに備えたことを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項34】
メモリを有するコンピュータ・システムにおいて動的スクリプト機能を実行する装置であって、各々がデータおよび該データを変更するメソッドを含むデータ・オブジェクトを含むドキュメントを前記メモリ内で操作する装置において、
各々が前記ドキュメントからの選択を形成する少なくとも1つのデータ・オブジェクトの定義に依存しないで、アドレス空間を定義するデータを含む複数の選択オブジェクトと、
各々がデータ変更コマンドと、該データ変更コマンドが適用される選択オブジェクトへの参照を含むコマンド・オブジェクトと、
前記メモリに一連のコマンド・オブジェクトからなるスクリプトを記憶する手段と、
前記スクリプトの前記一連のコマンド・オブジェクトの各々において、データ変更コマンドを連続して呼び出することにより前記スクリプトを実行し、各々の参照された選択オブジェクトにより定義された前記データ・オブジェクトにおいて選択されたデータ変更メソッドを実行する手段と
を備えたことを特徴とする装置。
【請求項35】
前記複数の選択オブジェクトの各々は、コマンド・オブジェクトのメソッドを呼び出すことにより構成されることを特徴とする請求項34に記載の装置。
【請求項36】
前記選択オブジェクトの少なくとも1つにより定義されたデータ・オブジェクトを変更することにより、前記スクリプトを変更する手段をさらに備えたことを特徴とする請求項34に記載の装置。
【請求項37】
前記スクリプトを変更する手段は、前記選択オブジェクトの少なくとも1つを変更して、前記定義されたデータ・オブジェクトを同じ前記ドキュメント内で他のデータ・オブジェクトに変更することを特徴とする請求項36に記載の装置。
【請求項38】
前記複数のコマンド・オブジェクトの各々は、前記データ変更コマンドが、前記選択オブジェクトで定義されたデータを操作することができるか否かを判断するメソッドを含み、前記スクリプトを変更する手段は、前記少なくとも1つ選択オブジェクトに対して前記判定メソッドを呼び出す手段を備えたことを特徴とする請求項37に記載の装置。
【請求項39】
前記スクリプトを変更する手段は、前記選択オブジェクトの少なくとも1つを変更して、前記定義されたデータ・オブジェクトを異なるドキュメント内のデータ・オブジェクトに変更することを特徴とする請求項36に記載の装置。
【請求項40】
前記複数のコマンド・オブジェクトの各々は、前記データ変更コマンドが、前記選択オブジェクトで定義されたデータを操作することができるか否かを判断するメソッドを含み、前記スクリプトを変更する手段は、前記少なくとも1つ選択オブジェクトに対して前記判定メソッドを呼び出す手段を備えたことを特徴とする請求項39に記載の装置。
【請求項41】
メモリを有するコンピュータ・システムにおいて動的スクリプト機能を実行するコンピュータ・プログラム製品であって、コンピュータ・プログラムは、各々がデータおよび該データを変更するメソッドを含むデータ・オブジェクトを含むドキュメントを前記メモリ内で操作し、前記コンピュータ・プログラム製品は、コンピュータ読取り可能プログラム・コードを有するコンピュータ利用可能媒体を含み、前記プログラム・コードは、
各々が前記ドキュメントからの選択を形成する少なくとも1つのデータ・オブジェクトの定義に依存しないで、アドレス空間を定義するデータを含む複数の選択オブジェクトのインスタンスを生成するプログラム・コードと、
各々がデータ変更コマンドと、該データ変更コマンドが適用される選択オブジェクトへの参照を含むコマンド・オブジェクトのインスタンスを生成するプログラム・コードと、
前記メモリに一連のコマンド・オブジェクトからなるスクリプトを記憶する手段と、
前記スクリプトの前記一連のコマンド・オブジェクトの各々において、データ変更コマンドを連続して呼び出することにより前記スクリプトを実行し、各々の参照された選択オブジェクトにより定義された前記データ・オブジェクトにおいて選択されたデータ変更メソッドを実行する手段と
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項42】
選択オブジェクトを構成するメソッドを含むコマンド・オブジェクトのインスタンスを生成するプログラム・コードと、
前記複数の選択オブジェクトの各々を構成するコマンド・オブジェクトのインスタンスを生成するプログラム・コードと
をさらに備えたことを特徴とする請求項41に記載のコンピュータ・プログラム製品。
【請求項43】
前記選択オブジェクトの少なくとも1つにより定義されたデータ・オブジェクトを変更することにより、前記スクリプトを変更するプログラム・コードをさらに備えたことを特徴とする請求項41に記載のコンピュータ・プログラム製品。
【請求項44】
前記スクリプトを変更するプログラム・コードは、前記選択オブジェクトの少なくとも1つを変更して、前記定義されたデータ・オブジェクトを同じ前記ドキュメント内で他のデータ・オブジェクトに変更することを特徴とする請求項43に記載のコンピュータ・プログラム製品。
【請求項45】
前記複数のコマンド・オブジェクトの各々は、前記データ変更コマンドが、前記選択オブジェクトで定義されたデータを操作することができるか否かを判断するメソッドを含み、前記スクリプトを変更するプログラム・コードは、前記少なくとも1つ選択オブジェクトに対して前記判定メソッドを呼び出す手段を備えたことを特徴とする請求項44に記載のコンピュータ・プログラム製品。
【請求項46】
前記スクリプトを変更するプログラム・コードは、前記選択オブジェクトの少なくとも1つを変更して、前記定義されたデータ・オブジェクトを異なるドキュメント内のデータ・オブジェクトに変更することを特徴とする請求項43に記載のコンピュータ・プログラム製品。
【請求項47】
前記複数のコマンド・オブジェクトの各々は、前記データ変更コマンドが、前記選択オブジェクトで定義されたデータを操作することができるか否かを判断するメソッドを含み、前記スクリプトを変更するプログラム・コードは、前記少なくとも1つ選択オブジェクトに対して前記判定メソッドを呼び出す手段を備えたことを特徴とする請求項44に記載のコンピュータ・プログラム製品。
【請求項48】
メモリを有するコンピュータ・システムにおいて更新可能ドキュメントを表示する装置であって、前記ドキュメントは複数のデータ片からなり、各々のデータ片はデータ型を有し、前記装置は、
複数のデータ・モデル・オブジェクトを構成する手段であって、前記データ・モデル・オブジェクトの各々は、前記複数のデータ片の1つと、データ片を操作して所与の更新を生成するための名前を有するメソッドを含む標準インターフェイスとを含み、前記所与の名前と更新は、各データ型について同じである手段と、
ドキュメント・コンテナと、
前記データ・モデル・オブジェクトを前記ドキュメント・コンテナに挿入する手段と、
前記データ・モデル・オブジェクトの各々に応答して、前記データ・モデル・オブジェクトの表示を生成する手段であって、各データ・モデル・オブジェクトにデータの表示を生成する手段と、コンテナとシブリング・オブジェクト間の関係を含む、データ・モデル・オブジェクト間の関係の表示を生成する手段を含む手段と
を備えたことを特徴とする装置。
【請求項49】
前記ドキュメントは、コマンド・オブジェクトにより更新され、前記コマンド・オブジェクトは、データ・モデル・オブジェクトの前記標準インターフェイスのメソッドの1つを呼び出してそこに含まれるデータ片を変更するメソッドを含むことを特徴とする請求項48に記載の装置。
【請求項50】
前記標準インターフェイスは、カット、コピーおよびペーストメソッドを含むことを特徴とする請求項48に記載の装置。
【請求項51】
前記表示を生成する手段は、データ・モデル・オブジェクトと前記ドキュメント・コンテナとの間の関係の表示を生成する手段を含むことを特徴とする請求項48に記載の装置。
【請求項52】
メモリを有するコンピュータ・システムにおいて更新可能ドキュメントを表示するコンピュータ・プログラム製品であって、前記ドキュメントは複数のデータ片からなり、各々のデータ片はデータ型を有し、前記コンピュータ・プログラム製品は、コンピュータ読取り可能プログラム・コードを有するコンピュータ利用可能媒体を含み、
複数のデータ・モデル・オブジェクトを前記メモリに構成するプログラム・コードであって、前記データ・モデル・オブジェクトの各々は、前記複数のデータ片の1つと、データ片を操作して所与の更新を生成するための名前を有するメソッドを含む標準インターフェイスとを含み、前記所与の名前と更新は、各データ型について同じであるプログラム・コードと、
ドキュメント・コンテナを前記メモリに構成するプログラム・コードと、
前記データ・モデル・オブジェクトを前記ドキュメント・コンテナに挿入するプログラム・コードと、
前記データ・モデル・オブジェクトの各々に応答して、前記データ・モデル・オブジェクトの表示、およびコンテナとシブリング・オブジェクト間の関係を含む、データ・モデル・オブジェクト間の関係の表示を生成するプログラム・コードと
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項53】
前記ドキュメントは、コマンド・オブジェクトにより更新され、前記コマンド・オブジェクトは、データ・モデル・オブジェクトの前記標準インターフェイスのメソッドの1つを呼び出してそこに含まれるデータ片を変更するメソッドを含むことを特徴とする請求項52に記載のコンピュータ・プログラム製品。
【請求項54】
前記標準インターフェイスは、カット、コピーおよびペーストメソッドを含むことを特徴とする請求項52に記載のコンピュータ・プログラム製品。
【請求項55】
前記表示を生成するプログラム・コードは、各データ・モデル・オブジェクトにデータの表示を生成するプログラム・コードと、データ・モデル・オブジェクト間の関係の表示を生成するプログラム・コードとを含むことを特徴とする請求項52に記載のコンピュータ・プログラム製品。
【請求項56】
前記表示を生成するプログラム・コードは、データ・モデル・オブジェクトと前記ドキュメント・コンテナとの間の関係の表示を生成するプログラム・コードを含むことを特徴とする請求項52に記載のコンピュータ・プログラム製品。
【請求項57】
メモリを有するコンピュータ・システムにおいて更新可能ドキュメント内のデータを表示する装置であって、前記ドキュメントは複数のデータ片からなり、前記装置は、
各々が前記複数のデータ片の1つを含む複数のデータ・モデル・オブジェクトを構成する手段と、
前記データ片が変更されると登録されたオブジェクトに変更通知を生成する手段と、
前記複数のデータ・モデル・オブジェクトうちの1つのデータ片の表示面を生成するビュー・オブジェクトと、
1つのデータ・モデル・オブジェクトとともに前記ビュー・オブジェクトを登録する手段と、
前記ビュー・オブジェクトにおいて、前記変更通知に応答して、前記表示面を更新する手段と
を備えたことを特徴とする装置。
【請求項58】
前記変更通知を生成する手段は、各データ・モデル・オブジェクトにおいてデータ片が変更されたとき変更通知を生成する手段を含むことを特徴とする請求項57に記載の装置。
【請求項59】
前記データ・モデルは、コマンド・オブジェクトと対話して前記データ片を変更し、
前記変更通知を生成する手段は、前記コマンド・オブジェクトにおいて変更通知を生成する手段を含むことを特徴とする請求項57に記載の装置。
【請求項60】
各データ片は、特定のデータ型を有し、前記ビュー・オブジェクトは、前記1つのデータ・モデル・オブジェクトにおいて前記データ片の前記データ型を特定する表示を生成することを特徴とする請求項57に記載の装置。
【請求項61】
前記ビュー・オブジェクトは、前記1つのデータ・モデル・オブジェクトにおいて前記データ片の複数の表示面を生成することを特徴とする請求項57に記載の装置。
【請求項62】
メモリを有するコンピュータ・システムにおいて更新可能ドキュメント内のデータを表示するコンピュータ・プログラム製品であって、前記ドキュメントは複数のデータ片からなり、前記コンピュータ・プログラム製品は、コンピュータ読取り可能プログラム・コードを有するコンピュータ利用可能媒体を含み、
複数のデータ・モデル・オブジェクトのインスタンスを生成するメソッドを含むデータ・モデル・クラス・コードであって、前記データ・モデル・オブジェクトの各々は、前記複数のデータ片の1つを含むコードと、
前記データ片が変更されると登録されたオブジェクトに変更通知を生成するプログラム・コードと、
前記複数のデータ・モデル・オブジェクトうちの1つのデータ片の表示面を生成するメソッドを含むビュー・クラス情報からビュー・オブジェクトのインスタンスを生成するプログラム・コードと、
1つのデータ・モデル・オブジェクトとともに前記ビュー・オブジェクトを登録するプログラム・コードと、
前記ビュー・クラス情報において、前記変更通知に応答して、前記表示面を更新するプログラム・コードと
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項63】
前記変更通知を生成するプログラム・コードは、各データ・モデル・クラス・コードにおいてデータ片が変更されたとき変更通知を生成するプログラム・コードを含むことを特徴とする請求項62に記載のコンピュータ・プログラム製品。
【請求項64】
前記データ・モデルは、コマンド・オブジェクトと対話して前記データ片を変更し、
前記変更通知を生成するプログラム・コードは、前記コマンド・オブジェクトにおいて変更通知を生成するプログラム・コードを含むことを特徴とする請求項62に記載のコンピュータ・プログラム製品。
【請求項65】
各データ片は、特定のデータ型を有し、前記ビュー・クラス情報は、前記1つのデータ・モデル・オブジェクトにおいて前記データ片の前記データ型を特定する表示を生成するプログラム・コードを含むことを特徴とする請求項62に記載のコンピュータ・プログラム製品。
【請求項66】
前記ビュー・クラス情報は、前記1つのデータ・モデル・オブジェクトにおいて前記データ片の複数の表示面を生成するプログラム・コードを含むことを特徴とする請求項62に記載のコンピュータ・プログラム製品。
【請求項1】
プロセッサと表示装置とを含むコンピュータ・システムにおいて、ポインタ画像を制御するユーザ操作ボタンを有するカーソル位置決定デバイスと、特定の機能を実行する論理とデータを有する複数のオブジェクトを含むオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する装置であって、
(a)前記オブジェクト指向アプリケーション・プログラムにおける論理とデータを有する複数のオブジェクトの1つであって、前記表示装置にアイコンおよびサムネイルの両方を表示する論理と、前記表示装置上で前記アイコンを操作する論理とを含む対話可能オブジェクトと、
(b)前記カーソル位置決定デバイスのユーザ操作ボタンの押下に応答して、デバイス・イベント信号を生成する手段と、
(c)前記表示装置上の前記ポインタ画像の物理的な位置に応答して、デバイス位置信号を生成する手段と、
(d)前記デバイス・イベント信号に応答して、前記ユーザ操作ボタンが所定の時間間隔でいつ押下されたかを検出するタイミング手段と、
ピークしきい値を格納する記憶手段と、
前記所定の時間間隔および前記ピークしきい値に応答して、前記ユーザ操作ボタンが前記ピークしきい値よりも長く押下されたときピークメッセージを生成する手段と、
前記ピークメッセージに応答して、前記対話オブジェクトの論理を用いて前記アイコンの表示から前記サムネイル表示に前記表示装置を変更する手段とを含む対話オブジェクトと
を備えたことを特徴とする装置。
【請求項2】
前記表示装置は、表示領域を有し、
前記装置は、
(e)前記対話可能オブジェクトと協働して、前記アイコンが前記表示装置のどこに位置するかを判定する手段と、
前記表示装置上の選択された領域の境界を判定する手段と、
前記アイコンが前記表示装置のどこに位置するか、および前記境界に応答して、前記アイコンが前記境界に位置したときに位置信号を生成する手段とを含むビュー・オブジェクトをさらに備え、
前記対話オブジェクトは、前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記対話可能オブジェクトの論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かすことを特徴とする請求項1に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項3】
前記表示装置は、表示領域を有し、
前記装置は、
(e)前記対話可能オブジェクトと協働して、前記アイコンが表示されている前記表示領域における表示位置を判定する手段と、
前記表示領域内の選択された領域の境界を判定する手段と、
前記表示位置および前記境界に応答して、前記アイコンが前記境界に位置したときに位置信号を生成する手段とを含むビュー・オブジェクトをさらに備え、
前記対話オブジェクトは、
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記ビュー・オブジェクトの論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かす手段と、
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記ビュー・オブジェクトの論理を用いて、前記アイコンが前記境界の外にあるとき前記動き操作を停止する手段と
を含むことを特徴とする請求項1に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項4】
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記ビュー・オブジェクトの論理を用いて、前記アイコンが前記境界の中にあるとき前記動き操作を続行する手段をさらに備えたことを特徴とする請求項3に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項5】
前記表示装置は、表示領域を有し、
前記装置は、
(e)前記対話可能オブジェクトと協働して、前記アイコンが表示されている前記表示領域における表示位置を判定する手段と、
前記表示領域内の選択された領域の境界を判定する手段と、
前記表示位置および前記境界に応答して、前記アイコンが前記境界に位置したときに位置信号を生成する手段とを含むビュー・オブジェクトをさらに備え、
前記対話オブジェクトは、
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記対話オブジェクトの論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かす手段と、
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記対話オブジェクトの論理を用いて、前記アイコンが前記境界の上にあるときスクロール操作を行う手段と
を含むことを特徴とする請求項1に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項6】
前記デバイス・イベント信号、前記位置信号および前記デバイス位置信号に応答して、前記対話オブジェクトの論理を用いて、前記アイコンが前記境界の中にあるとき前記スクロール操作を続行する手段をさらに備えたことを特徴とする請求項5に記載のオブジェクト指向アプリケーション・インターフェイスを提供する装置。
【請求項7】
プロセッサと表示装置とを含むコンピュータ・システムにおいて、ポインタ画像を制御するユーザ操作ボタンを有するカーソル位置決定デバイスと、特定の機能を実行する論理とデータを有する複数のオブジェクトを含むオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する方法であって、
(a)前記論理とデータを有する複数のオブジェクトから対話可能オブジェクト生成し、前記オブジェクト指向アプリケーション・プログラムに関連付けられた特定の機能を実行するステップであって、前記対話可能オブジェクトは、前記表示装置にアイコンおよびサムネイルの両方を表示する論理と、前記表示装置上で前記アイコンを操作する論理とを含むステップと、
(b)前記ユーザ操作ボタンの押下に応答して、デバイス・イベント信号を生成するステップと、
(c)前記表示装置上の前記ポインタ画像の物理的な位置に応答して、デバイス位置信号を生成するステップと、
(d1)前記ユーザ操作ボタンが所定の時間間隔でいつ押下されたかを検出するステップと、
(d2)ピークしきい値を格納するステップと、
(d3)前記ユーザ操作ボタンが前記ピークしきい値よりも長く押下されたときピークメッセージを生成するステップと、
(d4)前記対話オブジェクトの論理を用いて前記アイコンから前記サムネイルに前記表示装置を変更するステップとを実行する対話オブジェクトを生成するステップと
を備えたことを特徴とする方法。
【請求項8】
前記表示装置は、表示領域を有し、
(e1)前記アイコンが表示された前記表示領域における表示位置を判定するステップと、
(e2)前記表示領域内の選択された領域の境界を判定するステップと、
(e3)前記アイコンが前記境界に位置したときに位置信号を生成するステップとを実行するビュー・オブジェクトを生成するステップをさらに備え、
前記対話オブジェクトは、
(d5)前記論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かすステップをさらに実行することを特徴とする請求項7に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項9】
前記表示装置は、表示領域を有し、
(e1)前記アイコンが表示されている前記表示領域における表示位置を判定するステップと、
(e2)前記表示領域内の選択された領域の境界を判定するステップと、
(e3)前記アイコンが前記境界に位置したときに位置信号を生成するステップとを実行するビュー・オブジェクトを生成するステップをさらに備え、
前記対話オブジェクトは、
(d5)前記ビュー・オブジェクトの論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かすステップと、
(d6)前記ビュー・オブジェクトの論理を用いて、前記アイコンが前記境界の外にあるとき前記動き操作を停止するステップとをさらに実行することを特徴とする請求項7に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項10】
前記対話オブジェクトは、
(d7)前記ビュー・オブジェクトの論理を用いて、前記アイコンが前記境界の中にあるとき前記動き操作を続行するステップをさらに実行することを特徴とする請求項9に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項11】
前記表示装置は、表示領域を有し、
(e)前記特定の機能を実行する論理とデータを有する複数のオブジェクトからビュー・オブジェクトを生成するステップであって、前記特定の機能は、
(e1)前記アイコンが表示されている前記表示領域における表示位置を判定するステップと、
(e2)前記表示領域内の選択された領域の境界を判定するステップと、
(e3)前記アイコンが前記境界に位置したときに位置信号を生成するステップとを実行するステップをさらに備え、
前記対話オブジェクトは、
(d5)前記論理を用いて、前記ポインタ画像が動き、前記アイコンが前記境界に位置したとき、前記アイコンを動かすステップと、
(d6)前記論理を用いて、前記アイコンが前記境界の上にあるときスクロール操作を行うステップとをさらに実行することを特徴とする請求項7に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項12】
前記対話オブジェクトは、
前記論理を用いて、前記アイコンが前記境界の中にあるとき前記スクロール操作を続行するステップをさらに実行することを特徴とする請求項11に記載のオブジェクト指向アプリケーション・インターフェイスを提供する方法。
【請求項13】
メモリと該メモリのシステムアドレス空間に格納されたオブジェクト指向オペレーティング・システムを有するコンピュータ・システムで使用する装置であって、デバイス・イベント信号を生成するユーザ入力装置と、前記メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供する装置において、
(a)前記アプリケーションアドレス空間に、前記システムアドレス空間に格納された対話可能クラス情報から生成され、前記オブジェクト指向アプリケーション・プログラムによって使用されるデータおよび該データを操作する複数のメソッドを含む対話可能オブジェクトと、
(b)前記システムアドレス空間に、前記システムアドレス空間に格納された対話クラス情報から生成され、前記デバイス・イベント信号に応答して前記対話可能オブジェクトに含まれる前記オブジェクト操作メソッドのうち予め定められた1つを呼び出し、前記データを変更する対話オブジェクトと
を備えたことを特徴とする装置。
【請求項14】
前記コンピュータ・システムは、表示画面を含み、
前記対話可能オブジェクトは、前記表示画面に表示する画像を定義するデータを含むことを特徴とする請求項13に記載の装置。
【請求項15】
前記対話可能オブジェクトは、前記画像データを操作することにより前記表示画面上の画像のアピアランスを変更する選択メソッドを含むことを特徴とする請求項14に記載の装置。
【請求項16】
前記対話可能オブジェクトは、前記表示画面上の画像を動かすムーブ・メソッドを含むことを特徴とする請求項15に記載の装置。
【請求項17】
前記ユーザ入力装置は、マウスであり、
前記対話オブジェクトは、前記マウスからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すことを特徴とする請求項16に記載の装置。
【請求項18】
前記ユーザ入力装置は、キーボードであり、
前記対話オブジェクトは、前記キーボードからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すことを特徴とする請求項16に記載の装置。
【請求項19】
前記対話可能オブジェクトは、前記アプリケーションアドレス空間において、前記システムアドレス空間に格納された対話可能クラス情報から生成されることを特徴とする請求項13に記載の装置。
【請求項20】
前記対話オブジェクトは、前記デバイス・イベント信号に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の1つを呼び出し、前記要求された動作を実行することを特徴とする請求項13に記載の装置。
【請求項21】
前記対話オブジェクトは、前記デバイス・イベント信号の時間系列に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の1つを呼び出し、前記要求された動作を実行することを特徴とする請求項13に記載の装置。
【請求項22】
前記コンピュータ・システムは、表示画面を含み、
前記表示画面の一部に情報を表示する手段と、前記デバイス・イベント信号に応答するビュー・オブジェクトにおいて対話オブジェクトのインスタンスを作成する手段とを有するビュー・オブジェクトをさらに備えたことを特徴とする請求項13に記載の装置。
【請求項23】
メモリと該メモリのシステムアドレス空間に格納されたオブジェクト指向オペレーティング・システムを有するコンピュータ・システムで使用するコンピュータ・プログラム製品であって、デバイス・イベント信号を生成するユーザ入力装置と、前記メモリのアプリケーションアドレス空間に格納されたオブジェクト指向アプリケーション・プログラムとの間のオブジェクト指向アプリケーション・インターフェイスを提供するコンピュータ・プログラム製品において、
(a)前記アプリケーションアドレス空間に、前記システムアドレス空間に格納された対話可能クラス情報から対話可能オブジェクトのインスタンスを生成するプログラム・コードであって、前記対話可能オブジェクトは、前記オブジェクト指向アプリケーション・プログラムによって使用されるデータおよび該データを操作する複数のメソッドを含むプログラム・コードと、
(b)前記システムアドレス空間に、前記システムアドレス空間に格納された対話クラス情報から対話オブジェクトのインスタンスを生成するプログラム・コードであって、前記対話オブジェクトは、前記デバイス・イベント信号に応答して前記対話可能オブジェクトに含まれる前記オブジェクト操作メソッドのうち予め定められた1つを呼び出し、前記データを変更するプログラム・コードと
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項24】
前記コンピュータ・システムは、表示画面を含み、
前記対話可能オブジェクトは、前記表示画面に表示する画像を定義するデータを含むことを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項25】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記画像データを操作することにより前記表示画面上の画像のアピアランスを変更する選択メソッドを含む前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項24に記載のコンピュータ・プログラム製品。
【請求項26】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記表示画面上の画像を動かすムーブ・メソッドを含む前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項25に記載のコンピュータ・プログラム製品。
【請求項27】
前記ユーザ入力装置は、マウスであり、
前記対話オブジェクトは、前記マウスからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すプログラム・コードを含むことを特徴とする請求項26に記載のコンピュータ・プログラム製品。
【請求項28】
前記ユーザ入力装置は、キーボードであり、
前記対話オブジェクトは、前記キーボードからデバイス・イベント信号を受信し、前記対話可能オブジェクト内のメソッドを呼び出すプログラム・コードを含むことを特徴とする請求項26に記載のコンピュータ・プログラム製品。
【請求項29】
前記システムアドレス空間に前記対話可能クラス情報をロードするプログラム・コードをさらに備え、
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記アプリケーションアドレス空間において、前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項30】
前記対話可能オブジェクトのインスタンスを生成するプログラム・コードは、前記対話オブジェクトは、前記システムアドレス空間において、前記システムアドレス空間に格納された対話可能クラス情報から前記対話可能オブジェクトのインスタンスを生成することを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項31】
前記対話オブジェクトは、前記デバイス・イベント信号に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の1つを呼び出し、前記要求された動作を実行するプログラム・コードでインスタンス化されることを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項32】
前記対話オブジェクトは、前記デバイス・イベント信号の時間系列に応答して、前記オブジェクト指向アプリケーション・プログラムから要求された動作を判定し、前記操作メソッドのうち所定の1つを呼び出し、前記要求された動作を実行するプログラム・コードでインスタンス化されることを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項33】
前記コンピュータ・システムは、表示画面を含み、
前記表示画面の一部に情報を表示する手段と、前記デバイス・イベント信号に応答するビュー・オブジェクトにおいて対話オブジェクトのインスタンスを作成する手段とを有するビュー・オブジェクトのインスタンスを生成するプログラム・コードをさらに備えたことを特徴とする請求項23に記載のコンピュータ・プログラム製品。
【請求項34】
メモリを有するコンピュータ・システムにおいて動的スクリプト機能を実行する装置であって、各々がデータおよび該データを変更するメソッドを含むデータ・オブジェクトを含むドキュメントを前記メモリ内で操作する装置において、
各々が前記ドキュメントからの選択を形成する少なくとも1つのデータ・オブジェクトの定義に依存しないで、アドレス空間を定義するデータを含む複数の選択オブジェクトと、
各々がデータ変更コマンドと、該データ変更コマンドが適用される選択オブジェクトへの参照を含むコマンド・オブジェクトと、
前記メモリに一連のコマンド・オブジェクトからなるスクリプトを記憶する手段と、
前記スクリプトの前記一連のコマンド・オブジェクトの各々において、データ変更コマンドを連続して呼び出することにより前記スクリプトを実行し、各々の参照された選択オブジェクトにより定義された前記データ・オブジェクトにおいて選択されたデータ変更メソッドを実行する手段と
を備えたことを特徴とする装置。
【請求項35】
前記複数の選択オブジェクトの各々は、コマンド・オブジェクトのメソッドを呼び出すことにより構成されることを特徴とする請求項34に記載の装置。
【請求項36】
前記選択オブジェクトの少なくとも1つにより定義されたデータ・オブジェクトを変更することにより、前記スクリプトを変更する手段をさらに備えたことを特徴とする請求項34に記載の装置。
【請求項37】
前記スクリプトを変更する手段は、前記選択オブジェクトの少なくとも1つを変更して、前記定義されたデータ・オブジェクトを同じ前記ドキュメント内で他のデータ・オブジェクトに変更することを特徴とする請求項36に記載の装置。
【請求項38】
前記複数のコマンド・オブジェクトの各々は、前記データ変更コマンドが、前記選択オブジェクトで定義されたデータを操作することができるか否かを判断するメソッドを含み、前記スクリプトを変更する手段は、前記少なくとも1つ選択オブジェクトに対して前記判定メソッドを呼び出す手段を備えたことを特徴とする請求項37に記載の装置。
【請求項39】
前記スクリプトを変更する手段は、前記選択オブジェクトの少なくとも1つを変更して、前記定義されたデータ・オブジェクトを異なるドキュメント内のデータ・オブジェクトに変更することを特徴とする請求項36に記載の装置。
【請求項40】
前記複数のコマンド・オブジェクトの各々は、前記データ変更コマンドが、前記選択オブジェクトで定義されたデータを操作することができるか否かを判断するメソッドを含み、前記スクリプトを変更する手段は、前記少なくとも1つ選択オブジェクトに対して前記判定メソッドを呼び出す手段を備えたことを特徴とする請求項39に記載の装置。
【請求項41】
メモリを有するコンピュータ・システムにおいて動的スクリプト機能を実行するコンピュータ・プログラム製品であって、コンピュータ・プログラムは、各々がデータおよび該データを変更するメソッドを含むデータ・オブジェクトを含むドキュメントを前記メモリ内で操作し、前記コンピュータ・プログラム製品は、コンピュータ読取り可能プログラム・コードを有するコンピュータ利用可能媒体を含み、前記プログラム・コードは、
各々が前記ドキュメントからの選択を形成する少なくとも1つのデータ・オブジェクトの定義に依存しないで、アドレス空間を定義するデータを含む複数の選択オブジェクトのインスタンスを生成するプログラム・コードと、
各々がデータ変更コマンドと、該データ変更コマンドが適用される選択オブジェクトへの参照を含むコマンド・オブジェクトのインスタンスを生成するプログラム・コードと、
前記メモリに一連のコマンド・オブジェクトからなるスクリプトを記憶する手段と、
前記スクリプトの前記一連のコマンド・オブジェクトの各々において、データ変更コマンドを連続して呼び出することにより前記スクリプトを実行し、各々の参照された選択オブジェクトにより定義された前記データ・オブジェクトにおいて選択されたデータ変更メソッドを実行する手段と
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項42】
選択オブジェクトを構成するメソッドを含むコマンド・オブジェクトのインスタンスを生成するプログラム・コードと、
前記複数の選択オブジェクトの各々を構成するコマンド・オブジェクトのインスタンスを生成するプログラム・コードと
をさらに備えたことを特徴とする請求項41に記載のコンピュータ・プログラム製品。
【請求項43】
前記選択オブジェクトの少なくとも1つにより定義されたデータ・オブジェクトを変更することにより、前記スクリプトを変更するプログラム・コードをさらに備えたことを特徴とする請求項41に記載のコンピュータ・プログラム製品。
【請求項44】
前記スクリプトを変更するプログラム・コードは、前記選択オブジェクトの少なくとも1つを変更して、前記定義されたデータ・オブジェクトを同じ前記ドキュメント内で他のデータ・オブジェクトに変更することを特徴とする請求項43に記載のコンピュータ・プログラム製品。
【請求項45】
前記複数のコマンド・オブジェクトの各々は、前記データ変更コマンドが、前記選択オブジェクトで定義されたデータを操作することができるか否かを判断するメソッドを含み、前記スクリプトを変更するプログラム・コードは、前記少なくとも1つ選択オブジェクトに対して前記判定メソッドを呼び出す手段を備えたことを特徴とする請求項44に記載のコンピュータ・プログラム製品。
【請求項46】
前記スクリプトを変更するプログラム・コードは、前記選択オブジェクトの少なくとも1つを変更して、前記定義されたデータ・オブジェクトを異なるドキュメント内のデータ・オブジェクトに変更することを特徴とする請求項43に記載のコンピュータ・プログラム製品。
【請求項47】
前記複数のコマンド・オブジェクトの各々は、前記データ変更コマンドが、前記選択オブジェクトで定義されたデータを操作することができるか否かを判断するメソッドを含み、前記スクリプトを変更するプログラム・コードは、前記少なくとも1つ選択オブジェクトに対して前記判定メソッドを呼び出す手段を備えたことを特徴とする請求項44に記載のコンピュータ・プログラム製品。
【請求項48】
メモリを有するコンピュータ・システムにおいて更新可能ドキュメントを表示する装置であって、前記ドキュメントは複数のデータ片からなり、各々のデータ片はデータ型を有し、前記装置は、
複数のデータ・モデル・オブジェクトを構成する手段であって、前記データ・モデル・オブジェクトの各々は、前記複数のデータ片の1つと、データ片を操作して所与の更新を生成するための名前を有するメソッドを含む標準インターフェイスとを含み、前記所与の名前と更新は、各データ型について同じである手段と、
ドキュメント・コンテナと、
前記データ・モデル・オブジェクトを前記ドキュメント・コンテナに挿入する手段と、
前記データ・モデル・オブジェクトの各々に応答して、前記データ・モデル・オブジェクトの表示を生成する手段であって、各データ・モデル・オブジェクトにデータの表示を生成する手段と、コンテナとシブリング・オブジェクト間の関係を含む、データ・モデル・オブジェクト間の関係の表示を生成する手段を含む手段と
を備えたことを特徴とする装置。
【請求項49】
前記ドキュメントは、コマンド・オブジェクトにより更新され、前記コマンド・オブジェクトは、データ・モデル・オブジェクトの前記標準インターフェイスのメソッドの1つを呼び出してそこに含まれるデータ片を変更するメソッドを含むことを特徴とする請求項48に記載の装置。
【請求項50】
前記標準インターフェイスは、カット、コピーおよびペーストメソッドを含むことを特徴とする請求項48に記載の装置。
【請求項51】
前記表示を生成する手段は、データ・モデル・オブジェクトと前記ドキュメント・コンテナとの間の関係の表示を生成する手段を含むことを特徴とする請求項48に記載の装置。
【請求項52】
メモリを有するコンピュータ・システムにおいて更新可能ドキュメントを表示するコンピュータ・プログラム製品であって、前記ドキュメントは複数のデータ片からなり、各々のデータ片はデータ型を有し、前記コンピュータ・プログラム製品は、コンピュータ読取り可能プログラム・コードを有するコンピュータ利用可能媒体を含み、
複数のデータ・モデル・オブジェクトを前記メモリに構成するプログラム・コードであって、前記データ・モデル・オブジェクトの各々は、前記複数のデータ片の1つと、データ片を操作して所与の更新を生成するための名前を有するメソッドを含む標準インターフェイスとを含み、前記所与の名前と更新は、各データ型について同じであるプログラム・コードと、
ドキュメント・コンテナを前記メモリに構成するプログラム・コードと、
前記データ・モデル・オブジェクトを前記ドキュメント・コンテナに挿入するプログラム・コードと、
前記データ・モデル・オブジェクトの各々に応答して、前記データ・モデル・オブジェクトの表示、およびコンテナとシブリング・オブジェクト間の関係を含む、データ・モデル・オブジェクト間の関係の表示を生成するプログラム・コードと
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項53】
前記ドキュメントは、コマンド・オブジェクトにより更新され、前記コマンド・オブジェクトは、データ・モデル・オブジェクトの前記標準インターフェイスのメソッドの1つを呼び出してそこに含まれるデータ片を変更するメソッドを含むことを特徴とする請求項52に記載のコンピュータ・プログラム製品。
【請求項54】
前記標準インターフェイスは、カット、コピーおよびペーストメソッドを含むことを特徴とする請求項52に記載のコンピュータ・プログラム製品。
【請求項55】
前記表示を生成するプログラム・コードは、各データ・モデル・オブジェクトにデータの表示を生成するプログラム・コードと、データ・モデル・オブジェクト間の関係の表示を生成するプログラム・コードとを含むことを特徴とする請求項52に記載のコンピュータ・プログラム製品。
【請求項56】
前記表示を生成するプログラム・コードは、データ・モデル・オブジェクトと前記ドキュメント・コンテナとの間の関係の表示を生成するプログラム・コードを含むことを特徴とする請求項52に記載のコンピュータ・プログラム製品。
【請求項57】
メモリを有するコンピュータ・システムにおいて更新可能ドキュメント内のデータを表示する装置であって、前記ドキュメントは複数のデータ片からなり、前記装置は、
各々が前記複数のデータ片の1つを含む複数のデータ・モデル・オブジェクトを構成する手段と、
前記データ片が変更されると登録されたオブジェクトに変更通知を生成する手段と、
前記複数のデータ・モデル・オブジェクトうちの1つのデータ片の表示面を生成するビュー・オブジェクトと、
1つのデータ・モデル・オブジェクトとともに前記ビュー・オブジェクトを登録する手段と、
前記ビュー・オブジェクトにおいて、前記変更通知に応答して、前記表示面を更新する手段と
を備えたことを特徴とする装置。
【請求項58】
前記変更通知を生成する手段は、各データ・モデル・オブジェクトにおいてデータ片が変更されたとき変更通知を生成する手段を含むことを特徴とする請求項57に記載の装置。
【請求項59】
前記データ・モデルは、コマンド・オブジェクトと対話して前記データ片を変更し、
前記変更通知を生成する手段は、前記コマンド・オブジェクトにおいて変更通知を生成する手段を含むことを特徴とする請求項57に記載の装置。
【請求項60】
各データ片は、特定のデータ型を有し、前記ビュー・オブジェクトは、前記1つのデータ・モデル・オブジェクトにおいて前記データ片の前記データ型を特定する表示を生成することを特徴とする請求項57に記載の装置。
【請求項61】
前記ビュー・オブジェクトは、前記1つのデータ・モデル・オブジェクトにおいて前記データ片の複数の表示面を生成することを特徴とする請求項57に記載の装置。
【請求項62】
メモリを有するコンピュータ・システムにおいて更新可能ドキュメント内のデータを表示するコンピュータ・プログラム製品であって、前記ドキュメントは複数のデータ片からなり、前記コンピュータ・プログラム製品は、コンピュータ読取り可能プログラム・コードを有するコンピュータ利用可能媒体を含み、
複数のデータ・モデル・オブジェクトのインスタンスを生成するメソッドを含むデータ・モデル・クラス・コードであって、前記データ・モデル・オブジェクトの各々は、前記複数のデータ片の1つを含むコードと、
前記データ片が変更されると登録されたオブジェクトに変更通知を生成するプログラム・コードと、
前記複数のデータ・モデル・オブジェクトうちの1つのデータ片の表示面を生成するメソッドを含むビュー・クラス情報からビュー・オブジェクトのインスタンスを生成するプログラム・コードと、
1つのデータ・モデル・オブジェクトとともに前記ビュー・オブジェクトを登録するプログラム・コードと、
前記ビュー・クラス情報において、前記変更通知に応答して、前記表示面を更新するプログラム・コードと
を備えたことを特徴とするコンピュータ・プログラム製品。
【請求項63】
前記変更通知を生成するプログラム・コードは、各データ・モデル・クラス・コードにおいてデータ片が変更されたとき変更通知を生成するプログラム・コードを含むことを特徴とする請求項62に記載のコンピュータ・プログラム製品。
【請求項64】
前記データ・モデルは、コマンド・オブジェクトと対話して前記データ片を変更し、
前記変更通知を生成するプログラム・コードは、前記コマンド・オブジェクトにおいて変更通知を生成するプログラム・コードを含むことを特徴とする請求項62に記載のコンピュータ・プログラム製品。
【請求項65】
各データ片は、特定のデータ型を有し、前記ビュー・クラス情報は、前記1つのデータ・モデル・オブジェクトにおいて前記データ片の前記データ型を特定する表示を生成するプログラム・コードを含むことを特徴とする請求項62に記載のコンピュータ・プログラム製品。
【請求項66】
前記ビュー・クラス情報は、前記1つのデータ・モデル・オブジェクトにおいて前記データ片の複数の表示面を生成するプログラム・コードを含むことを特徴とする請求項62に記載のコンピュータ・プログラム製品。
【図1A】
【図1B】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21A】
【図21B】
【図21C】
【図1B】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21A】
【図21B】
【図21C】
【公開番号】特開2008−181541(P2008−181541A)
【公開日】平成20年8月7日(2008.8.7)
【国際特許分類】
【出願番号】特願2008−43555(P2008−43555)
【出願日】平成20年2月25日(2008.2.25)
【分割の表示】特願2002−9271(P2002−9271)の分割
【原出願日】平成5年12月14日(1993.12.14)
【出願人】(500269956)オブジェクト テクノロジー ライセンシング コーポレイション (12)
【Fターム(参考)】
【公開日】平成20年8月7日(2008.8.7)
【国際特許分類】
【出願日】平成20年2月25日(2008.2.25)
【分割の表示】特願2002−9271(P2002−9271)の分割
【原出願日】平成5年12月14日(1993.12.14)
【出願人】(500269956)オブジェクト テクノロジー ライセンシング コーポレイション (12)
【Fターム(参考)】
[ Back to top ]