前へ 次へ 目次 文書セット ホーム


第 16 章

 

取得と設定用のスマートコード


はじめに

Sun WorkShop Visual では、スマートコードというツールキットに依存しないコードを生成できます。スマートコードは、単独の アプリケーションでも、クライアントとサーバーで構成される「クライアントサーバーアプリケーション」 でも使用できます。クライアントサーバーアプリケーションに使用される場合、Sun WorkShop Visual は、Java、Motif (C または C++) あるいは Microsoft Windows の MFC コード、および別個のサーバーアプリケーションを使用して、 thin クライアントを生成します。Sun WorkShop Visual は、トランスポートプロトコルとして HTTP を用いるコードを生成します。生成されたアプリケーションは、企業のイントラネットで使用したり、イン ターネット上のさまざまなサイトに接続することができます。

デザインからクライアントサーバーや「Web 対応」のアプリケーションを作成するため、Sun WorkShop Visual は、通信用の基本データ構造として「グループ」を使用し、グループにアクセスする手段としてスマートコ ードを使用します。グループ機能は、これ以外にもデザインの操作に役立てることができます。グループに ついては、第 15 章「グループ」を参照してください。

スマートコード情報の構成

スマートコードの使用

デフォルトでは、従来の Motif、MFC、または Java のコールバックが生成されます。スマートコードを生成するには、「コールバック」ダイアログで「スマー トコード」トグルを選択してください。

スマートコードにより、コールバックは (言語独立ではなく) ツールキット独立になります。生成したい言語は選択できます。スマートコードは、指定の言語を使用して グループ内のウィジェットを「包み込む」コードの層です。

図 16-1 に示すオプションメニューにより、以下のどちらかのスタイルのスマートコードを選択できます。

    1. 取得/設定
    ウィジェットのグループに対して「getter」関数と「setter」関数を提供します。

    2. thin クライアント
    getter と setter を提供するだけではなく、Sun WorkShop Visual に、ユーザーインタフェースを含んだ別個のクライアントアプリケーションと、スマートコードのコールバ ックを含んだサーバーアプリケーションを生成させます。さらに、この 2 つの間の通信プロトコルを処理するコードも生成されます。

    3. インターネット
    このオプションは、上述の「thin クライアント」オプションにきわめてよく似ていますが、サーバーアプリケーションは生成されません。こ のオプションは、既存のサーバーに接続するアプリケーションや Web ページを取り出すアプリケーションを生成するために使用します。

    図 16-1 「コールバック」ダイアログでのスマートコード

スマートコードのコールバックにはグループが必要です。このグループは、ツール キットに依存しない方法でプログラムできるオブジェクト群へのハンドルをコールバックに提供します。グ ループを指定するには、次のどちらかを実行します。

    1. グループの名前を「グループ」テキストフィールドに入力する

    2. 「グループ」ボタンを押してグループエディタを表示し、グループを選択してから「適用」を押す

「スタイル」オプションメニューを使用すれば必要なスマートコードのタイプを選 択できるため、作成するアプリケーションの構造を選択できます。各スタイルで生成されるコードは異なり ます。以下の項では各スタイルを個々に説明します。

取得と設定用のスマートコード

「コールバック」ダイアログのスマートコードの「スタイル」メニューから「取得/ 設定」を選択すると、Sun WorkShop Visual は、指定したグループ内のコンポーネントに対してツールキットに依存しないラッパーを生成します。これ らは「getter」関数および「setter」関数とも呼ばれ、ツールキット固有のコードを書かずに、グループの コンポーネントの値を取得および設定することができます。

たとえば、C を使用しており、図 16-2 に示すように、「MyGroup」というグループに「text1」というウィジェットと「toggle1」というトグルが あるとします。

 

    図 16-2 グループエディタに表示されたグループ「MyGroup」

コールバック内のこのグループにアクセスするには、スマートコードのコールバッ クを定義し、スマートコードのスタイルとして「取得/設定」を選択し、コールバックで使用するグループ として「MyGroup」を指定します。これを図 16-3 に示します。

    図 16-3 「MyGroup」を使用するコールバック

C によるスマートコードのコールバック

図 16-3 に示すコールバック用に生成されるコードは次のようになります。

#include <stdio.h>
#include "sc_groups_c.h"
 
void
accessMyGroup_user ( d, group, client_data)
        sc_data_t * d;
        MyGroup_t* group;
        void* client_data;
{
}

スマートコードのコールバックに渡されるデータ構造 sc_data_t には、主にクライアントとサーバー間の通信に関係する情報が含まれています。この構造の定義は、ヘッダ ーファイル sc_groups_<言語>.h に含まれています。Sun WorkShop Visual は、このファイルを「コード生成」ダイアログで指定したディレクトリに生成します。スマートコード用に 生成されるコードの詳細については 「生成コード」、デザインからクライアントとサーバーを作成する方法については 第 17 章「thin クライアント用スマートコード」を参照してください。

「text1」の値を得るには、このコールバックに次の行を追加する必要があります。

char * val = SC_GET(Value, group->text1);

次に示すコードでは、トグルの状態を確認し、トグルがオンになっている場合には 「text1」にテキストを入力します。

if (SC_GET(State, group->toggle1)
	SC_SET(Value, group->text1, "The toggle is set");

この例では、C を使用しているものと想定しています。C の構文は扱いにくいため、プログラミングのしやすさを維持するためにマクロが使われています。このマク ロは SC_SET と SC_GET であり、2 つの引数を受け取ります。最初の引数は参照の種類
(値、状態などの取得しようとしている対象) であり、2 番目の引数は (グループを介して) アクセスしたいウィジェットです。

C++ によるスマートコードのコールバック

「コード生成」ダイアログで言語として C++ を選択した場合には、図 16-3 に示す例に対して生成されるスマートコードのコールバックは、上の例の場合とは異なります。この場合に は、Sun WorkShop Visual は、新しいクラス名としてコールバックの名前を使用して、定義済みの内部スマートコードクラス sc_data_c のサブクラスを生成します。クラス sc_data_c は、上述の C データ構造 sc_data_t に対応しています。このコールバックが起動されたときにメインアプリケーションから呼び出されるルーチ ンは、新しいクラスの doit() メソッドです。以下にディレクトリ callouts_cpp accessMyGroup_user.cpp の内容を示します。accessMyGroup は、「コールバック」ダイアログに入力されたコールバック・メソッドの名前です。

getGroup() メソッドは、親 sc_data_c クラス内の簡易ルーチンです。

#include <stdio.h>
#include "sc_groups_cpp.h"
 
class accessMyGroup_user: public sc_data_c
{
        void doit() {
		 MyGroup_c * g = (MyGroup_c *)getGroup();
/* 自分のコードをここに追加します */
        }
};
 
sc_data_c *
getNew_accessMyGroup()
{
        return (sc_data_c*) new 
accessMyGroup_user;
}

C++ では、C コードで説明したマクロを使用する必要はありません。次のコード行は「text1」の内容を取り出します。

char * str = g->text1->getValue();

次の行はトグルの状態を確認し、トグルがオンになっている場合には「text1」の内 容を設定します。

if (g->toggle1->getState())
	g->text1->setValue("The toggle is set");

Java によるスマートコードのコールバック

「コード生成」ダイアログで言語として Java を選択した場合には、図 16-3 に示すスマートコードのコールバックが、SCData スマートコードクラスのサブクラスとして生成されます。これは、上述の C++ の場合に似ています。クラスの doit() メソッドに、ユーザー自身のコードを追加します。スーパークラスである SCData には、グループへのハンドルを取得するための簡易関数が含まれています。SCData クラスは、生成ディレクトリの下位にある utils_java サブディレクトリのファイル SCData.java で定義されます。

図 16-3 に示す例の場合には、 callouts_java サブディレクトリの accessMyGroup_user.java というファイルに以下のコードが生成されます。

package callouts_java;
 
import groups_java.* ;
import utils_java.* ;
 
public class accessMyGroup_user extends 
SCData
{
        public void doit() {
                group0_c g = 
(group0_c)getGroup();
/* 自分のコードをここに追加します */ 
       
	}
 
        public static accessMyGroup_user getNew()
        {
                return  new accessMyGroup_user();
        }
}

Java では、C コードで説明したマクロを使用する必要はありません。その代わり、C++ の場合と似た操作を行う必要があります。次のコード行は「text1」の内容を取り出します。

String str = g.text1.getValue();

次の行ではトグルの状態を確認し、トグルがオンになっている場合には「text1」の 内容を設定します。

if (g.toggle1.getState())
	g.text1.setValue("The toggle is set");

作成コールバックによるダイアログの準備

上の例では、「活性化」用に定義されたコールバックを示します。つまり、「取得/ 設定」コードは、ボタンが押されるまで呼び出されません。ダイアログが最初に表示されたときにダイアロ グ内のウィジェットを「準備する」必要がある場合には、シェルの「作成」コールバックに対してスマート コードのコールバックを定義してください。このコールバックは、ダイアログの作成時に一度だけ行われま す。

ウィジェットの作成コールバックは、すべてのウィジェットの子が作成された後で 呼び出されます。スマートコードのコールバックからアクセスするには、グループ内のウィジェットを事前 に作成しておく必要があります。シェルの作成コールバックを使用してダイアログを準備すれば、シェルは 作成される最後のウィジェットであるため、作成コールバックが起動される前に、必ずすべてのウィジェッ トが作成されます。シェル上にコールバックを設定したくない場合には、グループ内のすべてのウィジェッ トを含んでいる任意のコンテナをデザインに追加します (まだの場合)。子ウィジェットは必ず親よりも前に作成されるため、このようにすれば、スマートコードの コールバックが起動される前に、スマートコードのコールバック用に指定したグループ内のウィジェットが 確実に作成されます。

getter と setter の使用

ツールキットに依存しないラッパーは、手軽に使用できます。ウィジェットの種類 ごとに提供される関数の一覧については、「getter と setter」を参照してください。

HTML ファイル

コールバックを検索しやすくし、スマートコードの要求時に生成されるファイルに 慣れていただくため、Sun WorkShop Visual は一連の HTML ファイルも生成します。主要な HTML ファイルは以下のものです。

  • index.html

このファイルは、最上位ディレクトリ (つまり、「コード生成」ダイアログで指定したディレクトリ) にあります。

このファイルを Web ブラウザ (または HTML を読み込めるその他のソフト) で開くと、生成されるファイル名が簡単な説明とともに表示されます。また、生成ディレクトリから Sun WorkShop Visual のインストールディレクトリにシンボリックリンクが張られているため、このファイルからスマートコード の一般的な機能について記述する HTML ファイルを参照することもできます。

取得と設定の学習

ここでは、グループと取得と設定用のスマートコードの主要な機能を紹介します。 この学習では、グループを設定し、スマートコードを使用してグループメンバーの値を取得および設定しま す。

完成したアプリケーションは、図 16-4 に示すようになります。

 

    図 16-4 最終のアプリケーション

    1. Sun WorkShop Visual を起動します。

    2. アプリケーションシェルとフォームを作成します。ボタン、ラベル、テキストフィールド、およびトグルを フォームの中に入れます。

    この最初の階層を図 16-5 に示します。

 

    図 16-5 学習用の最初の階層

    3. ラベル、テキスト、およびトグルのウィジェットを選択し、ツールバー上の「グループ編集」ボタンを押し ます。

    この操作は、ウィジェットメニューから「新規グループに追加」を選択するのと同 じです。

    グループエディタは、図 16-6 に示すように表示されます。

    4. 新しいグループの名前を「MyGroup」に変更するには、これを「名前」というテキストフィールドに入力し て Return キーを押します。

    グループの名前を変更する必要はありませんが、特に多数のグループを作成する場 合には、名前を変更すると後の操作が簡単になることがあります。

 

    図 16-6 新規グループ用のグループエディタ

    5. グループエディタを閉じます。

    後で見るように、「適用」ボタンが有効になるのは、コールバックに追加するグル ープを選択しているときだけです。

    6. 図 16-7 を参考にして、フォーム内のウィジェットとボタンのラベルの配置、ラベル、およびトグルを変更します。

    これは単なる表面的な変更です。ボタンのラベルは「Go」、ラベルは「Text:」、 トグルのラベルは「Set text」に設定します。

 

    図 16-7 ウィジェットを配置し、ラベルを設定

    7. ボタンの「コールバック」ダイアログを表示します。

    これを行うには、ツールバー上の「コールバック」ボタンを押すか、またはウィジ ェットメニューから「コールバック」を選択します。

    8. コールバックのリストで「活性化」が選択されていることを確認します。

    「活性化」を選択するのは、ボタンが押されたときにコールバックが呼び出される ようにするためです。

    注 - コールバックのリストでは、活性化コールバックの後に「J」が表示されています。 これは Java コードに適用できることを示しています。これらの注釈については、「コールバック」を参照してください。

    9. 「スマートコード」トグルをオンにします。

    10. 「スマートコード」オプションメニューから「取得/設定」を選択します。

    11. 「グループ」というボタンを押します。

    これによってグループエディタが表示されます。なお、「適用」ボタンは現在有効 になっています。

    12. MyGroup を選択して「適用」を押します。

    エディタが消えて、グループボタンの横にあるテキストフィールドに名前「MyGrou p」が追加されます。名前を直接テキストフィールドに入力することもできます。

    13. コールバックに「doGoButton」という名前を付けて「追加」を押します。

    ピリオドを中括弧で囲んだ状態 ({...}) で新しいコールバックがリストに表示され、これはスマートコードのコールバックであることを示します。 定義されたコールバックを図 16-8 に示します。

    図 16-8 新しいスマートコードのコールバック

    14. 「コールバック」ダイアログを閉じます。

    コールバックの定義が完成しました。次は、これに記入する必要があります。

    15. デザインを tutorial.xd として保存します。

    16. 「コード生成」ダイアログを表示し、ソースファイルのターゲットディレクトリを選択します。

    ターゲットディレクトリは、ダイアログの上部に表示されます。

    17. 「スタブ」、「コード」、「外部宣言」、「メインプログラム」、および「メークファイル」の生成トグル がオンになっていることを確認します。

    「コード生成」ダイアログの正しい設定を図 16-9 に示します。この学習では、ファイルの名前をデフォルトの「untitled」から「tutorial」に変更しました 。

 

    図 16-9 「コード生成」ダイアログ

    18. 「コード生成」ダイアログの上の方にある「オプション」ボタンを押して「コード生成オプション」ダイア ログを表示します。

    19. 「文字列」オプションメニューに「コード」を設定し、このダイアログを閉じます。

    簡単な学習では、別個のリソースファイルを生成するよりも、ラベル文字列をコー ドファイルに生成する方が便利です。

    20. 「生成」ボタンを押して C コードを生成します。

    もちろん、C++ コードも生成できます。後述するリスト例では C を使用しています。

    図 16-10 に示すディレクトリとファイルが生成されます。

 

    図 16-10 学習用に生成されたファイルとディレクトリ

    22. 好みのエディタを使用して、ディレクトリ callouts_c 内のファイル doGoButton_user.c を編集します。

    これは図 16-10 で強調表示されているファイルです。

    23. コールバック自身も「doGoButton_user」で呼び出されます。

    このリストを次に示します。

#include <stdio.h>
#include "sc_groups_c.h"
 
void
doGoButton_user ( d, group, client_data)
        sc_data_t * d;
        MyGroup_t* group;
        void* client_data;
{
 
}
if (SC_GET(State, group->toggle1))
	SC_SET(Value, group->text1, "The toggle is set");
else
	SC_SET(Value, group->text1, "");

    上記の行は、トグルがオンになっているかどうかを確認します。トグルがオンになっている場合には、テキストフィールドに「The toggle is set」と表示されます。オンでない場合には、テキストフィールドはクリアされます。

    25. 編集内容を保存します。

    26. 環境変数 VISUROOT に Sun WorkShop Visual のインストールディレクトリが設定されており、C コンパイラが PATH に含まれていることを確認します。

    コンパイルの前に設定の詳細を確認するには、ユーザーガイドのコードの生成に関する章を参照してください。

    27. ファイルが生成されたディレクトリで

    make

    と入力します。

    28. 構築したアプリケーションを実行してみます。

    29. トグルをオンにした状態とオフにした状態で、「Go」ボタンを押します。

これで学習が完了しました。この学習で追加した関数は非常に簡単なものですが、 ここで確立した枠組みに従えば、自分のアプリケーションをきわめて簡単に拡張することができます。thin クライアント用スマートコードのコールバックを定義することにより、デザインからクライアントとサーバ ーの両方を簡単に生成できます。これについては、第 17 章「thin クライアント用スマートコード」を参照してください。具体的な方法については、「thin クライアント用スマートコードの学習」を参照してください。


前へ 次へ 目次 文書セット ホーム

サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.