Smart CODE | |
生成済みコードに関するオンラインガイド
|
スマートコードの場合、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(); } } |
GROUPNAME および METHODNAME は、生成済みのコードでは、グループおよびコールバックメソッドに指定した名前に置き換えられます。
ツールキット独立型プログラミングの例 | |
---|---|
言語 | 使用法 |
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); } } } |