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:
Fred Kiefer 2000-11-13 15:19:00 +00:00
parent 9b0d585c6c
commit 1b7e190b3e

View file

@ -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