Global Index (short | long) | Local contents | Local Index (short | long)
pj = validate( pj )
VALIDATE Method to check state of PrintJob object. Values of PrintJob object class variables are checked for consistency. Errors out if it finds bad combinations. Fills in missing data with defaults. Ex: pj = VALIDATE( pj ); See also PRINT, PRINTOPT, INPUTCHECK.
This function calls | This function is called by |
---|---|
function pj = validate( pj ) % Copyright 1984-2000 The MathWorks, Inc. % $Revision: 1.4 $ $Date: 2000/06/01 02:54:08 $ pj.Validated = 1; %If no window requested, and none to act as default, error out. if isempty( pj.Handles ) %Get current Figure; but don't create one, like gcf would, if none yet. h = findobj(get(0,'children'),'flat','type','figure'); if isempty( h ) error( 'No Figure to print.' ) else pj.Handles = { h(1) }; end else if ~iscell( pj.Handles ) error( 'Handles must be in a cell array.' ) end if length(pj.Handles) > 1 if feature('NewPrintAPI') if strcmp(pj.DriverClass,'EP') error( 'EPS supports single page output only.' ) end if pj.PostScriptPreview error( 'Can not have preview of a multi-page output.' ) end else error( 'Can only print one page at a time.' ) end end end if pj.PostScriptPreview & ~strcmp(pj.DriverClass,'EP') error( 'TIFF previews allowed only with EPS output.' ) end %If no device given, use default from PRINTOPT if isempty( pj.Driver ) %Use method to validate default and set related class variables wasError = 0; dberror = disabledberror; try pj = inputcheck( pj, pj.DefaultDevice ); pj.DriverColorSet = 0; catch wasError = 1; end enabledberror(dberror); if wasError | isempty( pj.Driver ) error(['PRINTOPT specifies an unknown device type '''... pj.DefaultDevice '''.']) end end if strcmp(pj.DriverClass, 'MW' ) if ~strcmp( computer, 'PCWIN' ) error( ['Can only use Windows driver ''' pj.Driver ''' on a Windows machine.']) end % If user specifies a filename while device is -dwin % or -dwinc, either because the user gave that device or, more % likely, it's the default, and since the filename is useless % with Windows driver anyway, we'll assume the user really wants % a PostScript file. This is because 'print foo' is easier % to type then 'print -dps foo' and probably more commonly % meant if a filename is given. Unless of course the user asked % for the Print Dialog with the -v flag, then s/he really meant it. if (~isempty(pj.FileName) & ~pj.Verbose ) ... & ( strcmp(pj.Driver, 'win') | strcmp(pj.Driver, 'winc') ) if pj.DriverColor pj.Driver = 'psc'; else pj.Driver = 'ps'; end pj.DriverExt = 'ps'; pj.DriverClass = 'PS'; end end if pj.XTerminalMode %Can't produce TIFF or JPEG files in terminal mode because we can't do ZBuffer. if strcmp(pj.DriverClass, 'IM' ) error( ['Cannot produce ' upper(pj.Driver) ' files in terminal emulation mode.'] ) end end if strcmp( pj.Driver, 'mfile' ) & any( isslhandle( [pj.Handles{:} ] ) ) error( 'The -dmfile device option cannot be used with Simulink systems.' ) end if strcmp( pj.Driver, 'mfile' ) & isempty( pj.FileName ) error( 'Filename required for saving Figure to M-file.' ) end if strcmp( pj.Driver, 'mfile' ) locMakeSafeForDmfile( pj.Handles ) end %GhostScript produced image formats needs -loose PS files if ( strcmp(pj.DriverClass, 'GS') & pj.DriverExport ) pj.PostScriptTightBBox = 0; end %TIFF previews imply -loose, historicly because ZBuffer TIFF was always "loose". if pj.PostScriptPreview == pj.TiffPreview pj.PostScriptTightBBox = 0; %We have to produce a 72dpi EPS file first, have GS convert it to %TIFF, and then we combine a second high res EPS and the TIFF together. %Already checked above that for TIFF preview we have only one page. pj.GhostDriver = 'tiffpack'; pj.GhostName = [tempname '.tif']; pj.PostScriptPreview = pj.TiffPreview; end %Fill renderer and -noui from the printtemplate (if it exists) if %the user didn't specify these options on the command line h = pj.Handles{1}(1); if isfigure(h) pt = get( h, 'PrintTemplate' ); if ~isempty(pt) if ~pj.nouiOption pj.PrintUI = pt.PrintUI; end if ~pj.rendererOption & ~strcmp( pt.Renderer, 'auto' ) pj.Renderer = pt.Renderer; end end end % end validate function locMakeSafeForDmfile( handles ) % if the figure has app data it was likely put there by scribe % warn the user and turn off scribe before printing figh = handles{1}(1); usingAppData = ~ isempty( fieldnames(getappdata(figh)) ); if ( usingAppData ) % turn off plotedit if plotedit(figh,'isactive') plotedit(figh, 'off'); end % turn off interactive modes (e.g. zoom, pixval) uiclearmode(figh, ''); % save warning state savedState = warning; warning('on'); warning( ['print -dmfile does not fully support annotated plots. Use' ... ' hgsave.']); warning(savedState); end % end locMakeSafeForDmfile