mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-25 06:51:08 +00:00
Started implementation of printing.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@8107 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
9b0d585c6c
commit
1b7e190b3e
1 changed files with 255 additions and 32 deletions
|
@ -1,12 +1,15 @@
|
||||||
/*
|
/*
|
||||||
NSPrintOperation.m
|
NSPrintOperation.m
|
||||||
|
|
||||||
Description...
|
Controls operations generating EPS, PDF or PS print jobs.
|
||||||
|
|
||||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Author: Scott Christley <scottc@net-community.com>
|
Author: Scott Christley <scottc@net-community.com>
|
||||||
Date: 1996
|
Date: 1996
|
||||||
|
Author: Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
Date: November 2000
|
||||||
|
Started implementation.
|
||||||
|
|
||||||
This file is part of the GNUstep GUI Library.
|
This file is part of the GNUstep GUI Library.
|
||||||
|
|
||||||
|
@ -27,8 +30,35 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gnustep/gui/config.h>
|
#include <gnustep/gui/config.h>
|
||||||
|
#include <Foundation/NSString.h>
|
||||||
|
#include <Foundation/NSData.h>
|
||||||
|
#include <Foundation/NSException.h>
|
||||||
|
#include <Foundation/NSThread.h>
|
||||||
|
#include <AppKit/AppKitExceptions.h>
|
||||||
|
#include <AppKit/NSGraphicsContext.h>
|
||||||
|
#include <AppKit/NSView.h>
|
||||||
|
#include <AppKit/NSPrintPanel.h>
|
||||||
|
#include <AppKit/NSPrintInfo.h>
|
||||||
#include <AppKit/NSPrintOperation.h>
|
#include <AppKit/NSPrintOperation.h>
|
||||||
|
|
||||||
|
@interface NSPrintOperation (Private)
|
||||||
|
|
||||||
|
- (void) setPath: (NSString *) path;
|
||||||
|
|
||||||
|
- (id) initWithView:(NSView *)aView
|
||||||
|
insideRect:(NSRect)rect
|
||||||
|
toData:(NSMutableData *)data
|
||||||
|
printInfo:(NSPrintInfo *)aPrintInfo;
|
||||||
|
|
||||||
|
- (id) initPDFOperationWithView:(NSView *)aView
|
||||||
|
insideRect:(NSRect)rect
|
||||||
|
toData:(NSMutableData *)data
|
||||||
|
printInfo:(NSPrintInfo*)aPrintInfo;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
static NSString *NSPrintOperationThreadKey = @"NSPrintOperationThreadKey";
|
||||||
|
|
||||||
@implementation NSPrintOperation
|
@implementation NSPrintOperation
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -48,36 +78,87 @@
|
||||||
//
|
//
|
||||||
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)aView
|
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)aView
|
||||||
insideRect:(NSRect)rect
|
insideRect:(NSRect)rect
|
||||||
toData:(NSMutableData *)data
|
toData:(NSMutableData *)data
|
||||||
{
|
{
|
||||||
return nil;
|
return [self EPSOperationWithView: aView
|
||||||
|
insideRect: rect
|
||||||
|
toData: data
|
||||||
|
printInfo: nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)aView
|
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)aView
|
||||||
insideRect:(NSRect)rect
|
insideRect:(NSRect)rect
|
||||||
toData:(NSMutableData *)data
|
toData:(NSMutableData *)data
|
||||||
printInfo:(NSPrintInfo *)aPrintInfo
|
printInfo:(NSPrintInfo *)aPrintInfo
|
||||||
{
|
{
|
||||||
return nil;
|
return [[self alloc] initEPSOperationWithView: aView
|
||||||
|
insideRect: rect
|
||||||
|
toData: data
|
||||||
|
printInfo: aPrintInfo];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)aView
|
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)aView
|
||||||
insideRect:(NSRect)rect
|
insideRect:(NSRect)rect
|
||||||
toPath:(NSString *)path
|
toPath:(NSString *)path
|
||||||
printInfo:(NSPrintInfo *)aPrintInfo
|
printInfo:(NSPrintInfo *)aPrintInfo
|
||||||
{
|
{
|
||||||
return nil;
|
NSMutableData *data = [NSMutableData data];
|
||||||
|
NSPrintOperation *new = [self EPSOperationWithView: aView
|
||||||
|
insideRect: rect
|
||||||
|
toData: data
|
||||||
|
printInfo: aPrintInfo];
|
||||||
|
|
||||||
|
[new setPath: path];
|
||||||
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSPrintOperation *)printOperationWithView:(NSView *)aView
|
+ (NSPrintOperation *)printOperationWithView:(NSView *)aView
|
||||||
{
|
{
|
||||||
return nil;
|
return [self printOperationWithView: aView
|
||||||
|
printInfo: nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSPrintOperation *)printOperationWithView:(NSView *)aView
|
+ (NSPrintOperation *)printOperationWithView:(NSView *)aView
|
||||||
printInfo:(NSPrintInfo *)aPrintInfo
|
printInfo:(NSPrintInfo *)aPrintInfo
|
||||||
{
|
{
|
||||||
return nil;
|
return [[self alloc] initWithView: aView
|
||||||
|
printInfo: aPrintInfo];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)aView
|
||||||
|
insideRect:(NSRect)rect
|
||||||
|
toData:(NSMutableData *)data
|
||||||
|
{
|
||||||
|
return [self PDFOperationWithView: aView
|
||||||
|
insideRect: rect
|
||||||
|
toData: data
|
||||||
|
printInfo: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)aView
|
||||||
|
insideRect:(NSRect)rect
|
||||||
|
toData:(NSMutableData *)data
|
||||||
|
printInfo:(NSPrintInfo*)aPrintInfo
|
||||||
|
{
|
||||||
|
return [[self alloc] initPDFOperationWithView: aView
|
||||||
|
insideRect: rect
|
||||||
|
toData: data
|
||||||
|
printInfo: aPrintInfo];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)aView
|
||||||
|
insideRect:(NSRect)rect
|
||||||
|
toPath:(NSString *)path
|
||||||
|
printInfo:(NSPrintInfo*)aPrintInfo
|
||||||
|
{
|
||||||
|
NSMutableData *data = [NSMutableData data];
|
||||||
|
NSPrintOperation *new = [self PDFOperationWithView: aView
|
||||||
|
insideRect: rect
|
||||||
|
toData: data
|
||||||
|
printInfo: aPrintInfo];
|
||||||
|
|
||||||
|
[new setPath: path];
|
||||||
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -85,11 +166,20 @@ toPath:(NSString *)path
|
||||||
//
|
//
|
||||||
+ (NSPrintOperation *)currentOperation
|
+ (NSPrintOperation *)currentOperation
|
||||||
{
|
{
|
||||||
return nil;
|
NSMutableDictionary *dict = [[NSThread currentThread] threadDictionary];
|
||||||
|
|
||||||
|
return (NSPrintOperation*)[dict objectForKey: NSPrintOperationThreadKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)setCurrentOperation:(NSPrintOperation *)operation
|
+ (void)setCurrentOperation:(NSPrintOperation *)operation
|
||||||
{}
|
{
|
||||||
|
NSMutableDictionary *dict = [[NSThread currentThread] threadDictionary];
|
||||||
|
|
||||||
|
if (operation == nil)
|
||||||
|
[dict removeObjectForKey: NSPrintOperationThreadKey];
|
||||||
|
else
|
||||||
|
[dict setObject: operation forKey: NSPrintOperationThreadKey];
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Instance methods
|
// Instance methods
|
||||||
|
@ -97,18 +187,43 @@ toPath:(NSString *)path
|
||||||
//
|
//
|
||||||
// Creating and Initializing an NSPrintOperation Object
|
// Creating and Initializing an NSPrintOperation Object
|
||||||
//
|
//
|
||||||
|
|
||||||
- (id)initEPSOperationWithView:(NSView *)aView
|
- (id)initEPSOperationWithView:(NSView *)aView
|
||||||
insideRect:(NSRect)rect
|
insideRect:(NSRect)rect
|
||||||
toData:(NSMutableData *)data
|
toData:(NSMutableData *)data
|
||||||
printInfo:(NSPrintInfo *)aPrintInfo
|
printInfo:(NSPrintInfo *)aPrintInfo
|
||||||
{
|
{
|
||||||
return nil;
|
self = [self initWithView: aView
|
||||||
|
insideRect: rect
|
||||||
|
toData: data
|
||||||
|
printInfo: aPrintInfo];
|
||||||
|
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithView:(NSView *)aView
|
- (id)initWithView:(NSView *)aView
|
||||||
printInfo:(NSPrintInfo *)aPrintInfo
|
printInfo:(NSPrintInfo *)aPrintInfo
|
||||||
{
|
{
|
||||||
return nil;
|
NSMutableData *data = [NSMutableData data];
|
||||||
|
|
||||||
|
self = [self initWithView: aView
|
||||||
|
insideRect: [aView bounds]
|
||||||
|
toData: data
|
||||||
|
printInfo: aPrintInfo];
|
||||||
|
_showPanels = YES;
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc
|
||||||
|
{
|
||||||
|
RELEASE(_printInfo);
|
||||||
|
RELEASE(_view);
|
||||||
|
RELEASE(_data);
|
||||||
|
TEST_RELEASE(_path);
|
||||||
|
TEST_RELEASE(_context);
|
||||||
|
TEST_RELEASE(_printPanel);
|
||||||
|
TEST_RELEASE(_accessoryView);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -119,71 +234,131 @@ toData:(NSMutableData *)data
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)isCopyingOperation
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Controlling the User Interface
|
// Controlling the User Interface
|
||||||
//
|
//
|
||||||
- (NSPrintPanel *)printPanel
|
- (NSPrintPanel *)printPanel
|
||||||
{
|
{
|
||||||
return nil;
|
if (_printPanel == nil)
|
||||||
|
ASSIGN(_printPanel, [NSPrintPanel printPanel]);
|
||||||
|
|
||||||
|
return _printPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)showPanels
|
- (BOOL)showPanels
|
||||||
{
|
{
|
||||||
return NO;
|
return _showPanels;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setPrintPanel:(NSPrintPanel *)panel
|
- (void)setPrintPanel:(NSPrintPanel *)panel
|
||||||
{}
|
{
|
||||||
|
ASSIGN(_printPanel, panel);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setShowPanels:(BOOL)flag
|
- (void)setShowPanels:(BOOL)flag
|
||||||
{}
|
{
|
||||||
|
_showPanels = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSView *)accessoryView
|
||||||
|
{
|
||||||
|
return _accessoryView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setAccessoryView:(NSView *)aView
|
||||||
|
{
|
||||||
|
ASSIGN(_accessoryView, aView);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Managing the drawing Context
|
// Managing the drawing Context
|
||||||
//
|
//
|
||||||
- (NSGraphicsContext*)createContext
|
- (NSGraphicsContext*)createContext
|
||||||
{
|
{
|
||||||
return nil;
|
// FIXME
|
||||||
|
return _context;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSGraphicsContext *)context
|
- (NSGraphicsContext *)context
|
||||||
{
|
{
|
||||||
return nil;
|
return _context;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)destroyContext
|
- (void)destroyContext
|
||||||
{}
|
{
|
||||||
|
DESTROY(_context);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Page Information
|
// Page Information
|
||||||
//
|
//
|
||||||
- (int)currentPage
|
- (int)currentPage
|
||||||
{
|
{
|
||||||
|
// FIXME
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSPrintingPageOrder)pageOrder
|
- (NSPrintingPageOrder)pageOrder
|
||||||
{
|
{
|
||||||
return 0;
|
return _pageOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setPageOrder:(NSPrintingPageOrder)order
|
- (void)setPageOrder:(NSPrintingPageOrder)order
|
||||||
{}
|
{
|
||||||
|
_pageOrder = order;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Running a Print Operation
|
// Running a Print Operation
|
||||||
//
|
//
|
||||||
- (void)cleanUpOperation
|
- (void)cleanUpOperation
|
||||||
{}
|
{
|
||||||
|
[NSPrintOperation setCurrentOperation: nil];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)deliverResult
|
- (BOOL)deliverResult
|
||||||
{
|
{
|
||||||
|
// FIXME
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)runOperation
|
- (BOOL)runOperation
|
||||||
{
|
{
|
||||||
|
BOOL result;
|
||||||
|
NSGraphicsContext *oldContext;
|
||||||
|
|
||||||
|
if (_showPanels)
|
||||||
|
{
|
||||||
|
NSPrintPanel *panel = [self printPanel];
|
||||||
|
int button;
|
||||||
|
|
||||||
|
[panel setAccessoryView: _accessoryView];
|
||||||
|
[panel updateFromPrintInfo];
|
||||||
|
button = [panel runModal];
|
||||||
|
[panel setAccessoryView: nil];
|
||||||
|
|
||||||
|
if (button != NSOKButton)
|
||||||
|
{
|
||||||
|
[self cleanUpOperation];
|
||||||
return NO;
|
return NO;
|
||||||
|
}
|
||||||
|
[panel finalWritePrintInfo];
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the actual printing
|
||||||
|
oldContext = [NSGraphicsContext currentContext];
|
||||||
|
[NSGraphicsContext setCurrentContext: [self createContext]];
|
||||||
|
[_view displayRect: _rect];
|
||||||
|
[NSGraphicsContext setCurrentContext: oldContext];
|
||||||
|
|
||||||
|
result = [self deliverResult];
|
||||||
|
[self cleanUpOperation];
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -191,18 +366,66 @@ toData:(NSMutableData *)data
|
||||||
//
|
//
|
||||||
- (NSPrintInfo *)printInfo
|
- (NSPrintInfo *)printInfo
|
||||||
{
|
{
|
||||||
return nil;
|
return _printInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setPrintInfo:(NSPrintInfo *)aPrintInfo
|
- (void)setPrintInfo:(NSPrintInfo *)aPrintInfo
|
||||||
{}
|
{
|
||||||
|
if (aPrintInfo == nil)
|
||||||
|
aPrintInfo = [NSPrintInfo sharedPrintInfo];
|
||||||
|
|
||||||
|
ASSIGNCOPY(_printInfo, aPrintInfo);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Getting the NSView Object
|
// Getting the NSView Object
|
||||||
//
|
//
|
||||||
- (NSView *)view
|
- (NSView *)view
|
||||||
{
|
{
|
||||||
return nil;
|
return _view;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation NSPrintOperation (Private)
|
||||||
|
|
||||||
|
- (void) setPath: (NSString *) path
|
||||||
|
{
|
||||||
|
ASSIGN(_path, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithView:(NSView *)aView
|
||||||
|
insideRect:(NSRect)rect
|
||||||
|
toData:(NSMutableData *)data
|
||||||
|
printInfo:(NSPrintInfo *)aPrintInfo
|
||||||
|
{
|
||||||
|
if ([NSPrintOperation currentOperation] != nil)
|
||||||
|
[NSException raise: NSPrintOperationExistsException
|
||||||
|
format: @"There is already a printoperation for this thread"];
|
||||||
|
|
||||||
|
ASSIGN(_view, aView);
|
||||||
|
_rect = rect;
|
||||||
|
ASSIGN(_data, data);
|
||||||
|
_pageOrder = NSUnknownPageOrder;
|
||||||
|
_showPanels = NO;
|
||||||
|
[self setPrintInfo: aPrintInfo];
|
||||||
|
|
||||||
|
[NSPrintOperation setCurrentOperation: self];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initPDFOperationWithView:(NSView *)aView
|
||||||
|
insideRect:(NSRect)rect
|
||||||
|
toData:(NSMutableData *)data
|
||||||
|
printInfo:(NSPrintInfo*)aPrintInfo
|
||||||
|
{
|
||||||
|
self = [self initWithView: aView
|
||||||
|
insideRect: rect
|
||||||
|
toData: data
|
||||||
|
printInfo: aPrintInfo];
|
||||||
|
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in a new issue