mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-30 10:50:37 +00:00
Backend printing bundle system changes
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@19705 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
ca71d7e075
commit
989ae0cdd8
36 changed files with 3424 additions and 1256 deletions
234
Source/GSPrinting.m
Normal file
234
Source/GSPrinting.m
Normal file
|
@ -0,0 +1,234 @@
|
|||
/** <title>GSPrinting.m</title>
|
||||
|
||||
<abstract>GSPrinting loads the proper bundle for the printing backend.</abstract>
|
||||
|
||||
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
|
||||
Author: Chad Elliott Hardin <cehardin@mac.com>
|
||||
Date: June 2004
|
||||
|
||||
This file is part of the GNUstep GUI Library.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; see the file COPYING.LIB.
|
||||
If not, write to the Free Software Foundation,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "GNUstepGUI/GSPrinting.h"
|
||||
#include <Foundation/NSBundle.h>
|
||||
#include <Foundation/NSEnumerator.h>
|
||||
#include <Foundation/NSDebug.h>
|
||||
#include <Foundation/NSPathUtilities.h>
|
||||
#include <Foundation/NSArray.h>
|
||||
#include <Foundation/NSFileManager.h>
|
||||
#include <Foundation/NSUserDefaults.h>
|
||||
#include "AppKit/NSPanel.h"
|
||||
|
||||
static NSBundle *printingBundle = nil;
|
||||
|
||||
|
||||
/**
|
||||
<unit>
|
||||
<heading>Class Description</heading>
|
||||
<p>
|
||||
GSPrinting is used by all of the NSPrint and the NSPageLayout
|
||||
class(es) so that a printing backend bundle can be loaded. It
|
||||
first utilizes NSUserDefaults to find the user's preferred printing
|
||||
backend bundle. It looks for the key GSPrinting. If the user's
|
||||
preferred bundle cannot be loaded, it tries to load any working
|
||||
printing bundle.
|
||||
</p>
|
||||
</unit>
|
||||
*/
|
||||
@implementation GSPrinting
|
||||
|
||||
+(NSBundle*) loadPrintingBundle: (NSString*) bundleName
|
||||
{
|
||||
NSString *path;
|
||||
NSEnumerator *libraryPathsEnumerator;
|
||||
|
||||
bundleName = [bundleName stringByAppendingString: @".bundle"];
|
||||
|
||||
NSDebugLLog(@"GSPrinting", @"Looking for %@", bundleName);
|
||||
|
||||
libraryPathsEnumerator = [NSStandardLibraryPaths() objectEnumerator];
|
||||
|
||||
while( (path = [libraryPathsEnumerator nextObject]) )
|
||||
{
|
||||
path = [path stringByAppendingPathComponent: @"Bundles"];
|
||||
path = [path stringByAppendingPathComponent: @"GSPrinting"];
|
||||
path = [path stringByAppendingPathComponent: bundleName];
|
||||
|
||||
if ([[NSFileManager defaultManager] fileExistsAtPath: path])
|
||||
{
|
||||
NSBundle *bundle;
|
||||
|
||||
bundle = [NSBundle bundleWithPath: path];
|
||||
if( [bundle load] == NO )
|
||||
{
|
||||
NSDebugLLog(@"GSPrinting", @"Error loading printing bundle at %@", path);
|
||||
return nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
//one last check to make sure the principle class can be loaded
|
||||
if( [bundle principalClass] == Nil)
|
||||
{
|
||||
NSDebugLLog(@"GSPrinting", @"Error loading principal class from printing bundle at %@", path);
|
||||
return nil;
|
||||
}
|
||||
//if we get here, finally, then everything should be ok, barring errors from later in loading resources.
|
||||
NSDebugLLog(@"GSPrinting", @"Loaded printing bundle at %@", path);
|
||||
return bundle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NSDebugLLog(@"GSPrinting", @"Unable to find printing bundle %@", bundleName);
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+(NSBundle*) loadAnyWorkingPrintingBundle
|
||||
{
|
||||
NSBundle *bundle;
|
||||
|
||||
if( (bundle = [GSPrinting loadPrintingBundle: @"GSCUPS"]) )
|
||||
return bundle;
|
||||
|
||||
if( (bundle = [GSPrinting loadPrintingBundle: @"GSLPR"]) )
|
||||
return bundle;
|
||||
|
||||
if( (bundle = [GSPrinting loadPrintingBundle: @"GSWin32"]) )
|
||||
return bundle;
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+ (NSBundle*) printingBundle
|
||||
{
|
||||
NSString *defaultBundleName;
|
||||
NSBundle *bundle;
|
||||
|
||||
if( printingBundle )
|
||||
{
|
||||
return printingBundle;
|
||||
}
|
||||
|
||||
NSDebugLLog(@"GSPrinting", @"Bundle has not been loaded. Loading in progress...");
|
||||
|
||||
defaultBundleName = [[NSUserDefaults standardUserDefaults] stringForKey: @"GSPrinting"];
|
||||
|
||||
/*Which Printing Bundle?*/
|
||||
if( defaultBundleName == nil )
|
||||
{
|
||||
NSDebugLLog(@"GSPrinting", @"User did not set a printing bundle, trying till something works");
|
||||
bundle = [GSPrinting loadAnyWorkingPrintingBundle];
|
||||
if( bundle == nil )
|
||||
{
|
||||
NSDebugLLog(@"GSPrinting", @"Could not load any working printing bundle");
|
||||
NSRunAlertPanel(@"GNUstep Printing Backend System", @"Could not open any working printing bundle. Printing will not work.", @"Ok", NULL, NULL );
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NSDebugLLog(@"GSPrinting", @"User set %@ as the printing bundle", defaultBundleName);
|
||||
|
||||
bundle = [GSPrinting loadPrintingBundle: defaultBundleName];
|
||||
if( bundle == nil )
|
||||
{
|
||||
NSDebugLLog(@"GSPrinting", @"User set %@ as the printing bundle but that did not work. Will try to find anything that will work", defaultBundleName);
|
||||
bundle = [GSPrinting loadAnyWorkingPrintingBundle];
|
||||
if( bundle == nil )
|
||||
{
|
||||
NSDebugLLog(@"GSPrinting", @"Could not load any working printing bundle");
|
||||
NSRunAlertPanel(@"GNUstep Printing Backend System", @"Could not open any working printing bundle. Printing will not work.", @"Ok", NULL, NULL );
|
||||
return nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
NSString *msg;
|
||||
msg = [NSString stringWithFormat: @"Your chosen printing bundle, %@, could not be loaded. %@ was loaded instead", defaultBundleName, [[bundle bundlePath] lastPathComponent]];
|
||||
NSRunAlertPanel(@"GNUstep Printing Backend System", msg, @"Ok", NULL, NULL );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printingBundle = bundle;
|
||||
[printingBundle retain];
|
||||
return printingBundle;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
<unit>
|
||||
<heading>Class Description</heading>
|
||||
<p>
|
||||
GSPrintingPrincipleClass is the base class that all
|
||||
Printing backend bundles should use as their principle
|
||||
class. Subclasses are responsible for the allocating
|
||||
of that bundle's particular NSPrint, NSPageLayout, and
|
||||
GSPrintOperation sublclassed objects.
|
||||
</p>
|
||||
</unit>
|
||||
*/
|
||||
@implementation GSPrintingPrincipalClass : NSObject
|
||||
{
|
||||
}
|
||||
|
||||
+(Class) pageLayoutClass
|
||||
{
|
||||
return Nil;
|
||||
}
|
||||
|
||||
+(Class) printInfoClass
|
||||
{
|
||||
return Nil;
|
||||
}
|
||||
|
||||
|
||||
+(Class) printOperationClass
|
||||
{
|
||||
return Nil;
|
||||
}
|
||||
|
||||
+(Class) printPanelClass
|
||||
{
|
||||
return Nil;
|
||||
}
|
||||
|
||||
|
||||
+(Class) printerClass
|
||||
{
|
||||
return Nil;
|
||||
}
|
||||
|
||||
+(Class) gsPrintOperationClass
|
||||
{
|
||||
return Nil;
|
||||
}
|
||||
|
||||
|
||||
@end
|
Loading…
Add table
Add a link
Reference in a new issue