diff options
author | Douglas Mencken <dougmencken@gmail.com> | 2015-10-21 09:59:34 -0400 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2015-10-24 20:14:21 +0000 |
commit | 157420cf07078b036fb11e6950d5bcae032a4bb4 (patch) | |
tree | daa714c7fc1fb8a76737c7760b052481d75a667c /vcl/osx | |
parent | 34abbb53f347f53892cc9dde60e36499588681fd (diff) |
vcl.osx.print: bin >>vintage<< implementation
Change-Id: I09958e48846962aa5ad29e3e6cc0ce2450973f74
Reviewed-on: https://gerrit.libreoffice.org/19516
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Norbert Thiebaud <nthiebaud@gmail.com>
Diffstat (limited to 'vcl/osx')
-rw-r--r-- | vcl/osx/printaccessoryview.mm | 319 |
1 files changed, 3 insertions, 316 deletions
diff --git a/vcl/osx/printaccessoryview.mm b/vcl/osx/printaccessoryview.mm index 80d972e2e28f..b4042d2441a9 100644 --- a/vcl/osx/printaccessoryview.mm +++ b/vcl/osx/printaccessoryview.mm @@ -45,16 +45,6 @@ using namespace com::sun::star; using namespace com::sun::star::beans; using namespace com::sun::star::uno; -#if MACOSX_SDK_VERSION <= 1040 -// as long as you are linking with 10.4 libraries there's no preview -# define VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG -# undef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG -#else -// since 10.5 you can use multiple accessory views and have accessory views and a preview -# define MODERN_IMPLEMENTATION_OF_PRINT_DIALOG -# undef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG -#endif - class ControllerProperties; @interface ControlTarget : NSObject @@ -64,14 +54,9 @@ class ControllerProperties; -(id)initWithControllerMap: (ControllerProperties*)pController; -(void)triggered:(id)pSender; -(void)triggeredNumeric:(id)pSender; -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG --(void)triggeredPreview:(id)pSender; -#endif -(void)dealloc; @end -#ifdef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG - @interface AquaPrintPanelAccessoryController : NSViewController< NSPrintPanelAccessorizing > { NSPrintOperation *mpPrintOperation; @@ -163,8 +148,6 @@ class ControllerProperties; @end -#endif - class ControllerProperties { std::map< int, rtl::OUString > maTagToPropertyName; @@ -174,51 +157,14 @@ class ControllerProperties int mnNextTag; sal_Int32 mnLastPageCount; ResStringArray maLocalizedStrings; -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - vcl::PrinterController* mpController; - NSPrintOperation* mpOp; - PrintAccessoryViewState* mpState; - NSBox* mpPreviewBox; - NSImageView* mpPreview; // print preview is not provided "by default" - NSView* mpAccessoryView; - NSTabView* mpTabView; - NSTextField* mpPageEdit; - NSStepper* mpStepper; -#else AquaPrintPanelAccessoryController* mpAccessoryController; -#endif public: - ControllerProperties( -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - vcl::PrinterController* i_pController - , NSPrintOperation* i_pOp - , PrintAccessoryViewState* i_pState - , NSView* i_pAccessoryView - , NSTabView* i_pTabView -#else - AquaPrintPanelAccessoryController* i_pAccessoryController -#endif - ) + ControllerProperties( AquaPrintPanelAccessoryController* i_pAccessoryController ) : mnNextTag( 0 ) -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - , mnLastPageCount( i_pController->getFilteredPageCount() ) - , mpController( i_pController ) - , mpOp( i_pOp ) - , mpState( i_pState ) - , mpPreviewBox( nil ) - , mpPreview( nil ) - , mpAccessoryView( i_pAccessoryView ) - , mpTabView( i_pTabView ) - , mpPageEdit( nil ) - , mpStepper( nil ) -#else , mnLastPageCount( [i_pAccessoryController printerController]->getFilteredPageCount() ) -#endif , maLocalizedStrings( VclResId( SV_PRINT_NATIVE_STRINGS ) ) -#ifdef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG , mpAccessoryController( i_pAccessoryController ) -#endif { assert( maLocalizedStrings.Count() >= 5 && "resources not found" ); } @@ -237,47 +183,6 @@ public: : OUString( "Print selection only" ); } -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - void updatePrintJob() - { - // page range may be changed by option choice - sal_Int32 nPages = mpController->getFilteredPageCount(); - - mpState->bNeedRestart = false; - if( nPages != mnLastPageCount ) - { - #if OSL_DEBUG_LEVEL > 1 - SAL_INFO( "vcl.osx.print", "number of pages changed" << - " from " << mnLastPageCount << " to " << nPages ); - #endif - mpState->bNeedRestart = true; - } - mnLastPageCount = nPages; - - NSTabViewItem* pItem = [mpTabView selectedTabViewItem]; - if( pItem ) - mpState->nLastPage = [mpTabView indexOfTabViewItem: pItem]; - else - mpState->nLastPage = 0; - - if( mpState->bNeedRestart ) - { - // AppKit does not give a chance of changing the page count - // and don't let cancel the dialog either - // hack: send a cancel message to the modal window displaying views - NSWindow* pNSWindow = [NSApp modalWindow]; - if( pNSWindow ) - [pNSWindow cancelOperation: nil]; - [[mpOp printInfo] setJobDisposition: NSPrintCancelJob]; - } - else - { - sal_Int32 nPage = [mpStepper intValue]; - updatePreviewImage( nPage-1 ); - } - } -#endif - int addNameTag( const rtl::OUString& i_rPropertyName ) { int nNewTag = mnNextTag++; @@ -319,18 +224,12 @@ public: std::map< int, sal_Int32 >::const_iterator value_it = maTagToValueInt.find( i_nTag ); if( name_it != maTagToPropertyName.end() && value_it != maTagToValueInt.end() ) { -#ifdef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG vcl::PrinterController * mpController = [mpAccessoryController printerController]; -#endif PropertyValue* pVal = mpController->getValue( name_it->second ); if( pVal ) { pVal->Value <<= value_it->second; -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - updatePrintJob(); -#else mnLastPageCount = [mpAccessoryController updatePrintOperation: mnLastPageCount]; -#endif } } } @@ -340,18 +239,12 @@ public: std::map< int, rtl::OUString >::const_iterator name_it = maTagToPropertyName.find( i_nTag ); if( name_it != maTagToPropertyName.end() ) { -#ifdef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG vcl::PrinterController * mpController = [mpAccessoryController printerController]; -#endif PropertyValue* pVal = mpController->getValue( name_it->second ); if( pVal ) { pVal->Value <<= i_nValue; -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - updatePrintJob(); -#else mnLastPageCount = [mpAccessoryController updatePrintOperation: mnLastPageCount]; -#endif } } } @@ -361,9 +254,7 @@ public: std::map< int, rtl::OUString >::const_iterator name_it = maTagToPropertyName.find( i_nTag ); if( name_it != maTagToPropertyName.end() ) { -#ifdef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG vcl::PrinterController * mpController = [mpAccessoryController printerController]; -#endif PropertyValue* pVal = mpController->getValue( name_it->second ); if( pVal ) { @@ -372,11 +263,8 @@ public: pVal->Value <<= i_bValue ? sal_Int32(2) : sal_Int32(0); else pVal->Value <<= i_bValue; -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - updatePrintJob(); -#else + mnLastPageCount = [mpAccessoryController updatePrintOperation: mnLastPageCount]; -#endif } } } @@ -386,18 +274,12 @@ public: std::map< int, rtl::OUString >::const_iterator name_it = maTagToPropertyName.find( i_nTag ); if( name_it != maTagToPropertyName.end() ) { -#ifdef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG vcl::PrinterController * mpController = [mpAccessoryController printerController]; -#endif PropertyValue* pVal = mpController->getValue( name_it->second ); if( pVal ) { pVal->Value <<= i_rValue; -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - updatePrintJob(); -#else mnLastPageCount = [mpAccessoryController updatePrintOperation: mnLastPageCount]; -#endif } } } @@ -421,9 +303,7 @@ public: std::map< int, rtl::OUString >::const_iterator name_it = maTagToPropertyName.find( nTag ); if( name_it != maTagToPropertyName.end() && ! name_it->second.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("PrintContent")) ) { -#ifdef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG vcl::PrinterController * mpController = [mpAccessoryController printerController]; -#endif BOOL bEnabled = mpController->isUIOptionEnabled( name_it->second ) ? YES : NO; if( pCtrl ) { @@ -438,166 +318,6 @@ public: } } -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - - void updatePreviewImage( sal_Int32 i_nPage ) - { - sal_Int32 nPages = mpController->getFilteredPageCount(); - NSRect aViewFrame = [mpPreview frame]; - Size aPixelSize( static_cast<long>(aViewFrame.size.width), - static_cast<long>(aViewFrame.size.height) ); - if( i_nPage >= 0 && nPages > i_nPage ) - { - GDIMetaFile aMtf; - PrinterController::PageSize aPageSize( mpController->getFilteredPageFile( i_nPage, aMtf ) ); - auto aDev(VclPtr<VirtualDevice>::Create()); - if( mpController->getPrinter()->GetPrinterOptions().IsConvertToGreyscales() ) - aDev->SetDrawMode( aDev->GetDrawMode() | ( DrawModeFlags::GrayLine | DrawModeFlags::GrayFill | DrawModeFlags::GrayText | - DrawModeFlags::GrayBitmap | DrawModeFlags::GrayGradient ) ); - // see salprn.cxx, currently we pretend to be a 720dpi device on printers - aDev->SetReferenceDevice( 720, 720 ); - aDev->EnableOutput(); - Size aLogicSize( aDev->PixelToLogic( aPixelSize, MapMode( MAP_100TH_MM ) ) ); - double fScaleX = double(aLogicSize.Width())/double(aPageSize.aSize.Width()); - double fScaleY = double(aLogicSize.Height())/double(aPageSize.aSize.Height()); - double fScale = (fScaleX < fScaleY) ? fScaleX : fScaleY; - // #i104784# if we render the page too small then rounding issues result in - // layout artifacts looking really bad. So scale the page unto a device that is not - // full page size but not too small either. This also results in much better visual - // quality of the preview, e.g. when its height approaches the number of text lines - if( fScale < 0.1 ) - fScale = 0.1; - aMtf.WindStart(); - aMtf.Scale( fScale, fScale ); - aMtf.WindStart(); - aLogicSize.Width() = long(double(aPageSize.aSize.Width()) * fScale); - aLogicSize.Height() = long(double(aPageSize.aSize.Height()) * fScale); - aPixelSize = aDev->LogicToPixel( aLogicSize, MapMode( MAP_100TH_MM ) ); - aDev->SetOutputSizePixel( aPixelSize ); - aMtf.WindStart(); - aDev->SetMapMode( MapMode( MAP_100TH_MM ) ); - aMtf.Play( aDev.get(), Point( 0, 0 ), aLogicSize ); - aDev->EnableMapMode( FALSE ); - Image aImage( aDev->GetBitmap( Point( 0, 0 ), aPixelSize ) ); - NSImage* pImage = CreateNSImage( aImage ); - [mpPreview setImage: [pImage autorelease]]; - } - else - [mpPreview setImage: nil]; - } - - void setupPreview( ControlTarget* i_pCtrlTarget ) - { - if( maLocalizedStrings.Count() < 3 ) - return; - - // get the preview control - NSRect aPreviewFrame = [mpAccessoryView frame]; - aPreviewFrame.origin.x = 0; - aPreviewFrame.origin.y = 5; - aPreviewFrame.size.width = 190; - aPreviewFrame.size.height -= 7; - - // create a box to put the preview controls in - mpPreviewBox = [[NSBox alloc] initWithFrame: aPreviewFrame]; - [mpPreviewBox setTitle: [CreateNSString( maLocalizedStrings.GetString( 0 ) ) autorelease]]; - [mpAccessoryView addSubview: [mpPreviewBox autorelease]]; - - // now create the image view of the preview - NSSize aMargins = [mpPreviewBox contentViewMargins]; - aPreviewFrame.origin.x = 0; - aPreviewFrame.origin.y = 34; - aPreviewFrame.size.width -= 2*(aMargins.width+1); - aPreviewFrame.size.height -= 61; - mpPreview = [[NSImageView alloc] initWithFrame: aPreviewFrame]; - [mpPreview setImageScaling: NSImageScaleProportionallyDown]; - [mpPreview setImageAlignment: NSImageAlignCenter]; - [mpPreview setImageFrameStyle: NSImageFrameNone]; - [mpPreviewBox addSubview: [mpPreview autorelease]]; - - // add a label - sal_Int32 nPages = mpController->getFilteredPageCount(); - rtl::OUStringBuffer aBuf( 16 ); - aBuf.append( "/ " ); - aBuf.append( rtl::OUString::number( nPages ) ); - - NSString* pText = CreateNSString( aBuf.makeStringAndClear() ); - NSRect aTextRect = { { 100, 5 }, { 100, 22 } }; - NSTextView* aPagesLabel = [[NSTextView alloc] initWithFrame: aTextRect]; - [aPagesLabel setFont: [NSFont controlContentFontOfSize: 0]]; - [aPagesLabel setEditable: NO]; - [aPagesLabel setSelectable: NO]; - [aPagesLabel setDrawsBackground: NO]; - [aPagesLabel setString: [pText autorelease]]; - [aPagesLabel setToolTip: [CreateNSString( maLocalizedStrings.GetString( 2 ) ) autorelease]]; - [mpPreviewBox addSubview: [aPagesLabel autorelease]]; - - NSRect aFieldRect = { { 45, 5 }, { 35, 25 } }; - mpPageEdit = [[NSTextField alloc] initWithFrame: aFieldRect]; - [mpPageEdit setEditable: YES]; - [mpPageEdit setSelectable: YES]; - [mpPageEdit setDrawsBackground: YES]; - [mpPageEdit setToolTip: [CreateNSString( maLocalizedStrings.GetString( 1 ) ) autorelease]]; - [mpPreviewBox addSubview: [mpPageEdit autorelease]]; - - // add a stepper control - NSRect aStepFrame = { { 85, 5 }, { 15, 25 } }; - mpStepper = [[NSStepper alloc] initWithFrame: aStepFrame]; - [mpStepper setIncrement: 1]; - [mpStepper setValueWraps: NO]; - [mpPreviewBox addSubview: [mpStepper autorelease]]; - - // constrain the text field to decimal numbers - NSNumberFormatter* pFormatter = [[NSNumberFormatter alloc] init]; - [pFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4]; - [pFormatter setMinimum: [[NSNumber numberWithInt: 1] autorelease]]; - [pFormatter setMaximum: [[NSNumber numberWithInt: nPages] autorelease]]; - [pFormatter setNumberStyle: NSNumberFormatterDecimalStyle]; - [pFormatter setAllowsFloats: NO]; - [pFormatter setMaximumFractionDigits: 0]; - [mpPageEdit setFormatter: pFormatter]; - [mpStepper setMinValue: 1]; - [mpStepper setMaxValue: nPages]; - - [mpPageEdit setIntValue: 1]; - [mpStepper setIntValue: 1]; - - // connect target and action - [mpStepper setTarget: i_pCtrlTarget]; - [mpStepper setAction: @selector(triggeredPreview:)]; - [mpPageEdit setTarget: i_pCtrlTarget]; - [mpPageEdit setAction: @selector(triggeredPreview:)]; - - // set first preview image - updatePreviewImage( 0 ); - } - - void changePreview( NSObject* i_pSender ) - { - if( [i_pSender isMemberOfClass: [NSTextField class]] ) - { - NSTextField* pField = (NSTextField*)i_pSender; - if( pField == mpPageEdit ) // sanity check - { - sal_Int32 nPage = [pField intValue]; - [mpStepper setIntValue: nPage]; - updatePreviewImage( nPage-1 ); - } - } - else if( [i_pSender isMemberOfClass: [NSStepper class]] ) - { - NSStepper* pStepper = (NSStepper*)i_pSender; - if( pStepper == mpStepper ) // sanity check - { - sal_Int32 nPage = [pStepper intValue]; - [mpPageEdit setIntValue: nPage]; - updatePreviewImage( nPage-1 ); - } - } - } - -#endif - }; static OUString filterAccelerator( rtl::OUString const & rText ) @@ -696,13 +416,6 @@ static OUString filterAccelerator( rtl::OUString const & rText ) mpController->updateEnableState(); } -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG --(void)triggeredPreview:(id)pSender -{ - mpController->changePreview( pSender ); -} -#endif - -(void)dealloc { delete mpController; @@ -1257,17 +970,12 @@ static void addEdit( NSView* pCurParent, long& rCurX, long& rCurY, long nAttachO return nil; NSRect aViewFrame = { NSZeroPoint, { 600, 400 } }; -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - NSRect aTabViewFrame = { { 190, 0 }, { 410, 400 } }; -#else NSRect aTabViewFrame = aViewFrame; -#endif NSView* pAccessoryView = [[NSView alloc] initWithFrame: aViewFrame]; NSTabView* pTabView = [[NSTabView alloc] initWithFrame: aTabViewFrame]; [pAccessoryView addSubview: [pTabView autorelease]]; -#ifdef MODERN_IMPLEMENTATION_OF_PRINT_DIALOG // create the accessory controller AquaPrintPanelAccessoryController* pAccessoryController = [[AquaPrintPanelAccessoryController alloc] initWithNibName: nil bundle: nil]; @@ -1275,19 +983,13 @@ static void addEdit( NSView* pCurParent, long& rCurX, long& rCurY, long nAttachO [pAccessoryController forPrintOperation: pOp]; [pAccessoryController withPrinterController: pController]; [pAccessoryController withViewState: pState]; -#endif NSView* pCurParent = 0; long nCurY = 0; long nCurX = 0; NSSize aMaxTabSize = NSZeroSize; - ControllerProperties* pControllerProperties = -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - new ControllerProperties( pController, pOp, pState, pAccessoryView, pTabView ); -#else - new ControllerProperties( pAccessoryController ); -#endif + ControllerProperties* pControllerProperties = new ControllerProperties( pAccessoryController ); ControlTarget* pCtrlTarget = [[ControlTarget alloc] initWithControllerMap: pControllerProperties]; std::vector< ColumnItem > aLeftColumn, aRightColumn; @@ -1529,12 +1231,6 @@ static void addEdit( NSView* pCurParent, long& rCurX, long& rCurY, long nAttachO pControllerProperties->updateEnableState(); adjustViewAndChildren( pCurParent, aMaxTabSize, aLeftColumn, aRightColumn ); -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - // leave some space for preview - if( aMaxTabSize.height < 200 ) - aMaxTabSize.height = 200; -#endif - // now reposition everything again so it is upper bound adjustTabViews( pTabView, aMaxTabSize ); @@ -1548,20 +1244,11 @@ static void addEdit( NSView* pCurParent, long& rCurX, long& rCurY, long nAttachO aViewFrame.size.height = aTabCtrlSize.height + aTabViewFrame.origin.y; [pAccessoryView setFrameSize: aViewFrame.size]; -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - pControllerProperties->setupPreview( pCtrlTarget ); -#endif - -#ifdef VINTAGE_IMPLEMENTATION_OF_PRINT_DIALOG - // set the accessory view - [pOp setAccessoryView: [pAccessoryView autorelease]]; -#else // -(void)setAccessoryView:(NSView *)aView of NSPrintOperation is deprecated since 10.5 // get the print panel NSPrintPanel* pPrintPanel = [pOp printPanel]; [pPrintPanel setOptions: [pPrintPanel options] | NSPrintPanelShowsPreview]; // add the accessory controller to the panel [pPrintPanel addAccessoryController: [pAccessoryController autorelease]]; -#endif // set the current selecte tab item if( pState->nLastPage >= 0 && pState->nLastPage < [pTabView numberOfTabViewItems] ) |