Smart CODE
生成済みコードに関するオンラインガイド

名前
UserCallbackProc - 取得/設定スマートコードスタブ
概要
ツールキット独立型のプログラミングのために取得/設定スマートコードを使用している場合、X-Designer スタブファイルにはコードを書き込みません。各ツールキットには、それぞれ独自のスタブ (およびスタブファイル) が必要です。

スマートコードの場合、X-Designer スタブファイル内のコールバックは、このUserCallbackProc をコールアウトするように事前構成されます。C++ を使用して Motif および MFC で開発を行なっている場合、同じコールアウトルーチンが両方のコールバックセットによって呼び出されます。新しいツールキットに異なる言語を使用する必要がある場合 (たとえば、AWT に Java を使用する必要がある場合)、スマートコード API はある言語から別の言語への移行が表面的な作業になるように設計されています。

このルーチンが呼び出されると、コールバックに関連付けられたグループ内のすべての要素を含むデータオブジェクトにアクセスできるようになります。このグループデータオブジェクトは、グループ内のあらゆるコントロールの値にアクセスし、変更するために使用でき、そのために Motif、MFC、または Java AWT API を使用してプログラミングをする必要はありません。

C の場合、コールアウトはルーチンです。スマートコードデータは、引数として渡されます。C++ および Java の場合、コールアウトはスマートコードデータクラスのサブクラスに当たるクラスです。doit() メソッドが呼び出され、スマートコードデータが getGroup() や getPollInterval() のような getter メソッドからアクセスされます。

形式
C
typedef void (*UserCallbackProc)( sc_data_t *, GROUPNAME_t*, void *)
        sc_data_t * data;
        GROUPNAME_t* group;
        void* client_data;
C++
class METHODNAME_user: public sc_data_c
{
        void doit() {
                GROUPNAME_c * g = (GROUPNAME_c *)getGroup();
        }
};

sc_data_c *
getNew_METHODNAME()
{
        return (sc_data_c*) new METHODNAME_user;
}
Java
public class METHODNAME_user extends SCData
{
        public void doit() {
                GROUPNAME_c g = (GROUPNAME_c)getGroup();
        }

        public static METHODNAME_user getNew()
        {
                return  new METHODNAME_user();
        }
}
入力
このルーチンは、ユーザーの許可がある場合、スマートコードデータ構造グループ、およびクライアントデータにアクセスします。C バージョンでは、これらの 3 つはすべて関数の引数になります。C++ および Java では、クラスはスマートコードデータクラスのサブクラスで、データクラスのインスタンスです。クライアントデータとグループは、getter メソッドから使用できます。
その他の注意
C では、コードはスタブ関数の中に記述します。C++ および Java では、スタブの doit() メソッドが呼び出されますが、プログラムし直すためにクラス全体を使用することができます。

GROUPNAME および METHODNAME は、生成済みのコードでは、グループおよびコールバックメソッドに指定した名前に置き換えられます。

説明
使用法
取得/設定スマートコードコールアウトは、ツールキット独立型で、既存のツールキットコールバックと置き換えることができます。これは、アプリケーションコードと一緒に直接プログラムできるようになっています。次に、同じ処理コードを C、C++、および Java で書いた例を示します。
ツールキット独立型プログラミングの例
言語 使用法
C
void
doit_callback_user (sc_data_t * d, mygroup_t* g, void* client_data)
{
        int ix  = SC_GET(SelectionByIndex,g->optionMenu1);
        int val = SC_GET(State,g->toggle1);

        if (ix == val)
                SC_SET(Value,g->text1, "ok");
        else {
                SC_SET(Value,g->text1, "Changed!!");
                SC_SET(SelectionByIndex,g->optionMenu1,val);
        }
}
C++
class doit_method: public sc_data_c
{
        void doit() {
                mygroup_c * g = (mygroup_c*) getGroup();
                int ix  = g->optionMenu1->getSelectionByIndex();
                int val = g->toggle1->getState();

                if (ix == val)
                        g->text1->setValue("ok");
                else {
                        g->text1->setValue("Changed!!");
                        g->optionMenu1->setSelectionByIndex( val);
                }
        }
};
Java
public class doit_method extends SCData
{
        public void doit() {
                mygroup_c g = (mygroup_c) getGroup();
                int ix   = g.optionMenu1.getSelectionByIndex();
                boolean togval = g.toggle1.getState();
                int val = 0;

                if (togval)
                        val = 1;

                if (ix == val)
                        g.text1.setValue("ok");
                else {
                        g.text1.setValue("Changed!!");
                        g.optionMenu1.setSelectionByIndex( val);
                }
        }
}
関連項目