* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
* </ul>
*/
public PrinterData open() {
PrinterData data = null;
NSPrintPanel panel = NSPrintPanel.printPanel();
NSPrintInfo printInfo = new NSPrintInfo(NSPrintInfo.sharedPrintInfo().copy());
printInfo.setOrientation(printerData.orientation == PrinterData.LANDSCAPE ? OS.NSLandscapeOrientation : OS.NSPortraitOrientation);
NSMutableDictionary dict = printInfo.dictionary();
dict.setValue(NSNumber.numberWithBool(printerData.collate), OS.NSPrintMustCollate);
dict.setValue(NSNumber.numberWithInt(printerData.copyCount), OS.NSPrintCopies);
if (printerData.printToFile) {
dict.setValue(OS.NSPrintSaveJob, OS.NSPrintJobDisposition);
}
if (printerData.fileName != null && printerData.fileName.length() > 0) {
dict.setValue(NSString.stringWith(printerData.fileName), OS.NSPrintSavePath);
}
dict.setValue(NSNumber.numberWithBool(printerData.scope == PrinterData.ALL_PAGES), OS.NSPrintAllPages);
if (printerData.scope == PrinterData.PAGE_RANGE) {
dict.setValue(NSNumber.numberWithInt(printerData.startPage), OS.NSPrintFirstPage);
dict.setValue(NSNumber.numberWithInt(printerData.endPage), OS.NSPrintLastPage);
}
panel.setOptions(OS.NSPrintPanelShowsPageSetupAccessory | panel.options());
Shell parent = getParent();
Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
int response;
if ((getStyle () & SWT.SHEET) != 0) {
initClasses();
SWTPrintPanelDelegate delegate = (SWTPrintPanelDelegate)new SWTPrintPanelDelegate().alloc().init();
long /*int*/ jniRef = OS.NewGlobalRef(this);
if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
OS.object_setInstanceVariable(delegate.id, SWT_OBJECT, jniRef);
returnCode = -1;
panel.beginSheetWithPrintInfo(printInfo, parent.view.window(), delegate, OS.sel_panelDidEnd_returnCode_contextInfo_, 0);
while (returnCode == -1) {
if (!display.readAndDispatch()) display.sleep();
}
if (delegate != null) delegate.release();
if (jniRef != 0) OS.DeleteGlobalRef(jniRef);
response = returnCode;
} else {
display.setData(SET_MODAL_DIALOG, this);
response = (int)/*64*/panel.runModalWithPrintInfo(printInfo);
}
display.setData(SET_MODAL_DIALOG, null);
if (response != OS.NSCancelButton) {
NSPrinter printer = printInfo.printer();
NSString str = printer.name();
data = new PrinterData(Printer.DRIVER, str.getString());
data.printToFile = printInfo.jobDisposition().isEqual(OS.NSPrintSaveJob);
if (data.printToFile) {
NSString filename = new NSString(dict.objectForKey(OS.NSPrintSavePath));
data.fileName = filename.getString();
}