OSDN Git Service

Committer: Yoshi
authorYoshi <Yoshi@MBPTM.local>
Wed, 27 Oct 2010 12:33:46 +0000 (23:33 +1100)
committerYoshi <Yoshi@MBPTM.local>
Wed, 27 Oct 2010 12:33:46 +0000 (23:33 +1100)
 On branch master
modified:   js.c
modified:   test.js
modified:   xaw.c
modified:   xaw.h

js.c
test.js
xaw.c
xaw.h

diff --git a/js.c b/js.c
index f4f0dd0..c48f3e4 100644 (file)
--- a/js.c
+++ b/js.c
@@ -128,7 +128,7 @@ static JSValueRef jsGlobalTest(
                                                           const JSObjectRef   args[],
                                                           JSValueRef*         jobjExp)
 {
-    //dialogtest(g_argc, g_argv);
+    JSObjectCallAsFunction(ctx, args[0], NULL, 0,NULL,NULL);
     return JSValueMakeUndefined(ctx);
 }
 
diff --git a/test.js b/test.js
index a46576e..3e32041 100644 (file)
--- a/test.js
+++ b/test.js
@@ -15,7 +15,7 @@ var label = new xawControl;
 label.Type=0;
 label.Parent=mywindow;
 label.Text=d.toString();
-label.Width=150;
+label.Width=255;
 label.Height=20;
 label.Left=0;
 label.Top=0;
diff --git a/xaw.c b/xaw.c
index 72f2539..d87eaeb 100644 (file)
--- a/xaw.c
+++ b/xaw.c
@@ -13,20 +13,15 @@ XtOrientation xawOrientationDirection[]={XtorientHorizontal, XtorientVertical};
 
 Widget *myWidgets;
 xawWidet *myCtrls;
+
 int objIDc = 0;
 
-char* winName;
 
 /* コールバック関数 */
 void xawJsCallbackFunction( Widget w, XtPointer client, XtPointer called )
 {
-       int* myID;
-       winName = (char*)malloc(sizeof(char)*16);
-       winName = XtName(w);
-       
-       sscanf(winName,"%d",myID);
-       printf("%d",*myID);
-       JSObjectCallAsFunction(*(myCtrls[*myID].Context), *(myCtrls[*myID].CallbackFunction), NULL, 0,NULL,NULL);
+    jsCallbackInfo* mycallback = (jsCallbackInfo *) client;
+       JSObjectCallAsFunction(mycallback->Context, mycallback->Function, NULL, 0,NULL,NULL);
 }
 
 Widget createForm(Widget* form, xawWindow window)
@@ -44,7 +39,7 @@ Widget createForm(Widget* form, xawWindow window)
        return top;
 }
 
-Widget createControl(xawWidet widget)
+Widget createControl(xawWidet widget, jsCallbackInfo* callinfo)
 {
        myWidgets = (Widget *)realloc( myWidgets, sizeof(Widget)*(objIDc+2) );
        if( myWidgets == NULL )//ポインタが空っぽだったら実行停止。
@@ -63,7 +58,7 @@ Widget createControl(xawWidet widget)
                                                                   /* ウィンドウの上端から */  XtNfromVert, NULL,
                                                                                                                   XtNvertDistance, widget.Top,
                                                                   NULL );
-       XtAddCallback( myWidgets[objIDc+2], XtNcallback, xawJsCallbackFunction, NULL );
+       XtAddCallback( myWidgets[objIDc+2], XtNcallback, xawJsCallbackFunction, callinfo );
        objIDc++;
        return myWidgets[objIDc+2];
 }
@@ -77,15 +72,7 @@ static JSValueRef jsControlCreate(
                                                                 JSValueRef*         jobjExp)
 {
        JSValueRef r = JSValueMakeNumber(ctx,  -1);
-       
-       //name
-       //JSStringRef     jstrName = JSValueToStringCopy(ctx, JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Name"), jobjExp), jobjExp);
-       //size_t          len     = JSStringGetMaximumUTF8CStringSize(jstrName);
-       //char*           name   =  (char*)malloc(len);
-       //JSStringGetUTF8CString(jstrName, name, len);
-       //**********
-       
-       
+
        //type
        int typenum     = (int)JSValueToNumber(ctx, JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Type"), jobjExp),NULL);   
        WidgetClass type;
@@ -147,17 +134,19 @@ static JSValueRef jsControlCreate(
        myCtrls[objIDc+2].Left = L;//x
        myCtrls[objIDc+2].Top = T;//y
        myCtrls[objIDc+2].Border = B;
-       myCtrls[objIDc+2].Context = ctx;
+       
+       jsCallbackInfo mycallback;
+       mycallback.Context = ctx;
+       mycallback.Function = NULL;
        
        
        if(!JSValueIsUndefined(ctx, JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Callback"), NULL)))
        {
-               myCtrls[objIDc+2].CallbackFunction = JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Callback"), NULL);
+               mycallback.Function = JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Callback"), NULL);
        }
+
        
-       
-       
-       createControl(myCtrls[objIDc+2]);
+       createControl(myCtrls[objIDc+2], &mycallback);
        r = JSValueMakeNumber(ctx,  objIDc);
        JSObjectSetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("ID"), r, kJSPropertyAttributeNone, NULL);
        return r;
@@ -194,6 +183,7 @@ static JSValueRef jsWindowCreate(
                myWindow.Direction = (JSValueToBoolean(ctx, JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Name"), jobjExp)))?XtorientVertical:XtorientHorizontal;
                
                myWidgets[objIDc] = createForm(&myWidgets[objIDc + 1], myWindow);
+
                
                
                r = JSValueMakeNumber(ctx,  objIDc);
@@ -249,5 +239,4 @@ void functionLoader_Gui(JSGlobalContextRef ctx, JSObjectRef jobjGlobal)
        JSObjectSetProperty(ctx, Widget, JSStringCreateWithUTF8CString("Top"), Control_Top, kJSPropertyAttributeNone, NULL);
        JSObjectSetProperty(ctx, Widget, JSStringCreateWithUTF8CString("Border"), Control_Border, kJSPropertyAttributeNone, NULL);
        JSObjectSetProperty(ctx, Widget, JSStringCreateWithUTF8CString("Callback"), Control_Callback, kJSPropertyAttributeNone, NULL);
-//     dialogtest(g_argc,g_argv);
 }
diff --git a/xaw.h b/xaw.h
index da66342..679a5f5 100644 (file)
--- a/xaw.h
+++ b/xaw.h
@@ -43,4 +43,10 @@ typedef struct  /* XawのWidetを構造体として定義 */
        
 } jsXawContext;
 
+typedef struct  /* JSにイベントを渡すための構造体 */
+{
+       JSGlobalContextRef Context;
+       JSObjectRef Function;
+} jsCallbackInfo;
+
 #endif