Sun WorkShop Visual では、1 つ以上のウィジェットを選択してグループにまとめることができます。グループにまとめることで、多数の ウィジェットや類似した機能を持つウィジェットを、1 つのまとまりとして簡単に指定できます。また、グループにまとめたウィジェットは、スマートコードの基 本的な構築ブロックとして使用できます。スマートコードはツールキットに依存しないコードの階層です。 Sun WorkShop Visual では、このスマートコードを生成することによって、Motif アプリケーションを他のプラットフォームに移行してインターネット技術を最大限に活用することができま す。
スマートコードでは、その基本データ構造としてグループを使用するため、まずグ ループの作成方法、カスタマイズ方法、および使い方を理解する必要があります。本章ではグループについ て説明します。スマートコードについては以下の章を参照してください。
1. 第 16
章「取得/設定用スマートコード」
この章ではスマートコードについて説明します。また、デザインでのグループの設定方法、「取得/設定」
スマートコードの生成方法、および使用しているツールキットとは別の手段でグループメンバーにアクセス
する方法についての簡単な学習も含まれています。
2. 第 17 章「thin
クライアント用スマートコード」
この章では、デザインから thin
クライアントおよび別個のサーバーアプリケーションを作成する方法を説明します。サーバーは
CGI
スクリプトであり、クライアントとサーバー間の通信はインターネットの規格を使用することによって実現
されます。この章にも、基礎概念に習熟するための学習が組み込まれています。
3. 第 18
章「インターネット用スマートコード」
この章では、WWW
上のページにアクセスできるコードをデザインから生成する方法について説明します。実際に試すことので
きる簡単な学習が含まれています。
グループを作成するには、デザイン内の任意の数のウィジェットを選択してから、< BR> (図 15-1 に示す) ツールバー上の「新規グループに追加」ボタンを押すか、またはウィジェットメニューから「新規グループ に追加」を選択します。図 15-2 に示すように、グループエディタが表示されます。
グループの名前を変更するには、グループを選択し、「名前」というラベルの付い たテキストフィールドに新しい名前を入力して Returnキーを押します。この操作の結果はすぐに有効になります。
グループが選択されると、そのメンバーが右側のリストに表示されます。グループ メンバーには多くの関数を適用できます。
1. 追加
デザイン領域で現在選択されているウィジェットを、このグループに追加します。
3. 非公開
選択したメンバーをこのグループに「専用」であると定義します。これはコードがグループ用に生成される
方法を表し、thin クライアントのコールバックにだけ関連します。詳細については 「公開メンバーと非公開メンバー」を参照してください。
4. 公開
選択したメンバーを
公開し、(サーバーから)アクセス可能であると定義します。これはコードをグループ用に生成する方法を表
し、thin クライアントのコールバックにだけ関連します。詳細については 「公開メンバーと非公開メンバー」を参照してください。
5. 選択
デザイン領域で対応するウィジェットを選択します。
6. 移動
この関数の場合には、グループエディタで選べるメンバーは 1
つだけです。「移動」を押すと、選択したウィジェットがデザイン領域に表示され、必要ならば階層内のノ
ードが展開されます。
グループは、スマートコード用に使用されたときに本領を発揮します。これについ ては、第 16 章「取得/設定用スマートコード」を参照してください。しかし、グループを使用すると、その他のこ ともより簡単に実行できるようになります。グループを使用できる 3 つの領域を次に示します。
グループエディタで、グループリストの下にある「選択」ボタンを押すと、デザイ ン領域でグループのすべてのウィジェットが強調表示されます。これにより、繰り返し選択する必要のある ウィジェットグループを設定できます。グループをこのように使用すれば、余分なコードはわずかしか生成 されません。グループはウィジェットの配列として定義されます。
グループエディタのグループメンバーリストの横にある「移動」ボタンを使用すれ ば、Sun WorkShop Visual は、選択したウィジェットをデザイン領域に表示し、必要ならば階層内のノードを展開します。特定のウィ ジェットだけをグループにまとめておくと、その後の検索が簡単になります。
図 15-3 に示すように、グループは「リンク編集」ダイアログでのリンク先として使用できます。
グループをリンク先として使用すれば、たとえば、ウィジェットのグループ全体を 一度に非表示にしたり無効化する操作を高速かつ簡単に行うことができます。
公開メンバー、非公開メンバー、およびその他のデータは、thin
クライアントアプリケーションの開発を目的とした「グループ構造」の機能です。詳細については、
第 17 章「thin
クライアント用スマートコード」で説明しています。
thin
クライアント用スマートコードもインターネット用スマートコードも使用しない場合には、これらの機能を
使用する必要はありません。
「公開」と「非公開」のトグルを使用すれば、コードの生成時に各メンバーのアク セスのレベルを制御できます。thin クライアント・サーバーアプリケーションで使用するグループを設定している場合には、これを変更するだ けで済みます。
デフォルトでは、グループのメンバーは公開であると定義されます。つまり、グル ープがクライアントアプリケーションの外部 (たとえばリモートサーバー) に渡された場合には、受信側ルーチンはそれらのメンバーにアクセスできます。
ユーザーインタフェースであるアプリケーションの thin クライアントにだけ、グループの特定メンバーへのアクセス権を与えることもできます。その場合、そのメ ンバーを「非公開」にしてください。非公開のメンバーは、thin クライアントアプリケーションのどこにあっても認識されますが、サーバー内では認識されません。クライ アントアプリケーションはユーザーインタフェースを制御しているため、サーバーの場合よりも多くのメン バーにアクセスが必要となります。これについては 「その他のデータ − 関数」を参照してください。
thin クライアントアプリケーションとサーバーアプリケーションの作成については、第 17 章「thin クライアント用スマートコード」を参照してください。
グループエディタには「その他のデータ」という領域があり、そこではグループに 新しいメンバーを追加できます。これらのメンバーは、クライアントとサーバー間のデータのやりとりに使 用され、名前と値を組み合わせて指定します。「その他のデータ」メンバーは常に文字列として取り扱われ ます。
スマートコードのコールバックにはグループだけが渡されるため、グループ内にそ の他のデータを追加することで、コールバックに渡す情報を増やすことができます。コールバックが独立し たサーバーアプリケーション内で機能しており、残りのクライアントアプリケーションには直接アクセスし ない場合には、この方法が特に便利です。
グループエディタの「その他のデータ」領域には、既存の定義、データの名前用と 値用の 2 つのテキストフィールド、およびオプションメニューを示すリストが含まれており、その他のデータとして 「定数」、「変数」、「関数」のどちらかを選択できます。
その他のデータを追加するには、名前と値を入力し、そのタイプを選択してから「 追加」を押します。
その他のデータは、グループの他のメンバーとまったく同じ方法で取り扱われます 。これらのメンバーには get 関数と set 関数が用意されています。この意味は、定数、変数、関数の場合で少し異なります。以下の項では各「型」 の意味について説明します。
図 15-4 に示すようにその他のデータを定義すると、その他のメンバー「myNewConstant」に文字列「hello」が初期 設定されます。
値「hello」を取得および設定するルーチンは、コード中に生成されます。グループ メンバーの値を取得および設定する方法については、第 16 章「取得/設定用スマートコード」を参照してください。
変数値を持つデータをグループに追加するには、既存の変数を「値」として使用し 、ユーザー自身の名前を「名前」フィールドに入力します。既存の変数 (「値」フィールドで指定された変数) 用の生成コードファイルに「外部宣言」定義が追加されます。この例を図 15-5 に示します。
「theInfo」が文字列変数であり、どこか他の場所で定義されていることを確認する 必要があります。このケースで提供される get 関数と set 関数は、変数の値を取得および設定します。たとえば、「theInfo」を次のように定義したとします。
さらに、「myNewVariable」を上記のように定義しました。次の行では、文字列「he llo」を str に割り当てます。
char * str = SC_GET(Value, myGroup->myNewVariable);
char * str = myGroup->myMyNewVariable->getValue();
String str = myGroup.myNewVariable.getValue();
グループメンバーの値を取得および設定する方法については、第 16 章「取得/設定用スマートコード」を参照してください。
その他のデータを関数の形で追加できることにより、柔軟性が向上します。「関数 」型のその他のメンバーを定義すると、ユーザーが記入した getter 関数と setter 関数を介してアクセスされる値を持つグループにメンバーが追加されます。「名前」フィールドに入力され る文字列は、その他のメンバーの名前です。「値」フィールドに入力される文字列は、get ルーチンと set ルーチンの名前に使用されます。たとえば、「名前」フィールドに address と入力し、「値」フィールドに myAddress を入力した場合には、「address」というその他のメンバーがグループに追加され、その値は以下のルーチ ンを介してアクセスされます。
これを図 15-6 に示します。
Sun WorkShop Visual は、 callouts サブディレクトリに、グループの名前と「値」フィールドの内容を連結した名前を持つファイルを作成し、 これら 2 つのルーチンのスタブをそのファイルに生成します。たとえば、上述の「 myAddress 」ルーチンが「myGroup」というグループ内で定義されていると想定すると、それらを含んでいるファイル の名前は myGroup_myAddress.c となります (C コードの場合)。
次の C コード行では「address」の値を取り出します。
SC_GET(Value, group->address);
このコード行によって、新しいルーチン get_myAddress が呼び出されます。値が返されるように、 get_myAddress を記入してください。その結果、「 SC_SET 」は set_myAddress を呼び出します。
注 - 「名前」と「値」のフィールドに同じ名前を入力してもかまいません。グループメ ンバー名は getter ルーチンと setter ルーチンによって綿密に照合されるため、これによる混乱はそうありません。
グループメンバーの値を取得および設定する方法については、第 16 章「取得/設定用スマートコード」を参照してください。
その他のデータを関数の形で定義のは、グループのデータをサーバーが要求する形 に組み立てるためです。たとえば、使用するサーバーではユーザーインタフェースコンポーネントが認識さ れないため、アドレスを 1 つの長い文字列の形にする必要があるとします。しかし、ユーザーインタフェースには、ユーザーがアドレ スを入力するためのテキストフィールドがいくつか含まれることがあります。このような場合は、「addres s」という名前のその他のデータメンバーを関数として定義すると便利です。「名前」と「値」のフィール ドに文字列「address」が入力された場合には、 get_address ルーチンはすべてのアドレスフィールドを結合した値を返します。これにより、サーバー内のコールバック は、「address」の値を通常の方法で取り出すことができます。
char * value = SC_GET(myGroup->address);
同様に、対応する set_address ルーチンは、サーバーから文字列を取り出し、各テキストフィールドに関連する文字列を切り離すことがで きます。この例では、サーバーは 1 つの「address」メンバーだけに関心を持つため、テキストフィールドウィジェットを「非公開」に、「add ress」メンバーを「公開」にすることもできます。
グループから入手できるデータをサーバー用に手直しする必要がある場合もよくあ ります。たとえば、(テキスト全体ではなく) テキスト領域から選択したテキストだけを送信することもできます。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |