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 jint minPage = JNFCallIntMethod(env, srcPrinterJob, jm_getMinPage); 388 jint maxPage = JNFCallIntMethod(env, srcPrinterJob, jm_getMaxPage); 389 if (selectID ==0) { 390 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintAllPages]; 391 } else if (selectID == 2) { 392 // In Mac 10.7, Print ALL is deselected if PrintSelection is YES whether 393 // NSPrintAllPages is YES or NO 394 [printingDictionary setObject:[NSNumber numberWithBool:NO] forKey:NSPrintAllPages]; 395 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintSelectionOnly]; 396 } else { 397 // for PD_SELECTION or PD_NOSELECTION, check from/to page 398 // to determine which radio button to select 399 if (fromPage > minPage || toPage < maxPage) { 400 [printingDictionary setObject:[NSNumber numberWithBool:NO] forKey:NSPrintAllPages]; 401 } else { 402 [printingDictionary setObject:[NSNumber numberWithBool:YES] forKey:NSPrintAllPages]; 403 } 404 } 405 406 // setting fromPage and toPage will not be shown in the dialog if printing All pages 407 [printingDictionary setObject:[NSNumber numberWithInteger:fromPage] forKey:NSPrintFirstPage]; 408 [printingDictionary setObject:[NSNumber numberWithInteger:toPage] forKey:NSPrintLastPage]; 409 410 jobject page = JNFCallObjectMethod(env, srcPrinterJob, jm_getPageFormat); 411 if (page != NULL) { 412 javaPageFormatToNSPrintInfo(env, NULL, page, dst); 413 } 414 } 415 416 /* 417 * Class: sun_lwawt_macosx_CPrinterJob 418 * Method: abortDoc 419 * Signature: ()V 420 */ 421 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPrinterJob_abortDoc 422 (JNIEnv *env, jobject jthis) 423 { 424 JNF_COCOA_ENTER(env); 425 // This is only called during the printLoop from the printLoop thread 426 NSPrintOperation* printLoop = [NSPrintOperation currentOperation]; 427 NSPrintInfo* printInfo = [printLoop printInfo]; 428 [printInfo setJobDisposition:NSPrintCancelJob]; 429 JNF_COCOA_EXIT(env); |