48 /* java.awt.Button fields */
49 jfieldID AwtButton::labelID;
50
51
52 /************************************************************************
53 * AwtButton methods
54 */
55
56 AwtButton::AwtButton() {
57 leftButtonDown = FALSE;
58 }
59
60 /* System provided button class */
61 LPCTSTR AwtButton::GetClassName() {
62 return TEXT("BUTTON");
63 }
64
65 /* Create a new AwtButton object and window. */
66 AwtButton* AwtButton::Create(jobject self, jobject parent)
67 {
68 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
69
70 /* the result */
71 AwtButton *c = NULL;
72
73 jobject target = NULL;
74 jstring label = NULL;
75
76 try {
77 LPCWSTR labelStr;
78 DWORD style;
79 DWORD exStyle = 0;
80 jint x, y, height, width;
81
82 if (env->EnsureLocalCapacity(2) < 0) {
83 return NULL;
84 }
85
86 PDATA pData;
87 AwtCanvas* awtParent;
88
89 JNI_CHECK_PEER_GOTO(parent, done);
90 awtParent = (AwtCanvas*)pData;
91 JNI_CHECK_NULL_GOTO(awtParent, "awtParent", done);
92
93 target = env->GetObjectField(self, AwtObject::targetID);
94 JNI_CHECK_NULL_GOTO(target, "target", done);
95
96 c = new AwtButton();
97
98 label = (jstring)env->GetObjectField(target, AwtButton::labelID);
99
100 x = env->GetIntField(target, AwtComponent::xID);
101 y = env->GetIntField(target, AwtComponent::yID);
102 width = env->GetIntField(target, AwtComponent::widthID);
103 height = env->GetIntField(target, AwtComponent::heightID);
104
105 if (label == NULL) {
106 labelStr = L"";
107 } else {
108 labelStr = JNU_GetStringPlatformChars(env, label, JNI_FALSE);
109 }
110 style = 0;
111
357 if (cls == NULL) {
358 return;
359 }
360 AwtButton::labelID = env->GetFieldID(cls, "label", "Ljava/lang/String;");
361 DASSERT(AwtButton::labelID != NULL);
362
363 CATCH_BAD_ALLOC;
364 }
365
366 /*
367 * Class: sun_awt_windows_WButtonPeer
368 * Method: setLabel
369 * Signature: (Ljava/lang/String;)V
370 */
371 JNIEXPORT void JNICALL
372 Java_sun_awt_windows_WButtonPeer_setLabel(JNIEnv *env, jobject self,
373 jstring label)
374 {
375 TRY;
376
377 PDATA pData;
378 JNI_CHECK_PEER_RETURN(self);
379
380 SetLabelStruct *sls = new SetLabelStruct;
381 sls->button = env->NewGlobalRef(self);
382 sls->label = (label != NULL) ? (jstring)env->NewGlobalRef(label) : NULL;
383
384 AwtToolkit::GetInstance().SyncCall(AwtButton::_SetLabel, sls);
385 // global refs and sls are deleted in _SetLabel()
386
387 CATCH_BAD_ALLOC;
388 }
389
390 /*
391 * Class: sun_awt_windows_WButtonPeer
392 * Method: create
393 * Signature: (Lsun/awt/windows/WComponentPeer;)V
394 */
395 JNIEXPORT void JNICALL
396 Java_sun_awt_windows_WButtonPeer_create(JNIEnv *env, jobject self,
397 jobject parent)
398 {
399 TRY;
400
401 PDATA pData;
402 JNI_CHECK_PEER_RETURN(parent);
403
404 AwtToolkit::CreateComponent(
405 self, parent, (AwtToolkit::ComponentFactory)AwtButton::Create);
406
407 JNI_CHECK_PEER_CREATION_RETURN(self);
408
409 CATCH_BAD_ALLOC;
410 }
411
412 } /* extern "C" */
|
48 /* java.awt.Button fields */
49 jfieldID AwtButton::labelID;
50
51
52 /************************************************************************
53 * AwtButton methods
54 */
55
56 AwtButton::AwtButton() {
57 leftButtonDown = FALSE;
58 }
59
60 /* System provided button class */
61 LPCTSTR AwtButton::GetClassName() {
62 return TEXT("BUTTON");
63 }
64
65 /* Create a new AwtButton object and window. */
66 AwtButton* AwtButton::Create(jobject self, jobject parent)
67 {
68 DASSERT(AwtToolkit::IsMainThread());
69 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
70
71 /* the result */
72 AwtButton *c = NULL;
73
74 jobject target = NULL;
75 jstring label = NULL;
76
77 try {
78 LPCWSTR labelStr;
79 DWORD style;
80 DWORD exStyle = 0;
81 jint x, y, height, width;
82
83 if (env->EnsureLocalCapacity(2) < 0) {
84 return NULL;
85 }
86
87 PDATA pData;
88 AwtCanvas* awtParent;
89
90 JNI_CHECK_PEER_GOTO(parent, done);
91 awtParent = (AwtCanvas*)pData;
92
93 target = env->GetObjectField(self, AwtObject::targetID);
94 JNI_CHECK_NULL_GOTO(target, "target", done);
95
96 c = new AwtButton();
97
98 label = (jstring)env->GetObjectField(target, AwtButton::labelID);
99
100 x = env->GetIntField(target, AwtComponent::xID);
101 y = env->GetIntField(target, AwtComponent::yID);
102 width = env->GetIntField(target, AwtComponent::widthID);
103 height = env->GetIntField(target, AwtComponent::heightID);
104
105 if (label == NULL) {
106 labelStr = L"";
107 } else {
108 labelStr = JNU_GetStringPlatformChars(env, label, JNI_FALSE);
109 }
110 style = 0;
111
357 if (cls == NULL) {
358 return;
359 }
360 AwtButton::labelID = env->GetFieldID(cls, "label", "Ljava/lang/String;");
361 DASSERT(AwtButton::labelID != NULL);
362
363 CATCH_BAD_ALLOC;
364 }
365
366 /*
367 * Class: sun_awt_windows_WButtonPeer
368 * Method: setLabel
369 * Signature: (Ljava/lang/String;)V
370 */
371 JNIEXPORT void JNICALL
372 Java_sun_awt_windows_WButtonPeer_setLabel(JNIEnv *env, jobject self,
373 jstring label)
374 {
375 TRY;
376
377 SetLabelStruct *sls = new SetLabelStruct;
378 sls->button = env->NewGlobalRef(self);
379 sls->label = (label != NULL) ? (jstring)env->NewGlobalRef(label) : NULL;
380
381 AwtToolkit::GetInstance().SyncCall(AwtButton::_SetLabel, sls);
382 // global refs and sls are deleted in _SetLabel()
383
384 CATCH_BAD_ALLOC;
385 }
386
387 /*
388 * Class: sun_awt_windows_WButtonPeer
389 * Method: create
390 * Signature: (Lsun/awt/windows/WComponentPeer;)V
391 */
392 JNIEXPORT void JNICALL
393 Java_sun_awt_windows_WButtonPeer_create(JNIEnv *env, jobject self,
394 jobject parent)
395 {
396 TRY;
397
398 AwtToolkit::CreateComponent(
399 self, parent, (AwtToolkit::ComponentFactory)AwtButton::Create);
400
401 CATCH_BAD_ALLOC;
402 }
403
404 } /* extern "C" */
|