351 NSNumber* nsLastPage = [printingDictionary objectForKey:NSPrintLastPage]; 352 if ([nsLastPage respondsToSelector:@selector(integerValue)]) 353 { 354 jLastPage = [nsLastPage integerValue] - 1; 355 } 356 } 357 358 JNFCallVoidMethod(env, dstPrinterJob, jm_setPageRange, jFirstPage, jLastPage); // AWT_THREADING Safe (known object) 359 } 360 } 361 362 static void javaPrinterJobToNSPrintInfo(JNIEnv* env, jobject srcPrinterJob, jobject srcPageable, NSPrintInfo* dst) 363 { 364 AWT_ASSERT_NOT_APPKIT_THREAD; 365 366 static JNF_CLASS_CACHE(jc_Pageable, "java/awt/print/Pageable"); 367 static JNF_MEMBER_CACHE(jm_getCopies, sjc_CPrinterJob, "getCopiesInt", "()I"); 368 static JNF_MEMBER_CACHE(jm_isCollated, sjc_CPrinterJob, "isCollated", "()Z"); 369 static JNF_MEMBER_CACHE(jm_getFromPage, sjc_CPrinterJob, "getFromPageAttrib", "()I"); 370 static JNF_MEMBER_CACHE(jm_getToPage, sjc_CPrinterJob, "getToPageAttrib", "()I"); 371 static JNF_MEMBER_CACHE(jm_getSelectAttrib, sjc_CPrinterJob, "getSelectAttrib", "()I"); 372 static JNF_MEMBER_CACHE(jm_getNumberOfPages, jc_Pageable, "getNumberOfPages", "()I"); 373 static JNF_MEMBER_CACHE(jm_getPageFormat, sjc_CPrinterJob, "getPageFormatFromAttributes", "()Ljava/awt/print/PageFormat;"); 374 375 NSMutableDictionary* printingDictionary = [dst dictionary]; 376 377 jint copies = JNFCallIntMethod(env, srcPrinterJob, jm_getCopies); // AWT_THREADING Safe (known object) 378 [printingDictionary setObject:[NSNumber numberWithInteger:copies] forKey:NSPrintCopies]; 379 380 jboolean collated = JNFCallBooleanMethod(env, srcPrinterJob, jm_isCollated); // AWT_THREADING Safe (known object) 381 [printingDictionary setObject:[NSNumber numberWithBool:collated ? YES : NO] forKey:NSPrintMustCollate]; 382 jint jNumPages = JNFCallIntMethod(env, srcPageable, jm_getNumberOfPages); // AWT_THREADING Safe (!appKit) 383 if (jNumPages != java_awt_print_Pageable_UNKNOWN_NUMBER_OF_PAGES) 384 { 385 jint selectID = JNFCallIntMethod(env, srcPrinterJob, jm_getSelectAttrib); 386 if (selectID ==0) { 387 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintAllPages]; 388 } else if (selectID == 2) { 389 // In Mac 10.7, Print ALL is deselected if PrintSelection is YES whether 390 // NSPrintAllPages is YES or NO 391 [printingDictionary setObject:[NSNumber numberWithBool:NO] forKey:NSPrintAllPages]; 392 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintSelectionOnly]; 393 } else { 394 [printingDictionary setObject:[NSNumber numberWithBool:NO] forKey:NSPrintAllPages]; 395 } 396 397 jint fromPage = JNFCallIntMethod(env, srcPrinterJob, jm_getFromPage); 398 jint toPage = JNFCallIntMethod(env, srcPrinterJob, jm_getToPage); 399 // setting fromPage and toPage will not be shown in the dialog if printing All pages 400 [printingDictionary setObject:[NSNumber numberWithInteger:fromPage] forKey:NSPrintFirstPage]; 401 [printingDictionary setObject:[NSNumber numberWithInteger:toPage] forKey:NSPrintLastPage]; 402 } 403 else 404 { 405 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintAllPages]; 406 } 407 jobject page = JNFCallObjectMethod(env, srcPrinterJob, jm_getPageFormat); 408 if (page != NULL) { 409 javaPageFormatToNSPrintInfo(env, NULL, page, dst); 410 } 411 } 412 413 /* 414 * Class: sun_lwawt_macosx_CPrinterJob 415 * Method: abortDoc 416 * Signature: ()V 417 */ 418 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPrinterJob_abortDoc 419 (JNIEnv *env, jobject jthis) 420 { 421 JNF_COCOA_ENTER(env); 422 // This is only called during the printLoop from the printLoop thread 423 NSPrintOperation* printLoop = [NSPrintOperation currentOperation]; 424 NSPrintInfo* printInfo = [printLoop printInfo]; 425 [printInfo setJobDisposition:NSPrintCancelJob]; 426 JNF_COCOA_EXIT(env); | 351 NSNumber* nsLastPage = [printingDictionary objectForKey:NSPrintLastPage]; 352 if ([nsLastPage respondsToSelector:@selector(integerValue)]) 353 { 354 jLastPage = [nsLastPage integerValue] - 1; 355 } 356 } 357 358 JNFCallVoidMethod(env, dstPrinterJob, jm_setPageRange, jFirstPage, jLastPage); // AWT_THREADING Safe (known object) 359 } 360 } 361 362 static void javaPrinterJobToNSPrintInfo(JNIEnv* env, jobject srcPrinterJob, jobject srcPageable, NSPrintInfo* dst) 363 { 364 AWT_ASSERT_NOT_APPKIT_THREAD; 365 366 static JNF_CLASS_CACHE(jc_Pageable, "java/awt/print/Pageable"); 367 static JNF_MEMBER_CACHE(jm_getCopies, sjc_CPrinterJob, "getCopiesInt", "()I"); 368 static JNF_MEMBER_CACHE(jm_isCollated, sjc_CPrinterJob, "isCollated", "()Z"); 369 static JNF_MEMBER_CACHE(jm_getFromPage, sjc_CPrinterJob, "getFromPageAttrib", "()I"); 370 static JNF_MEMBER_CACHE(jm_getToPage, sjc_CPrinterJob, "getToPageAttrib", "()I"); 371 static JNF_MEMBER_CACHE(jm_getMinPage, sjc_CPrinterJob, "getMinPageAttrib", "()I"); 372 static JNF_MEMBER_CACHE(jm_getMaxPage, sjc_CPrinterJob, "getMaxPageAttrib", "()I"); 373 static JNF_MEMBER_CACHE(jm_getSelectAttrib, sjc_CPrinterJob, "getSelectAttrib", "()I"); 374 static JNF_MEMBER_CACHE(jm_getNumberOfPages, jc_Pageable, "getNumberOfPages", "()I"); 375 static JNF_MEMBER_CACHE(jm_getPageFormat, sjc_CPrinterJob, "getPageFormatFromAttributes", "()Ljava/awt/print/PageFormat;"); 376 377 NSMutableDictionary* printingDictionary = [dst dictionary]; 378 379 jint copies = JNFCallIntMethod(env, srcPrinterJob, jm_getCopies); // AWT_THREADING Safe (known object) 380 [printingDictionary setObject:[NSNumber numberWithInteger:copies] forKey:NSPrintCopies]; 381 382 jboolean collated = JNFCallBooleanMethod(env, srcPrinterJob, jm_isCollated); // AWT_THREADING Safe (known object) 383 [printingDictionary setObject:[NSNumber numberWithBool:collated ? YES : NO] forKey:NSPrintMustCollate]; 384 jint selectID = JNFCallIntMethod(env, srcPrinterJob, jm_getSelectAttrib); 385 jint fromPage = JNFCallIntMethod(env, srcPrinterJob, jm_getFromPage); 386 jint toPage = JNFCallIntMethod(env, srcPrinterJob, jm_getToPage); 387 if (selectID ==0) { 388 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintAllPages]; 389 } else if (selectID == 2) { 390 // In Mac 10.7, Print ALL is deselected if PrintSelection is YES whether 391 // NSPrintAllPages is YES or NO 392 [printingDictionary setObject:[NSNumber numberWithBool:NO] forKey:NSPrintAllPages]; 393 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintSelectionOnly]; 394 } else { 395 jint minPage = JNFCallIntMethod(env, srcPrinterJob, jm_getMinPage); 396 jint maxPage = JNFCallIntMethod(env, srcPrinterJob, jm_getMaxPage); 397 398 // for PD_SELECTION or PD_NOSELECTION, check from/to page 399 // to determine which radio button to select 400 if (fromPage > minPage || toPage < maxPage) { 401 [printingDictionary setObject:[NSNumber numberWithBool:NO] forKey:NSPrintAllPages]; 402 } else { 403 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintAllPages]; 404 } 405 } 406 407 // setting fromPage and toPage will not be shown in the dialog if printing All pages 408 [printingDictionary setObject:[NSNumber numberWithInteger:fromPage] forKey:NSPrintFirstPage]; 409 [printingDictionary setObject:[NSNumber numberWithInteger:toPage] forKey:NSPrintLastPage]; 410 411 jobject page = JNFCallObjectMethod(env, srcPrinterJob, jm_getPageFormat); 412 if (page != NULL) { 413 javaPageFormatToNSPrintInfo(env, NULL, page, dst); 414 } 415 } 416 417 /* 418 * Class: sun_lwawt_macosx_CPrinterJob 419 * Method: abortDoc 420 * Signature: ()V 421 */ 422 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPrinterJob_abortDoc 423 (JNIEnv *env, jobject jthis) 424 { 425 JNF_COCOA_ENTER(env); 426 // This is only called during the printLoop from the printLoop thread 427 NSPrintOperation* printLoop = [NSPrintOperation currentOperation]; 428 NSPrintInfo* printInfo = [printLoop printInfo]; 429 [printInfo setJobDisposition:NSPrintCancelJob]; 430 JNF_COCOA_EXIT(env); |