mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4366 lines
147 KiB
4366 lines
147 KiB
//=============================================================================
|
|
// (c) Copyright Wang Laboratories, Inc. 1995 All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
// Project: Norway - Admin OCX
|
|
//
|
|
// Component: Admin Control
|
|
//
|
|
// File Name: nrwyactl.cpp
|
|
//
|
|
// Class: CNrwayadCtrl
|
|
//
|
|
// Functions:
|
|
//-----------------------------------------------------------------------------
|
|
// Maintenance Log:
|
|
/*
|
|
$Header: S:\products\msprods\norway\adminocx\nrwyactl.cpv 1.82 11 Jun 1996 10:32:50 RWR08970 $
|
|
$Log: S:\products\msprods\norway\adminocx\nrwyactl.cpv $
|
|
|
|
Rev 1.82 11 Jun 1996 10:32:50 RWR08970
|
|
Replaced IMG_WIN95 conditionals for XIF processing with WITH_XIF conditionals
|
|
(I'm commented them out completely for the moment, until things get settled)
|
|
|
|
Rev 1.81 26 Mar 1996 08:26:50 RWR08970
|
|
Remove IN_PROG_GENERAL conditionals surrounding XIF processing (IMG_WIN95 only)
|
|
|
|
Rev 1.80 08 Mar 1996 14:08:18 RWR08970
|
|
Reset m_bPrtToFile to FALSE if option not selected in Print dialog
|
|
(code was only setting the flag on TRUE condition, never resetting it)
|
|
|
|
Rev 1.79 26 Feb 1996 17:21:16 RWR
|
|
Oops - make that "#if", not "#ifdef"
|
|
|
|
Rev 1.78 26 Feb 1996 17:12:14 RWR
|
|
Reject XIF as default format in SetSystemFileAttributes
|
|
|
|
Rev 1.77 26 Feb 1996 15:05:56 RWR
|
|
Add support for XIF format (in type mapping routines & file dialog)
|
|
|
|
Rev 1.76 23 Feb 1996 16:12:28 RWR
|
|
Correct WORD/int pointer casting problem
|
|
|
|
Rev 1.75 22 Feb 1996 16:23:26 RWR
|
|
Add support for LZW and Group 3 2D compression formats
|
|
|
|
Rev 1.74 15 Feb 1996 16:51:40 RWR
|
|
Relocate GlobalUnlock/GlobalFree of hOpenFileParm to correct mem access error
|
|
|
|
Rev 1.73 07 Feb 1996 10:04:36 RWR
|
|
Disable AWD file type translations if WITH_AWD not specified
|
|
|
|
Rev 1.72 10 Nov 1995 16:03:50 MFH
|
|
Changed dispatch table to use specific ids for methods (so that properties
|
|
can be expanded in the future)
|
|
|
|
Rev 1.71 03 Nov 1995 16:09:42 MFH
|
|
Moved code for GetVersion to where other methods are
|
|
located and added comment
|
|
|
|
Rev 1.70 03 Nov 1995 15:59:36 MFH
|
|
Added hidden method GetVersion
|
|
|
|
Rev 1.69 02 Nov 1995 11:55:52 MFH
|
|
Added code to load oiui400 and oiprt400 dlls at runtime
|
|
|
|
Rev 1.68 17 Oct 1995 12:46:36 MFH
|
|
Fixed modeless common dialog box problem. Found a way to
|
|
get the parent window. Also creates an in-between window to
|
|
process the help information from the OCX when the user
|
|
defines their own help for the Open/Save As dialogs
|
|
|
|
Rev 1.67 13 Oct 1995 09:54:54 MFH
|
|
Fixed bug in setting filter
|
|
Hopefully fixed Sue's bug by locking temp maps during file dialog
|
|
|
|
Rev 1.66 06 Oct 1995 13:04:50 MFH
|
|
Added checks for NULL pointers to methods
|
|
|
|
Rev 1.65 06 Oct 1995 12:33:04 MFH
|
|
Added checks for NULL pointers
|
|
|
|
Rev 1.64 04 Oct 1995 10:49:42 MFH
|
|
Fixed page number handling in DeletePages method
|
|
|
|
Rev 1.63 03 Oct 1995 15:20:10 MFH
|
|
Removed default property
|
|
|
|
Rev 1.62 03 Oct 1995 12:34:48 MFH
|
|
Removed old timing calls
|
|
Replace returns WICTL_E_PAGEINUSE for the DISPLAY_CACHEFILEINUSE error.
|
|
It also cleans up a bit better.
|
|
|
|
Rev 1.61 28 Sep 1995 14:35:06 MFH
|
|
Adds printer name to print options structure so print can do
|
|
better spooling. Takes out the PO_DONTPRTANNO flag which it
|
|
wasn't before.
|
|
|
|
Rev 1.60 20 Sep 1995 16:59:18 MFH
|
|
Fixed DefaultExt bug. Sets pointer in dialog struct to NULL if property is
|
|
empty
|
|
|
|
Rev 1.59 19 Sep 1995 10:47:30 MFH
|
|
In cleaning up, Insert was not resetting the page count. Fixed
|
|
|
|
Rev 1.58 15 Sep 1995 15:57:34 MFH
|
|
Error thrown when compression options specified for AWD or BMP file
|
|
in Append/Insert/Replace.
|
|
PD_COLLATE bug fixed
|
|
Append/Insert/Replace clean up when error occurs after n number of
|
|
pages have been processed.
|
|
Defaults to current file type in open and saveas if no index
|
|
specified by user and a existing file specified in admin
|
|
|
|
Rev 1.57 12 Sep 1995 17:07:04 MFH
|
|
Yet another try at jpeg
|
|
|
|
Rev 1.56 12 Sep 1995 12:05:36 MFH
|
|
Still didn't quite get the JPEG stuff right last time :-(
|
|
|
|
Rev 1.55 12 Sep 1995 10:59:06 MFH
|
|
Fixed JPEG options so that values to OPEN/image are right
|
|
|
|
Rev 1.54 09 Sep 1995 12:46:00 MFH
|
|
Uses new "file does not exist" error now used by runtime instead of
|
|
FIO_OPEN_READ_ERROR or whatever it was.
|
|
|
|
Rev 1.53 07 Sep 1995 15:19:48 MFH
|
|
Reverses the negate bit when retrieved from IMGFileGetInfo
|
|
|
|
Rev 1.52 07 Sep 1995 11:38:48 MFH
|
|
Oops. Last change didn't compile. Forgot nHelpId var.
|
|
|
|
Rev 1.51 07 Sep 1995 11:29:24 MFH
|
|
Checks length of path in SetImage and throws an error if > 259.
|
|
|
|
Rev 1.50 06 Sep 1995 17:38:50 MFH
|
|
Fixed bugs: Checking that SourcePage and Destination page are valid
|
|
in append,insert,replace
|
|
Allow AWD to be system default for BW files in SetSystemFileAttributes
|
|
FilterIndex is no longer updated if no filter specified. And
|
|
m_lNumFilters is updated when filter loaded from design time.
|
|
|
|
Rev 1.49 01 Sep 1995 13:11:30 MFH
|
|
ShowPrintDialog only sets the PrintRangeOption property to be Print All or
|
|
Print Range and not Print Current
|
|
|
|
Rev 1.48 01 Sep 1995 09:30:04 MFH
|
|
Added ability to replace multiple pages in AWD files
|
|
|
|
Rev 1.47 31 Aug 1995 23:36:34 MMB
|
|
added checks to Insert & Append for AWD stuff
|
|
|
|
Rev 1.46 29 Aug 1995 13:29:48 MFH
|
|
Fixed to set output flags correctly for ShowfileDialog and ShowPrintDialgo
|
|
VerifyCompression - Took out EXPAND_LTR as bad for PACKED_BITS
|
|
|
|
Rev 1.45 29 Aug 1995 09:32:52 MFH
|
|
Added additional help ids.
|
|
Moved HELP_SETINDEX so that uses context ID for new index
|
|
|
|
Rev 1.44 25 Aug 1995 08:08:48 MFH
|
|
Hopefully a temporary fix for FIO_OPEN_READ_ERROR being returned for
|
|
Word documents.
|
|
|
|
Rev 1.43 23 Aug 1995 14:05:54 MFH
|
|
Fixed error bug in CreateDirectory. It now does an access check on its
|
|
own instead of relying on IMGFileCreateDir.
|
|
Fixed print DC error: now sets flag to retrieve DC from dialog box.
|
|
|
|
Rev 1.42 22 Aug 1995 15:56:32 MFH
|
|
Okay, really fixed the JPEG 0 Options stuff.
|
|
Added timing calls that should only be enabled when run from
|
|
my environment here (since the _TIMING flag should not be
|
|
defined except by my VC++ makefile).
|
|
ShowFileDialog now initializes dialog to current image name
|
|
|
|
Rev 1.41 22 Aug 1995 13:32:30 MFH
|
|
Fixed bug where defaulting to NULL in DoPropExchange set the
|
|
length of an empty string to 1. It should remain at 0 now.
|
|
|
|
Rev 1.40 21 Aug 1995 16:56:42 MFH
|
|
Fixed bugs: verify compression in append, insert, replace
|
|
no longer use one compression for all input pages
|
|
source page overrides if input compression not compatible
|
|
Fixed setting printoutputformat to match ImgEdit Ocx
|
|
Set default for 0 options with jpeg
|
|
|
|
Rev 1.39 17 Aug 1995 16:50:46 MFH
|
|
Default of printoutputformat is now a LITERAL instead of a hard
|
|
coded value.
|
|
|
|
Rev 1.38 17 Aug 1995 16:48:54 MFH
|
|
Changed default for printoutputformat from 0 to 1
|
|
|
|
Rev 1.37 14 Aug 1995 15:11:18 MFH
|
|
Added error when attempt to delete displayed page
|
|
|
|
Rev 1.36 14 Aug 1995 09:33:10 MFH
|
|
Fixed bug for release version: Bitmap not being loaded because of
|
|
ASSERT
|
|
|
|
Rev 1.35 10 Aug 1995 15:03:00 MFH
|
|
Uses common defines for print format
|
|
|
|
Rev 1.34 07 Aug 1995 16:53:12 MFH
|
|
Fixed bug - Had resolution and compression reversed when converting JPEG
|
|
options to the OPEN/image code.
|
|
|
|
Rev 1.33 04 Aug 1995 15:25:36 MFH
|
|
Changed JPEG approximation to approximate each element of value
|
|
|
|
Rev 1.32 04 Aug 1995 10:37:00 MFH
|
|
Round JPEG options to closest Norway value rather than
|
|
exact comparisons
|
|
|
|
Rev 1.31 03 Aug 1995 09:19:22 MFH
|
|
Fixed SetSystemFileAttributes error checking logic.
|
|
|
|
Rev 1.30 02 Aug 1995 14:50:54 MFH
|
|
Fixed bug in append,replace,insert in comparing number of pages of
|
|
source to use to number of pages in source (needed to sub 1)
|
|
|
|
Rev 1.29 01 Aug 1995 15:57:44 MFH
|
|
Bug fix: Set m_lNumFilters to 0 now that the default filter is empty
|
|
|
|
Rev 1.28 01 Aug 1995 14:34:10 MFH
|
|
Added more error checking to CreateDirectory, Append, Insert, and
|
|
Replace.
|
|
|
|
Rev 1.27 31 Jul 1995 17:24:42 MFH
|
|
Bug fixes: PrintEndPage is set to number of pages in current image
|
|
when that image is set.
|
|
PrintEndPage and PrintStartPage throw errors if set to values not
|
|
within the current image.
|
|
Default for Filter is now empty.
|
|
|
|
Rev 1.26 28 Jul 1995 17:50:58 MFH
|
|
More error checking in SetSystemFileAttributes
|
|
GetUniqueName throws an error on strings that are too long
|
|
|
|
Rev 1.25 27 Jul 1995 16:26:16 MFH
|
|
Additional error checking in SetSystemFileAttributes making
|
|
sure the compressiontype and compression info are compatible.
|
|
New private function: VerifyCompression
|
|
More comments
|
|
Cleaned up ShowFileDialog and ShowPrintDialog
|
|
|
|
Rev 1.24 26 Jul 1995 17:13:48 MFH
|
|
Bug fixes: Converting codes from Norway to OI and vice versa,
|
|
Print dialog box options fixed
|
|
More errors thrown
|
|
|
|
Rev 1.23 25 Jul 1995 13:01:04 MFH
|
|
Sets printer device context for later print call
|
|
|
|
Rev 1.22 24 Jul 1995 10:10:00 MFH
|
|
Fixed selection of page range flags
|
|
|
|
Rev 1.21 20 Jul 1995 17:30:10 MFH
|
|
Fixed variables passed to XLate and added parameter checking to
|
|
DeletePages
|
|
|
|
Rev 1.20 19 Jul 1995 10:53:24 MFH
|
|
Bug fixes: Status is reset in ShowFileDialog, and the filter index is
|
|
not reset if user has not specified a filter
|
|
|
|
Rev 1.19 18 Jul 1995 16:46:28 MFH
|
|
Print is fixed!!!!
|
|
|
|
Rev 1.18 18 Jul 1995 12:51:40 MFH
|
|
Added optional parameter to ShowFileDialog and ShowPrintDialog
|
|
|
|
Rev 1.17 17 Jul 1995 10:15:24 MFH
|
|
Error handling
|
|
|
|
Rev 1.16 12 Jul 1995 14:37:06 MFH
|
|
AboutBox method, converted member variable props to use get/set
|
|
methods to set status code
|
|
|
|
Rev 1.15 11 Jul 1995 17:02:12 MFH
|
|
New method VerifyImage, CancelError and DialogTitle changed to have
|
|
get/set methods to set status code. Using variants class for
|
|
optional parameters.
|
|
|
|
Rev 1.14 06 Jul 1995 10:33:14 MFH
|
|
Only shows help button when there is a help file and the
|
|
flag is set by the user.
|
|
|
|
Rev 1.13 05 Jul 1995 11:24:26 MFH
|
|
Name changes, removed PageType arg from Append, insert, replace
|
|
|
|
Rev 1.12 22 Jun 1995 17:04:08 MFH
|
|
Changed Help processing to use Windows constants instead of List box values
|
|
Added some asserts
|
|
Fixed GetUniqueName Bug - s is now released
|
|
In ShowXXXDialog methods, check for valid window before setting active window
|
|
Set page count before type checking in GetFileAttributes
|
|
|
|
Rev 1.11 08 Jun 1995 16:57:00 MFH
|
|
JPEG compression information is now converted correctly
|
|
ShowPrintDialog calls OPEN/image API and commented out code for the
|
|
SDK was removed.
|
|
|
|
Rev 1.10 01 Jun 1995 14:42:44 MFH
|
|
Changed ShowFileDialog so setting the image to the SaveAs dialog does not
|
|
cause an error. Also, fills in the filter index if it has been changed
|
|
by the user.
|
|
|
|
Rev 1.9 24 May 1995 16:54:54 MFH
|
|
Only three property pages
|
|
Tries adding an instance handle for print dialog
|
|
|
|
Rev 1.8 23 May 1995 09:40:06 MFH
|
|
32 bit version. Using SDK print dialog functions.
|
|
|
|
Rev 1.7 21 Apr 1995 13:57:54 MFH
|
|
Include of oierror.h moved to header file
|
|
|
|
Rev 1.6 20 Apr 1995 16:56:52 MFH
|
|
Changed current page when DeletePages is done
|
|
|
|
Rev 1.5 20 Apr 1995 16:37:36 MFH
|
|
Enabled DeletePages, Append, Insert, and Replace
|
|
|
|
Rev 1.4 19 Apr 1995 17:47:28 MFH
|
|
New defaults, new literals, Insert, Append, Replace implemented but
|
|
disabled for 3.7.2, Same for DeletePages, Processing help in dialogs
|
|
|
|
Rev 1.3 13 Apr 1995 13:50:06 MFH
|
|
Finished GetSys... functions, SetSystemFileAttributes, Added private
|
|
constant conversion functions
|
|
|
|
Rev 1.2 12 Apr 1995 14:13:14 MFH
|
|
Added error header file, constants header file, 3 new property pages,
|
|
Lots of new properties, adjustments to methods, new methods
|
|
GetFileAttributes is now a private function, updated according to spec
|
|
|
|
Rev 1.1 27 Mar 1995 18:19:42 MFH
|
|
Added log header, change to setprivatestatuscode
|
|
*/
|
|
//=============================================================================
|
|
|
|
// ----------------------------> Includes <-------------------------------
|
|
#include "stdafx.h"
|
|
#include "nrwyad.h"
|
|
#include "nrwyactl.h"
|
|
#include "nrwyappg.h"
|
|
#include "ppgtwo.h"
|
|
#include "ppgthree.h"
|
|
#include "constant.h"
|
|
#include "norvarnt.h"
|
|
#include "norermap.h"
|
|
#include "common.h"
|
|
#include "admin.h"
|
|
#include "disphids.h"
|
|
|
|
extern "C"
|
|
{
|
|
#include <sys\types.h>
|
|
#include <sys\stat.h>
|
|
#include <cderr.h>
|
|
#include <io.h>
|
|
#include <oiprt.h>
|
|
}
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#define NRWYAD_CONTROL_WIDTH 34
|
|
#define NRWYAD_CONTROL_HEIGHT 34
|
|
|
|
int FAR PASCAL ReplaceCharWithNull(LPSTR psz, int ch);
|
|
|
|
IMPLEMENT_DYNCREATE(CNrwyadCtrl, COleControl)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Message map
|
|
|
|
BEGIN_MESSAGE_MAP(CNrwyadCtrl, COleControl)
|
|
//{{AFX_MSG_MAP(CNrwyadCtrl)
|
|
ON_WM_CREATE()
|
|
ON_WM_DESTROY()
|
|
//}}AFX_MSG_MAP
|
|
ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Dispatch map
|
|
|
|
BEGIN_DISPATCH_MAP(CNrwyadCtrl, COleControl)
|
|
//{{AFX_DISPATCH_MAP(CNrwyadCtrl)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "Filter", GetFilter, SetFilter, VT_BSTR)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "HelpFile", GetHelpFile, SetHelpFile, VT_BSTR)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "Flags", GetFlags, SetFlags, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "Image", GetImage, SetImage, VT_BSTR)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "StatusCode", GetStatusCode, SetNotSupported, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "DefaultExt", GetDefaultExt, SetDefaultExt, VT_BSTR)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "InitDir", GetInitDir, SetInitDir, VT_BSTR)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "CompressionInfo", GetCompressionInfo, SetNotSupported, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "FileType", GetFileType, SetNotSupported, VT_I2)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "FilterIndex", GetFilterIndex, SetFilterIndex, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "HelpCommand", GetHelpCommand, SetHelpCommand, VT_I2)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PageCount", GetPageCount, SetNotSupported, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PageNumber", GetPageNumber, SetPageNumber, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PageType", GetPageType, SetNotSupported, VT_I2)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PrintRangeOption", GetPrintRangeOption, SetPrintRangeOption, VT_I2)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PrintOutputFormat", GetPrintOutputFormat, SetPrintOutputFormat, VT_I2)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "ImageHeight", GetImageHeight, SetNotSupported, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "ImageWidth", GetImageWidth, SetNotSupported, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "ImageResolutionX", GetImageResolutionX, SetNotSupported, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "ImageResolutionY", GetImageResolutionY, SetNotSupported, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "CompressionType", GetCompressionType, SetNotSupported, VT_I2)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "DialogTitle", GetDialogTitle, SetDialogTitle, VT_BSTR)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "CancelError", GetCancelError, SetCancelError, VT_BOOL)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "HelpContextId", GetHelpContextId, SetHelpContextId, VT_I2)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "HelpKey", GetHelpKey, SetHelpKey, VT_BSTR)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PrintNumCopies", GetPrintNumCopies, SetPrintNumCopies, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PrintAnnotations", GetPrintAnnotations, SetPrintAnnotations, VT_BOOL)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PrintEndPage", GetPrintEndPage, SetPrintEndPage, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PrintStartPage", GetPrintStartPage, SetPrintStartPage, VT_I4)
|
|
DISP_PROPERTY_EX(CNrwyadCtrl, "PrintToFile", GetPrintToFile, SetPrintToFile, VT_BOOL)
|
|
//}}AFX_DISPATCH_MAP
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "GetUniqueName", dispidGetUniqueName, GetUniqueName, VT_BSTR, VTS_BSTR VTS_BSTR VTS_BSTR)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "CreateDirectory", dispidCreateDirectory, CreateDirectory, VT_EMPTY, VTS_BSTR)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "Delete", dispidDelete, Delete, VT_EMPTY, VTS_BSTR)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "ShowPrintDialog", dispidShowPrintDialog, ShowPrintDialog, VT_EMPTY, VTS_VARIANT)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "Append", dispidAppend, Append, VT_EMPTY, VTS_BSTR VTS_I4 VTS_I4 VTS_VARIANT VTS_VARIANT)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "GetSysCompressionType", dispidGetSysCompressionType, GetSysCompressionType, VT_I2, VTS_I2)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "GetSysCompressionInfo", dispidGetSysCompressionInfo, GetSysCompressionInfo, VT_I4, VTS_I2)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "GetSysFileType", dispidGetSysFileType, GetSysFileType, VT_I2, VTS_I2)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "DeletePages", dispidDeletePages, DeletePages, VT_EMPTY, VTS_I4 VTS_I4)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "Insert", dispidInsert, Insert, VT_EMPTY, VTS_BSTR VTS_I4 VTS_I4 VTS_I4 VTS_VARIANT VTS_VARIANT)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "Replace", dispidReplace, Replace, VT_EMPTY, VTS_BSTR VTS_I4 VTS_I4 VTS_I4 VTS_VARIANT VTS_VARIANT)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "SetSystemFileAttributes", dispidSetSystemFileAttributes, SetSystemFileAttributes, VT_EMPTY, VTS_I2 VTS_I2 VTS_I2 VTS_I4)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "ShowFileDialog", dispidShowFileDialog, ShowFileDialog, VT_EMPTY, VTS_I2 VTS_VARIANT)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "VerifyImage", dispidVerifyImage, VerifyImage, VT_BOOL, VTS_I2)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "GetVersion", dispidGetVersion, GetVersion, VT_BSTR, VTS_NONE)
|
|
DISP_FUNCTION_ID(CNrwyadCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
|
|
END_DISPATCH_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Event map
|
|
|
|
BEGIN_EVENT_MAP(CNrwyadCtrl, COleControl)
|
|
//{{AFX_EVENT_MAP(CNrwyadCtrl)
|
|
// NOTE - ClassWizard will add and remove event map entries
|
|
// DO NOT EDIT what you see in these blocks of generated code !
|
|
//}}AFX_EVENT_MAP
|
|
END_EVENT_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Property pages
|
|
|
|
// TODO: Add more property pages as needed. Remember to increase the count!
|
|
BEGIN_PROPPAGEIDS(CNrwyadCtrl, 3)
|
|
PROPPAGEID(CNrwyadPropPage::guid)
|
|
PROPPAGEID(CSecondPropPage::guid)
|
|
PROPPAGEID(CThirdPropPage::guid)
|
|
END_PROPPAGEIDS(CNrwyadCtrl)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Initialize class factory and guid
|
|
|
|
IMPLEMENT_OLECREATE_EX(CNrwyadCtrl, "WangImage.AdminCtrl.1",
|
|
0x9541a0, 0x3b81, 0x101c, 0x92, 0xf3, 0x4, 0x2, 0x24, 0x0, 0x9c, 0x2)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Type library ID and version
|
|
|
|
IMPLEMENT_OLETYPELIB(CNrwyadCtrl, _tlid, _wVerMajor, _wVerMinor)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Interface IDs
|
|
|
|
const IID BASED_CODE IID_DNrwyad =
|
|
{ 0x9541a1, 0x3b81, 0x101c, { 0x92, 0xf3, 0x4, 0x2, 0x24, 0x0, 0x9c, 0x2 } };
|
|
const IID BASED_CODE IID_DNrwyadEvents =
|
|
{ 0x9541a2, 0x3b81, 0x101c, { 0x92, 0xf3, 0x4, 0x2, 0x24, 0x0, 0x9c, 0x2 } };
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Control type information
|
|
|
|
static const DWORD BASED_CODE _dwNrwyadOleMisc =
|
|
OLEMISC_INVISIBLEATRUNTIME |
|
|
OLEMISC_SETCLIENTSITEFIRST |
|
|
OLEMISC_INSIDEOUT |
|
|
OLEMISC_CANTLINKINSIDE |
|
|
OLEMISC_RECOMPOSEONRESIZE;
|
|
|
|
IMPLEMENT_OLECTLTYPE(CNrwyadCtrl, IDS_NRWYAD, _dwNrwyadOleMisc)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNrwyadCtrl::CNrwyadCtrlFactory::UpdateRegistry -
|
|
// Adds or removes system registry entries for CNrwyadCtrl
|
|
|
|
BOOL CNrwyadCtrl::CNrwyadCtrlFactory::UpdateRegistry(BOOL bRegister)
|
|
{
|
|
if (bRegister)
|
|
return AfxOleRegisterControlClass(
|
|
AfxGetInstanceHandle(),
|
|
m_clsid,
|
|
m_lpszProgID,
|
|
IDS_NRWYAD,
|
|
IDB_NRWYAD,
|
|
FALSE, // Not insertable
|
|
_dwNrwyadOleMisc,
|
|
_tlid,
|
|
_wVerMajor,
|
|
_wVerMinor);
|
|
else
|
|
return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNrwyadCtrl::CNrwyadCtrl - Constructor
|
|
|
|
CNrwyadCtrl::CNrwyadCtrl()
|
|
{
|
|
TRACE0("Constructing Admin Control\n");
|
|
InitializeIIDs(&IID_DNrwyad, &IID_DNrwyadEvents);
|
|
|
|
// TODO: Initialize your control's instance data here.
|
|
// 9503.08 JAR - defaults
|
|
m_szFilter.Empty();
|
|
m_lNumFilters = 0L;
|
|
m_lFilterIndex = 0l;
|
|
m_szDialogTitle.Empty();
|
|
m_nHelpContextId = 0;
|
|
m_szHelpFile.Empty();
|
|
m_nHelpCmd = 0;
|
|
m_szHelpKey.Empty();
|
|
m_szDefaultExt.Empty();
|
|
m_lFlags = 0L;
|
|
m_szInitDir.Empty();
|
|
m_bCancelErr = TRUE;
|
|
m_lPrtNumCopies = 1L;
|
|
m_nPrtRangeOption = 0;
|
|
m_lPrtStartPage = 0L;
|
|
m_lPrtEndPage = 0L;
|
|
m_nPrtOutFormat = CTL_WCOMMON_PRINTFORMAT_FITTOPAGE;
|
|
m_bPrtAnnotations = TRUE;
|
|
m_bPrtToFile = FALSE;
|
|
|
|
m_szImage.Empty();
|
|
m_lCompInfo = 0L;
|
|
m_nCompType = 0;
|
|
m_nFileType = 0;
|
|
m_lPageCount = 0L;
|
|
m_lPageNum = 1L;
|
|
m_nPageType = 0;
|
|
m_lImageHeight = 0L;
|
|
m_lImageWidth = 0L;
|
|
m_lImageResX = 0L;
|
|
m_lImageResY = 0L;
|
|
|
|
m_lStatusCode = 0l;
|
|
m_szError.Empty();
|
|
m_bExist = FALSE;
|
|
|
|
//m_hCommDlgInst = NULL;
|
|
m_hinstOIUI = NULL;
|
|
m_hinstOIPRT = NULL;
|
|
m_pOiCommDlgProc = NULL;
|
|
m_pOiGetPrtOptProc = NULL;
|
|
m_pOiSetPrtOptProc = NULL;
|
|
|
|
// In case container ignores 'invisible at runtime attribute'
|
|
SetInitialSize(NRWYAD_CONTROL_WIDTH, NRWYAD_CONTROL_HEIGHT);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNrwyadCtrl::~CNrwyadCtrl - Destructor
|
|
|
|
CNrwyadCtrl::~CNrwyadCtrl()
|
|
{
|
|
TRACE0("Destructing Admin Control\n");
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// CNrwyadCtrl::OnDraw - Drawing function
|
|
|
|
void CNrwyadCtrl::OnDraw(
|
|
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
|
|
{
|
|
int bmpId;
|
|
CBitmap bitmap;
|
|
BITMAP bmp;
|
|
CPictureHolder picHolder;
|
|
|
|
// using predefined bitmap
|
|
bmpId = IDB_ADMIN;
|
|
|
|
if (bitmap.LoadBitmap(bmpId) == FALSE)
|
|
return;
|
|
|
|
if (bitmap.GetObject(sizeof(BITMAP), &bmp) == 0)
|
|
return;
|
|
|
|
// Create picture and render
|
|
picHolder.CreateFromBitmap((HBITMAP)bitmap.m_hObject, NULL, FALSE);
|
|
picHolder.Render(pdc, rcBounds, rcBounds);
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNrwyadCtrl::DoPropExchange - Persistence support
|
|
|
|
void CNrwyadCtrl::DoPropExchange(CPropExchange* pPX)
|
|
{
|
|
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
|
|
COleControl::DoPropExchange(pPX);
|
|
|
|
PX_String( pPX, "Filter", m_szFilter, _T(""));
|
|
PX_Long( pPX, "FilterIndex", m_lFilterIndex, 0l);
|
|
PX_String( pPX, "DialogTitle", m_szDialogTitle, _T(""));
|
|
PX_Short( pPX, "HelpContextId", m_nHelpContextId, 0);
|
|
PX_String( pPX, "HelpFile", m_szHelpFile, _T(""));
|
|
PX_Short( pPX, "HelpCommand", m_nHelpCmd, 0);
|
|
PX_String( pPX, "HelpKey", m_szHelpKey, _T(""));
|
|
PX_String( pPX, "DefaultExt", m_szDefaultExt, _T(""));
|
|
PX_Long( pPX, "Flags", m_lFlags, 0l);
|
|
PX_String( pPX, "InitDir", m_szInitDir, _T(""));
|
|
PX_Bool( pPX, "CancelError", m_bCancelErr, TRUE);
|
|
PX_Long( pPX, "PrintNumCopies", m_lPrtNumCopies, 1L);
|
|
PX_Short( pPX, "PrintRangeOption", m_nPrtRangeOption, 0);
|
|
PX_Long( pPX, "PrintStartPage", m_lPrtStartPage, 1L);
|
|
PX_Long( pPX, "PrintEndPage", m_lPrtEndPage, 1L);
|
|
PX_Short( pPX, "PrintOutputFormat", m_nPrtOutFormat, CTL_WCOMMON_PRINTFORMAT_FITTOPAGE);
|
|
PX_Bool( pPX, "PrintAnnotations", m_bPrtAnnotations, TRUE);
|
|
PX_Bool( pPX, "PrintToFile", m_bPrtToFile, FALSE);
|
|
|
|
PX_String( pPX, "Image", m_szImage, _T(""));
|
|
PX_Long( pPX, "CompressionInfo", m_lCompInfo, 0L);
|
|
PX_Short( pPX, "CompressionType", m_nCompType, 0);
|
|
PX_Short( pPX, "FileType", m_nFileType, 0);
|
|
PX_Long( pPX, "PageCount", m_lPageCount, 0L);
|
|
PX_Long( pPX, "PageNumber", m_lPageNum, 1L);
|
|
PX_Short( pPX, "PageType", m_nPageType, 0);
|
|
PX_Long( pPX, "ImageHeight", m_lImageHeight, 0L);
|
|
PX_Long( pPX, "ImageWidth", m_lImageWidth, 0L);
|
|
PX_Long( pPX, "ImageResolutionX", m_lImageResX, 0L);
|
|
PX_Long( pPX, "ImageResolutionY", m_lImageResY, 0L);
|
|
PX_Long( pPX, "StatusCode", m_lStatusCode, 0l);
|
|
|
|
if (!m_szFilter.IsEmpty()) // If filter isn't empty, set num filters
|
|
{
|
|
// Filter should be in the format of "type1|spec1|type2|spec2|..." since
|
|
// it can't be set to an invalid string (hopefully). So replace |'s with
|
|
// 0's, use number replaced / 2 for number of filters.
|
|
int nNumReplaceChars;
|
|
CString szFilter = m_szFilter;
|
|
int nLength = szFilter.GetLength();
|
|
nNumReplaceChars = ReplaceCharWithNull(szFilter.GetBuffer(nLength), (int)'|');
|
|
szFilter.ReleaseBuffer(nLength);
|
|
m_lNumFilters = nNumReplaceChars / 2;
|
|
} // end szFilter is not empty
|
|
else m_lNumFilters = 0;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNrwyadCtrl::OnResetState - Reset control to default state
|
|
|
|
void CNrwyadCtrl::OnResetState()
|
|
{
|
|
COleControl::OnResetState(); // Resets defaults found in DoPropExchange
|
|
|
|
// 9503.08 JAR - Defaults
|
|
m_szFilter.Empty();
|
|
m_lFilterIndex = 0l;
|
|
m_szDialogTitle.Empty();
|
|
m_nHelpContextId = 0;
|
|
m_szHelpFile.Empty();
|
|
m_nHelpCmd = 0;
|
|
m_szHelpKey.Empty();
|
|
m_szDefaultExt.Empty();
|
|
m_lFlags = 0L;
|
|
m_szInitDir.Empty();
|
|
m_bCancelErr = TRUE;
|
|
m_lPrtNumCopies = 1L;
|
|
m_nPrtRangeOption = 0;
|
|
m_lPrtStartPage = 0L;
|
|
m_lPrtEndPage = 0L;
|
|
m_nPrtOutFormat = CTL_WCOMMON_PRINTFORMAT_FITTOPAGE;
|
|
m_bPrtAnnotations = TRUE;
|
|
m_bPrtToFile = FALSE;
|
|
|
|
m_szImage.Empty();
|
|
m_lCompInfo = 0L;
|
|
m_nCompType = 0;
|
|
m_nFileType = 0;
|
|
m_lPageCount = 0L;
|
|
m_lPageNum = 1L;
|
|
m_nPageType = 0;
|
|
m_lImageHeight = 0L;
|
|
m_lImageWidth = 0L;
|
|
m_lImageResX = 0L;
|
|
m_lImageResY = 0L;
|
|
|
|
m_lStatusCode = 0l;
|
|
|
|
m_bExist = FALSE;
|
|
m_szError.Empty();
|
|
}
|
|
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
//
|
|
// CNrwyadCtrl Properties
|
|
//
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CancelError Property
|
|
//
|
|
// m_bCancelErr Boolean indicating if an error should be thrown if the
|
|
// user selects 'Cancel' in either the file or print
|
|
// dialog boxes
|
|
//
|
|
//***************************************************************************
|
|
BOOL CNrwyadCtrl::GetCancelError()
|
|
{
|
|
ResetStatus();
|
|
return m_bCancelErr;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetCancelError(BOOL bNewValue)
|
|
{
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_PROP_ADMIN_CANCELERROR;
|
|
|
|
if ((bNewValue != TRUE) && (bNewValue != FALSE))
|
|
{
|
|
m_szError.LoadString(IDS_BADBOOLEAN);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
m_bCancelErr = bNewValue;
|
|
SetModifiedFlag();
|
|
return;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Filter Property
|
|
//
|
|
// m_szFilter the filter for listing files in the "ShowFileDialog" Method
|
|
//
|
|
//***************************************************************************
|
|
BSTR CNrwyadCtrl::GetFilter()
|
|
{
|
|
ResetStatus();
|
|
CString s;
|
|
s = m_szFilter;
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
void CNrwyadCtrl::SetFilter(LPCTSTR lpszNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
UINT nHelpId = IDH_PROP_ADMIN_FILTER;
|
|
|
|
CString szNewFilter;
|
|
if (lpszNewValue == NULL)
|
|
szNewFilter.Empty();
|
|
else szNewFilter = lpszNewValue;
|
|
|
|
if ( m_szFilter == szNewFilter)
|
|
return;
|
|
|
|
CString szTempFilter = szNewFilter;
|
|
if (!szTempFilter.IsEmpty()) // If filter isn't empty, check format
|
|
{
|
|
// Filter must be in the format of "type1|spec1|type2|spec2|..." where
|
|
// typeN describes a file type and specN is a file spec like "*.tif".
|
|
// To be valid, there needs to be an even number of '|' chars and it
|
|
// needs to end with that character. The function below replaces the '|'
|
|
// char with a zero char and returns the number of '|'s encountered.
|
|
int nNumReplaceChars;
|
|
int nLength = szTempFilter.GetLength();
|
|
nNumReplaceChars = ReplaceCharWithNull(szTempFilter.GetBuffer(nLength), (int)'|');
|
|
szTempFilter.ReleaseBuffer(nLength);
|
|
if ((nNumReplaceChars == 0) || // No | chars
|
|
((nNumReplaceChars % 2) != 0) || // Uneven | chars
|
|
(szTempFilter[nLength - 1] != '\0')) // Does not end with | char
|
|
{
|
|
m_szError.LoadString(IDS_BADFILTER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
} // end if bad format
|
|
m_lNumFilters = nNumReplaceChars / 2;
|
|
} // end szFilter is not empty
|
|
else m_lNumFilters = 0;
|
|
|
|
m_szFilter = szNewFilter;
|
|
SetModifiedFlag();
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// FilterIndex Property
|
|
//
|
|
// m_lFilterIndex Which filter should be highlighted (was highlighted)
|
|
// when(after) ShowFileDialog is called.
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetFilterIndex()
|
|
{
|
|
ResetStatus();
|
|
return m_lFilterIndex;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetFilterIndex(long nNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
if (m_szFilter.IsEmpty())
|
|
m_lNumFilters = 0l;
|
|
|
|
// Retun error for negative filter indices and also when
|
|
// the user has specified a filter and then an index which
|
|
// is greater than the number of filters. Otherwise, assume filter
|
|
// index refers to default filter supplied by OiUiCommDlg.
|
|
if ((nNewValue < 0) ||
|
|
((m_lNumFilters != 0) && (nNewValue > m_lNumFilters)))
|
|
{
|
|
UINT nHelpId = IDH_PROP_ADMIN_FILTERINDEX;
|
|
m_szError.LoadString(IDS_BADFILTERINDEX);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
m_lFilterIndex = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// DialogTitle Property
|
|
//
|
|
// m_szDialogTitle the dialog title for the common dialog
|
|
//
|
|
//***************************************************************************
|
|
BSTR CNrwyadCtrl::GetDialogTitle()
|
|
{
|
|
ResetStatus();
|
|
CString s;
|
|
s = m_szDialogTitle;
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
void CNrwyadCtrl::SetDialogTitle(LPCTSTR lpszNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
CString szTitle;
|
|
if (lpszNewValue == NULL)
|
|
szTitle.Empty();
|
|
else szTitle = lpszNewValue;
|
|
|
|
if (m_szDialogTitle != szTitle)
|
|
{
|
|
m_szDialogTitle = szTitle;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Image Property
|
|
//
|
|
// m_szImage fully qualified(?) pathname of the current image
|
|
//
|
|
//***************************************************************************
|
|
BSTR CNrwyadCtrl::GetImage()
|
|
{
|
|
ResetStatus();
|
|
CString s;
|
|
s = m_szImage;
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
void CNrwyadCtrl::SetImage(LPCTSTR lpszNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
CString szNewValue;
|
|
if (lpszNewValue == NULL)
|
|
szNewValue.Empty();
|
|
else szNewValue = lpszNewValue;
|
|
|
|
if ((szNewValue.GetLength() + 1) > MAXPATHLENGTH)
|
|
{
|
|
UINT nHelpId = 0;
|
|
m_szError.LoadString(IDS_FILELENGTHERROR);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_BADFILENAME, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
m_szImage = szNewValue;
|
|
SetModifiedFlag();
|
|
// Reset attribute properties
|
|
m_nPageType = IMAGE_PAGETYPE_UNKNOWN;
|
|
m_nFileType = IMAGE_FILETYPE_UNKNOWN;
|
|
m_nCompType = IMAGE_COMPTYPE_UNKNOWN;
|
|
m_lCompInfo = 0L;
|
|
m_lPageCount = 0L;
|
|
m_lImageHeight = 0L;
|
|
m_lImageWidth = 0L;
|
|
m_lImageResX = 0L;
|
|
m_lImageResY = 0L;
|
|
m_lPrtEndPage = 0L;
|
|
m_lPrtStartPage = 0L;
|
|
m_bExist = FALSE;
|
|
|
|
if (m_szImage.IsEmpty())
|
|
return;
|
|
|
|
// Get new file attributes. Start with first page
|
|
m_lPageNum = 1L;
|
|
GetFileAttributes();
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// InitDir Property
|
|
//
|
|
// m_szInitDir initial path to be used by "ShowFileDialog" method
|
|
//
|
|
//***************************************************************************
|
|
BSTR CNrwyadCtrl::GetInitDir()
|
|
{
|
|
ResetStatus();
|
|
CString s;
|
|
s = m_szInitDir;
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
void CNrwyadCtrl::SetInitDir(LPCTSTR lpszNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
CString szNewValue;
|
|
if (lpszNewValue == NULL)
|
|
szNewValue.Empty();
|
|
else szNewValue = lpszNewValue;
|
|
|
|
if ( m_szInitDir != szNewValue)
|
|
{
|
|
m_szInitDir = szNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// HelpContextId Property
|
|
//
|
|
// m_nHelpContextId the help context id for the help, in conjunction with
|
|
// the help file!
|
|
//
|
|
//***************************************************************************
|
|
short CNrwyadCtrl::GetHelpContextId()
|
|
{
|
|
ResetStatus();
|
|
return m_nHelpContextId;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetHelpContextId(short nNewValue)
|
|
{
|
|
ResetStatus();
|
|
m_nHelpContextId = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// HelpFile Property
|
|
//
|
|
// m_szHelpFile the help file, in conjunction with the help context id
|
|
//
|
|
//***************************************************************************
|
|
BSTR CNrwyadCtrl::GetHelpFile()
|
|
{
|
|
ResetStatus();
|
|
CString s;
|
|
s = m_szHelpFile;
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
void CNrwyadCtrl::SetHelpFile(LPCTSTR lpszNewValue)
|
|
{
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_PROP_ADMIN_HELPFILE;
|
|
|
|
CString szNewValue;
|
|
if (lpszNewValue == NULL)
|
|
szNewValue.Empty();
|
|
else szNewValue = lpszNewValue;
|
|
|
|
// Check if valid filename if not empty (0 arg means check existence)
|
|
if ((szNewValue.GetLength() != 0) &&
|
|
(_access( szNewValue, 0) != 0))
|
|
{
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_FILENOTFOUND, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
if ( m_szHelpFile != szNewValue)
|
|
{
|
|
m_szHelpFile = szNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// DefaultExt Property
|
|
//
|
|
// m_szDefaultExt the default file extension for the "ShowFileDialog"
|
|
// Method
|
|
//
|
|
//***************************************************************************
|
|
BSTR CNrwyadCtrl::GetDefaultExt()
|
|
{
|
|
ResetStatus();
|
|
CString s;
|
|
s = m_szDefaultExt;
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
void CNrwyadCtrl::SetDefaultExt(LPCTSTR lpszNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
CString szNewValue;
|
|
if (lpszNewValue == NULL)
|
|
szNewValue.Empty();
|
|
else szNewValue = lpszNewValue;
|
|
|
|
if ( m_szDefaultExt != szNewValue)
|
|
{
|
|
m_szDefaultExt = szNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// StatusCode Property
|
|
//
|
|
// m_lStatusCode error code repository
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetStatusCode()
|
|
{
|
|
return m_lStatusCode;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Flags Property
|
|
//
|
|
// m_lFlags bitwise or'd options for the Get File Name common dlg box
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetFlags()
|
|
{
|
|
ResetStatus();
|
|
return m_lFlags;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetFlags(long nNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
if (m_lFlags != nNewValue)
|
|
{
|
|
m_lFlags = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CompressionInfo Property - Read-only
|
|
//
|
|
// m_lCompInfo bitwise information about the compression of the
|
|
// current page of the current image or else the system default
|
|
// if no image is specified.
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetCompressionInfo()
|
|
{
|
|
ResetStatus();
|
|
return m_lCompInfo;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CompressionType(Option) Property - Read-only
|
|
//
|
|
// m_nCompType If Option is 0 this returns the compression type of the
|
|
// current image. Otherwise, Option should specify a
|
|
// color format for which the system default compression
|
|
// type is to be returned. Option may be one of the
|
|
// following:
|
|
// 1 - BW
|
|
// 2 - Gray
|
|
// 3 - Color
|
|
//
|
|
//***************************************************************************
|
|
short CNrwyadCtrl::GetCompressionType()
|
|
{
|
|
ResetStatus();
|
|
return m_nCompType;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// FileType Property - Read-only
|
|
//
|
|
// m_nFileType Specifies the file type (tiff, bmp, ...) of the current
|
|
// image or else the system default if no image is specified.
|
|
//
|
|
//***************************************************************************
|
|
short CNrwyadCtrl::GetFileType()
|
|
{
|
|
ResetStatus();
|
|
return m_nFileType;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// HelpCommand Property
|
|
//
|
|
// m_nHelpCmd Specifies how help is to come up when the user clicks the
|
|
// Help button on a dialog box.
|
|
//
|
|
//***************************************************************************
|
|
short CNrwyadCtrl::GetHelpCommand()
|
|
{
|
|
ResetStatus();
|
|
return m_nHelpCmd;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetHelpCommand(short nNewValue)
|
|
{
|
|
ResetStatus();
|
|
if (nNewValue > HELP_PARTIALKEY) // Check if value greater than largest acceptable value
|
|
{
|
|
UINT nHelpId = IDH_PROP_ADMIN_HELPCOMMAND;
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
if (m_nHelpCmd != nNewValue)
|
|
{
|
|
m_nHelpCmd = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// HelpKey Property
|
|
//
|
|
// m_szHelpKey Specifies a keyword for a topic to be brought up when the
|
|
// user clicks help on a dialog box.
|
|
//
|
|
//***************************************************************************
|
|
|
|
BSTR CNrwyadCtrl::GetHelpKey()
|
|
{
|
|
ResetStatus();
|
|
CString s = m_szHelpKey;
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
void CNrwyadCtrl::SetHelpKey(LPCTSTR lpszNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
CString szNewValue;
|
|
if (lpszNewValue == NULL)
|
|
szNewValue.Empty();
|
|
else szNewValue = lpszNewValue;
|
|
|
|
if (m_szHelpKey != szNewValue)
|
|
{
|
|
m_szHelpKey = szNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PageCount Property - Read-only
|
|
//
|
|
// m_lPageCount Specifies how many pages are in the current image. If
|
|
// no image is specified, this is zero.
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetPageCount()
|
|
{
|
|
ResetStatus();
|
|
return m_lPageCount;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PageNumber Property
|
|
//
|
|
// m_lPageNum Specifies a page in the current image. Setting this
|
|
// property will cause all the page related properties to be
|
|
// updated to reflect this change. Setting this property
|
|
// to a non-existing page number will result in an error
|
|
// being thrown.
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetPageNumber()
|
|
{
|
|
ResetStatus();
|
|
return m_lPageNum;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetPageNumber(long nNewValue)
|
|
{
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_PROP_ADMIN_PAGENUM;
|
|
|
|
// Can't be greater than number of pages in image or less than 1
|
|
if ((nNewValue > m_lPageCount) || (nNewValue < 1))
|
|
{
|
|
m_szError.LoadString(IDS_INVALIDPAGENUM);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
m_lPageNum = nNewValue;
|
|
GetFileAttributes(); // Get attributes for new page
|
|
SetModifiedFlag();
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PageType Property - Read-only
|
|
//
|
|
// m_nPageType Specifies the color type (BW, GRAY4,...) of the current
|
|
// page of the current image or else the system default if
|
|
// no image is specified.
|
|
//
|
|
//***************************************************************************
|
|
|
|
short CNrwyadCtrl::GetPageType()
|
|
{
|
|
ResetStatus();
|
|
return m_nPageType;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// ImageHeight Property - Read-only
|
|
//
|
|
// m_lImageHeight Specifies the height in pixels of the current
|
|
// page of the current image.
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetImageHeight()
|
|
{
|
|
ResetStatus();
|
|
return m_lImageHeight;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// ImageWidth Property - Read-only
|
|
//
|
|
// m_lImageWidth Specifies the width in pixels of the current
|
|
// page of the current image.
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetImageWidth()
|
|
{
|
|
ResetStatus();
|
|
return m_lImageWidth;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// ImageResolutionX Property - Read-only
|
|
//
|
|
// m_lImageResX Specifies the dpi in the x direction for the current
|
|
// page of the current image.
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetImageResolutionX()
|
|
{
|
|
ResetStatus();
|
|
return m_lImageResX;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// ImageResolutionY Property - Read-only
|
|
//
|
|
// m_lImageResY Specifies the dpi in the y direction for the current
|
|
// page of the current image.
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetImageResolutionY()
|
|
{
|
|
ResetStatus();
|
|
return m_lImageResY;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PrintNumCopies Property
|
|
//
|
|
// m_lPrtNumCopies When the ShowPrintMethod is called, this number
|
|
// specifies the value to be shown in the print dialog box.
|
|
// After the ShowPrintMethod returns, this will contain
|
|
// the value set when the user hits 'OK'.
|
|
//
|
|
//***************************************************************************
|
|
|
|
long CNrwyadCtrl::GetPrintNumCopies()
|
|
{
|
|
ResetStatus();
|
|
return m_lPrtNumCopies;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetPrintNumCopies(long nNewValue)
|
|
{
|
|
ResetStatus();
|
|
if (m_lPrtNumCopies != nNewValue)
|
|
{
|
|
m_lPrtNumCopies = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PrintRangeOption Property
|
|
//
|
|
// m_nPrtRange When the ShowPrintMethod is called, this specifies
|
|
// what range option should be selected in the print
|
|
// dialog box. After the ShowPrintMethod returns, this
|
|
// will contain the value set when the user hits 'OK'.
|
|
// If the user selected a range of pages to be printed,
|
|
// The PrintStartPage and PrintEndPage properties will
|
|
// specify the range of pages to be printed.
|
|
//
|
|
//***************************************************************************
|
|
|
|
short CNrwyadCtrl::GetPrintRangeOption()
|
|
{
|
|
ResetStatus();
|
|
return m_nPrtRangeOption;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetPrintRangeOption(short nNewValue)
|
|
{
|
|
ResetStatus();
|
|
|
|
// Check input value
|
|
if ((nNewValue < IMAGE_RANGE_ALL) || (nNewValue > IMAGE_RANGE_CURRENT))
|
|
{
|
|
UINT nHelpId = IDH_PROP_ADMIN_PRINTRANGE;
|
|
m_szError.LoadString(IDS_BADRANGEOPTION);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
if (m_nPrtRangeOption != nNewValue)
|
|
{
|
|
m_nPrtRangeOption = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PrintStartPage Property
|
|
//
|
|
// m_lPrtStartPage When the ShowPrintMethod is called, if the range
|
|
// option is set to a range of pages, then this number
|
|
// will be shown as the start page of that range. When
|
|
// the ShowPrintMethod returns, this property will contain
|
|
// the start page of a range of pages to be printed if
|
|
// that was specified and the user hit OK.
|
|
//
|
|
//***************************************************************************
|
|
|
|
long CNrwyadCtrl::GetPrintStartPage()
|
|
{
|
|
ResetStatus();
|
|
return m_lPrtStartPage;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetPrintStartPage(long nNewValue)
|
|
{
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_PROP_ADMIN_PRINTSTARTPAGE;
|
|
|
|
if ((nNewValue < 1) || (nNewValue > m_lPageCount))
|
|
{
|
|
m_szError.LoadString(IDS_INVALIDSTARTPAGE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
if (m_lPrtStartPage != nNewValue)
|
|
{
|
|
m_lPrtStartPage = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PrintEndPage Property
|
|
//
|
|
// m_lPrtEndPage When the ShowPrintMethod is called, if the range
|
|
// option is set to a range of pages, then this number
|
|
// will be shown as the end page of that range. When
|
|
// the ShowPrintMethod returns, this property will contain
|
|
// the end page of a range of pages to be printed if
|
|
// that was specified and the user hit OK.
|
|
//
|
|
//***************************************************************************
|
|
|
|
long CNrwyadCtrl::GetPrintEndPage()
|
|
{
|
|
ResetStatus();
|
|
return m_lPrtEndPage;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetPrintEndPage(long nNewValue)
|
|
{
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_PROP_ADMIN_PRINTENDPAGE;
|
|
|
|
if ((nNewValue < 1) || (nNewValue > m_lPageCount))
|
|
{
|
|
m_szError.LoadString(IDS_INVALIDENDPAGE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
if (m_lPrtEndPage != nNewValue)
|
|
{
|
|
m_lPrtEndPage = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PrintOutputFormat Property
|
|
//
|
|
// m_nPrtOutFormat When the ShowPrintMethod is called, the output format
|
|
// displayed when the user clicks the 'Options...' button
|
|
// will default to the value specified here. When
|
|
// the ShowPrintMethod returns, this property will contain
|
|
// the output format specified if the user hits 'OK'.
|
|
//
|
|
//***************************************************************************
|
|
short CNrwyadCtrl::GetPrintOutputFormat()
|
|
{
|
|
ResetStatus();
|
|
return m_nPrtOutFormat;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetPrintOutputFormat(short nNewValue)
|
|
{
|
|
ResetStatus();
|
|
// Check if invalid value
|
|
if ((nNewValue < CTL_WCOMMON_PRINTFORMAT_PIXEL) ||
|
|
(nNewValue > CTL_WCOMMON_PRINTFORMAT_FITTOPAGE))
|
|
{
|
|
UINT nHelpId = IDH_PROP_ADMIN_PRINTFORMAT;
|
|
m_szError.LoadString(IDS_BADPRINTFORMAT);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
if (m_nPrtOutFormat != nNewValue)
|
|
{
|
|
m_nPrtOutFormat = nNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
SetModifiedFlag();
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PrintAnnotations Property
|
|
//
|
|
// m_bPrtAnnotations When the ShowPrintMethod is called, the Annotations
|
|
// check box displayed when the user clicks the
|
|
// 'Options...' button will default to the value specified
|
|
// here (i.e. checked if this property is TRUE). When
|
|
// the ShowPrintMethod returns, this property will be
|
|
// TRUE if the annotations check box is checked when the
|
|
// User clicks 'OK' and FALSE otherwise.
|
|
//
|
|
//***************************************************************************
|
|
|
|
BOOL CNrwyadCtrl::GetPrintAnnotations()
|
|
{
|
|
ResetStatus();
|
|
return m_bPrtAnnotations;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetPrintAnnotations(BOOL bNewValue)
|
|
{
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_PROP_ADMIN_PRINTANNOTATIONS;
|
|
|
|
// Make sure input value is a boolean
|
|
if ((bNewValue != TRUE) && (bNewValue != FALSE))
|
|
{
|
|
m_szError.LoadString(IDS_BADBOOLEAN);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
if (m_bPrtAnnotations != bNewValue)
|
|
{
|
|
m_bPrtAnnotations = bNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// PrintToFile Property
|
|
//
|
|
// m_bPrtToFile When the ShowPrintMethod is called, the 'Print to File'
|
|
// check box will default to the value specified
|
|
// here (i.e. checked if this property is TRUE). When
|
|
// the ShowPrintMethod returns, this property will be
|
|
// TRUE if the 'Print to File' check box is checked when
|
|
// the User clicks 'OK' and FALSE otherwise.
|
|
//
|
|
//***************************************************************************
|
|
|
|
BOOL CNrwyadCtrl::GetPrintToFile()
|
|
{
|
|
ResetStatus();
|
|
return m_bPrtToFile;
|
|
}
|
|
|
|
void CNrwyadCtrl::SetPrintToFile(BOOL bNewValue)
|
|
{
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_PROP_ADMIN_PRINTTOFILE;
|
|
|
|
// Make sure input value is a boolean
|
|
if ((bNewValue != TRUE) && (bNewValue != FALSE))
|
|
{
|
|
m_szError.LoadString(IDS_BADBOOLEAN);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDPROPERTYVALUE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
if (m_bPrtToFile != bNewValue)
|
|
{
|
|
m_bPrtToFile = bNewValue;
|
|
SetModifiedFlag();
|
|
}
|
|
}
|
|
|
|
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
//
|
|
// CNrwyadCtrl Methods
|
|
//
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// VerifyImage Method
|
|
// Check if image exists or has specified access level.
|
|
//
|
|
// sOption One of:
|
|
//
|
|
//***************************************************************************
|
|
BOOL CNrwyadCtrl::VerifyImage(short sOption)
|
|
{
|
|
ResetStatus();
|
|
int nAccessMode;
|
|
UINT nHelpId = IDH_METHOD_ADMIN_VERIFYIMAGE;
|
|
|
|
switch(sOption)
|
|
{
|
|
case VERIFY_EXISTS:
|
|
nAccessMode = 0;
|
|
break;
|
|
case VERIFY_READ:
|
|
nAccessMode = ACCESS_RD;
|
|
break;
|
|
case VERIFY_WRITE:
|
|
nAccessMode = ACCESS_WR;
|
|
break;
|
|
case VERIFY_RW:
|
|
nAccessMode = ACCESS_RD | ACCESS_WR;
|
|
break;
|
|
default: // Error = invalid input
|
|
m_szError.LoadString(IDS_BADVERIFYOPT);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return FALSE;
|
|
} // End setting access mode
|
|
|
|
int nResult;
|
|
LPSTR pImage = m_szImage.GetBuffer(m_szImage.GetLength());
|
|
long lStat = (long)::IMGFileAccessCheck(m_hWnd, pImage, nAccessMode,
|
|
&nResult);
|
|
m_szImage.ReleaseBuffer();
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
if (nResult == 0)
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CreateDirectory Method
|
|
//
|
|
//
|
|
//***************************************************************************
|
|
void CNrwyadCtrl::CreateDirectory(LPCTSTR lpszPath)
|
|
{
|
|
ResetStatus();
|
|
CString OurPath;
|
|
OurPath = lpszPath;
|
|
UINT nHelpId = 0;
|
|
long lStat = 0;
|
|
|
|
if (lpszPath == NULL)
|
|
{
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDUSEOFNULL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Check if path exists (0 arg means check existence)
|
|
if (_access( lpszPath, 0) == 0) // Exists
|
|
{
|
|
lStat = FIO_DIRECTORY_EXISTS;
|
|
SetPrivateStatusCode(lStat, IDS_ALREADYEXISTS, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// IMGFileCreateDir - WIISFIO1 - OIFILE.H
|
|
lStat = (long)IMGFileCreateDir( m_hWnd, OurPath.GetBuffer( OurPath.GetLength()));
|
|
OurPath.ReleaseBuffer();
|
|
|
|
// FIO_MKDIR_ERROR means path where subdir to be created not found
|
|
if (lStat == FIO_MKDIR_ERROR)
|
|
{
|
|
m_szError.LoadString(IDS_PATHNOTFOUND);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PATHNOTFOUND, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
// Otherwise some sort of access error
|
|
else if (lStat == FIO_DIRECTORY_EXISTS)
|
|
{
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PERMISSIONDENIED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
else SetPrivateStatusCode(lStat);
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Delete Method
|
|
//
|
|
//***************************************************************************
|
|
|
|
void CNrwyadCtrl::Delete(LPCTSTR Object)
|
|
{
|
|
ResetStatus();
|
|
CString DeleteStr;
|
|
DeleteStr = Object;
|
|
long lStat = 0;
|
|
UINT nHelpId = 0;
|
|
|
|
if( Object == NULL )
|
|
{
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDUSEOFNULL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// THE FOLLOWING IS A SOLUTION FOR LOCAL FILES. FOR DOC OBJECTS AND
|
|
// CLIENT/SERVER FILES, ALTERNATE SOLUTIONS MUST BE PROVIDED!!!!
|
|
struct _stat buf;
|
|
int result;
|
|
|
|
// Get info about Image
|
|
result = _stat(Object, &buf );
|
|
/* Check if statistics are valid: */
|
|
if( result != 0 )
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_DELETE;
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PATHNOTFOUND, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// if the object is file, delete it, otherwise remove directory
|
|
if (!(buf.st_mode & _S_IFDIR))
|
|
{
|
|
// delete file
|
|
lStat = (long)IMGFileDeleteFile( m_hWnd, DeleteStr.GetBuffer( DeleteStr.GetLength()));
|
|
SetPrivateStatusCode(lStat);
|
|
DeleteStr.ReleaseBuffer();
|
|
}
|
|
else
|
|
{
|
|
// directory to be wiped!
|
|
lStat = (long)IMGFileRemoveDir( m_hWnd, DeleteStr.GetBuffer( DeleteStr.GetLength()));
|
|
SetPrivateStatusCode(lStat);
|
|
DeleteStr.ReleaseBuffer();
|
|
}
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Insert Method
|
|
//
|
|
//***************************************************************************
|
|
|
|
void CNrwyadCtrl::Insert(LPCTSTR Source, long SourcePage,
|
|
long DestinationPage, long NumPages,
|
|
const VARIANT FAR& v_CompressionType,
|
|
const VARIANT FAR& v_CompressionInfo)
|
|
{
|
|
ResetStatus();
|
|
long lStat = 0L;
|
|
CString szDest = m_szImage;
|
|
UINT nHelpId = 0;
|
|
|
|
if (NumPages < 0) // No negative numbers
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_BADNUMPAGES);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
else if (NumPages == 0) // If no pages to be appended, just return.
|
|
return;
|
|
|
|
if ((SourcePage <= 0) || (DestinationPage <= 0))
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_INVALIDPAGENUM);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Destination file if it exists must be TIFF or AWD for multiple pages
|
|
if ((m_bExist == TRUE) && (m_nFileType != IMAGE_FILETYPE_TIFF) &&
|
|
(m_nFileType != IMAGE_FILETYPE_AWD))
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_NOTMULTIPAGE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDFILEFORMAT, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
if (Source == NULL)
|
|
return;
|
|
|
|
// Check Access
|
|
// to Source
|
|
int nResult;
|
|
lStat = (long)::IMGFileAccessCheck(m_hWnd, (char *)Source, ACCESS_RD,
|
|
&nResult);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
if (nResult != 0)
|
|
{
|
|
m_szError.LoadString(IDS_NOREADACCESS);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PERMISSIONDENIED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// to Destination
|
|
LPSTR pImage = szDest.GetBuffer(szDest.GetLength());
|
|
if (m_bExist == TRUE) // If destination exists, check access
|
|
{
|
|
lStat = (long)::IMGFileAccessCheck(m_hWnd, pImage,
|
|
ACCESS_WR, &nResult);
|
|
SetPrivateStatusCode(lStat);
|
|
if (nResult != 0)
|
|
{
|
|
szDest.ReleaseBuffer();
|
|
m_szError.LoadString(IDS_NOWRITEACCESS);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PERMISSIONDENIED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Get info about Source (SourcePage, page count & file type)
|
|
FIO_INFO_CGBW FioInfoCgbw;
|
|
FIO_INFORMATION FioInformation;
|
|
// Empty the input/output structures
|
|
memset( (LPSTR)&FioInfoCgbw, 0, sizeof( FIO_INFO_CGBW));
|
|
memset( (LPSTR)&FioInformation, 0, sizeof( FIO_INFORMATION));
|
|
// Set current image and page number
|
|
FioInformation.filename = (char *)Source;
|
|
FioInformation.page_number = (UINT)SourcePage;
|
|
// Get info
|
|
lStat = (long)IMGFileGetInfo( NULL, m_hWnd,
|
|
(LP_FIO_INFORMATION)&FioInformation,
|
|
(LP_FIO_INFO_CGBW)&FioInfoCgbw, NULL);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
// Check that there are NumPages left in source file
|
|
if ((ULONG)(SourcePage + NumPages - 1) > FioInformation.page_count)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_BADNUMPAGES);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
UINT unPageOpts;
|
|
UINT nOIFileType;
|
|
// If destination does not exist, set dest page to 1
|
|
// Use input file type
|
|
if (m_bExist == FALSE)
|
|
{
|
|
DestinationPage = 1;
|
|
unPageOpts = FIO_NEW_FILE;
|
|
nOIFileType = FioInformation.file_type;
|
|
}
|
|
// Otherwise if Dest page not in file --> append
|
|
// Use dest. file type
|
|
else if (DestinationPage > m_lPageCount)
|
|
{
|
|
DestinationPage = m_lPageCount + 1;
|
|
unPageOpts = FIO_APPEND_PAGE;
|
|
nOIFileType = FileType2OI(m_nFileType);
|
|
}
|
|
else
|
|
{
|
|
unPageOpts = FIO_INSERT_PAGE;
|
|
nOIFileType = FileType2OI(m_nFileType);
|
|
}
|
|
|
|
// Set/Check Optional parameters
|
|
short sCompType;
|
|
UINT unOICompType;
|
|
BOOL bCompTypeOverride = TRUE;
|
|
|
|
// Get CompressionType optional parm
|
|
CVariantHandler Var(v_CompressionType);
|
|
lStat = Var.GetShort(sCompType, 0);
|
|
if (lStat == WI_INVALIDEMPTYVARIANT)
|
|
bCompTypeOverride = FALSE;
|
|
else if (lStat != 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_BADOPTPARAMETER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
else
|
|
{
|
|
unOICompType = CompType2OI(sCompType);
|
|
if (unOICompType == FIO_UNKNOWN)
|
|
{
|
|
szDest.ReleaseBuffer();
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_INVALIDCOMPTYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Get CompressionInfo optional parm
|
|
long lCompInfo;
|
|
UINT unOICompOpts;
|
|
BOOL bCompInfoOverride = TRUE;
|
|
|
|
Var.SetVariant(v_CompressionInfo);
|
|
lStat = Var.GetLong(lCompInfo, 0);
|
|
|
|
if (lStat == WI_INVALIDEMPTYVARIANT)
|
|
bCompInfoOverride = FALSE;
|
|
else if (lStat != 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_BADOPTPARAMETER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
else
|
|
unOICompOpts = CompInfo2OI(lCompInfo);
|
|
|
|
// Verify Compression type and options are compatible
|
|
// If not, throw error
|
|
// Set default for jpeg
|
|
if (bCompTypeOverride == TRUE)
|
|
{
|
|
// No compression types or options valid with AWD or BMP
|
|
if ((m_nFileType == IMAGE_FILETYPE_AWD) ||
|
|
((m_bExist == FALSE) && // Get a BMP when
|
|
(FioInformation.file_type == FIO_BMP))) // adding BMP to empty file
|
|
{
|
|
if ((sCompType != IMAGE_COMPTYPE_NONE) ||
|
|
(lCompInfo != 0))
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_TYPESINCOMPATIBLE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Verify CompType and Info are compatible
|
|
if (VerifyCompression(sCompType, lCompInfo) == FALSE)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_INSERT;
|
|
m_szError.LoadString(IDS_INVALIDCOMPINFO);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
// If JPEG type but no info, put in default info
|
|
if ((sCompType == IMAGE_COMPTYPE_JPEG) &&
|
|
(lCompInfo == 0))
|
|
unOICompOpts = MakeJPEGInfo(COMP_LO,QUAL_HI, QUAL_HI);
|
|
}
|
|
|
|
// Insert Pages (or append to end)
|
|
UINT DestPage;
|
|
short sPageType;
|
|
BOOL bOverrideValid = TRUE;
|
|
|
|
for (int i = 0; i < NumPages; i++)
|
|
{
|
|
// If not first page get info (info for first page retrieved above)
|
|
// Need info to either check with compression or pass in
|
|
if (i != 0)
|
|
{
|
|
FioInformation.page_number = (UINT)SourcePage + i;
|
|
lStat = (long)IMGFileGetInfo( NULL, m_hWnd,
|
|
(LP_FIO_INFORMATION)&FioInformation,
|
|
(LP_FIO_INFO_CGBW)&FioInfoCgbw, NULL);
|
|
SetPrivateStatusCode(lStat);
|
|
}
|
|
sPageType = PageType2Norway(FioInfoCgbw.image_type);
|
|
|
|
// If not overriding or if overriding info is
|
|
// incompatible with current page, use source info
|
|
if ((bCompTypeOverride == FALSE) || // Not overriding
|
|
((bOverrideValid = VerifyPageAndComp(sPageType, sCompType))
|
|
== FALSE)) // or no match
|
|
unOICompType = FioInfoCgbw.compress_type & FIO_TYPES_MASK;
|
|
|
|
if ((bCompInfoOverride == FALSE) || // Not overriding
|
|
(bOverrideValid == FALSE)) // or no match
|
|
{
|
|
unOICompOpts = FioInfoCgbw.compress_info1;
|
|
// But if BW, remove FIO_NEGATE so the image does not reverse
|
|
if (FioInfoCgbw.image_type == ITYPE_BI_LEVEL)
|
|
unOICompOpts &= ~FIO_NEGATE;
|
|
}
|
|
|
|
DestPage = (UINT)(DestinationPage + i);
|
|
lStat = (long)::IMGFileConvertPage(m_hWnd, (char *)Source,
|
|
(UINT)SourcePage + i, pImage,
|
|
&DestPage,
|
|
nOIFileType,
|
|
unOICompType, unOICompOpts,
|
|
unPageOpts);
|
|
if (lStat != NO_ERROR)
|
|
{
|
|
if (i != 0) // Remove pages already inserted before throwing error
|
|
::IMGFileDeletePages(m_hWnd, pImage, (UINT)DestinationPage, (UINT)i);
|
|
szDest.ReleaseBuffer();
|
|
SetPrivateStatusCode(lStat);
|
|
}
|
|
// File now exists, change variables
|
|
if (m_bExist == FALSE)
|
|
{
|
|
m_bExist = TRUE;
|
|
unPageOpts = FIO_APPEND_PAGE;
|
|
}
|
|
}
|
|
szDest.ReleaseBuffer();
|
|
m_lPageCount += NumPages; // Update page count
|
|
SetPageNumber(DestinationPage); // Update Image properties
|
|
ResetStatus();
|
|
return;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Append Method
|
|
//
|
|
//***************************************************************************
|
|
void CNrwyadCtrl::Append(LPCTSTR Source, long SourcePage, long NumPages,
|
|
const VARIANT FAR& v_CompressionType,
|
|
const VARIANT FAR& v_CompressionInfo)
|
|
{
|
|
long lStat = 0L;
|
|
UINT nHelpId = 0;
|
|
CString szDest = m_szImage;
|
|
ResetStatus();
|
|
|
|
if (NumPages < 0) // No negative numbers
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_BADNUMPAGES);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
else if (NumPages == 0) // If no pages to be appended, just return.
|
|
return;
|
|
|
|
if (SourcePage <= 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_INVALIDPAGENUM);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Destination file if it exists must be TIFF (or eventually AWD?)
|
|
// miki - I added the check for not AWD also !
|
|
if ((m_bExist == TRUE) && (m_nFileType != IMAGE_FILETYPE_TIFF) &&
|
|
(m_nFileType != IMAGE_FILETYPE_AWD))
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_NOTMULTIPAGE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDFILEFORMAT, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Check Access
|
|
// to Source
|
|
if (Source == NULL)
|
|
return;
|
|
|
|
int nResult;
|
|
lStat = (long)::IMGFileAccessCheck(m_hWnd, (char *)Source, ACCESS_RD,
|
|
&nResult);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
if (nResult != 0)
|
|
{
|
|
m_szError.LoadString(IDS_NOREADACCESS);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PERMISSIONDENIED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// to Destination
|
|
LPSTR pImage = szDest.GetBuffer(szDest.GetLength());
|
|
if (m_bExist == TRUE) // If destination exists, check access
|
|
{
|
|
lStat = (long)::IMGFileAccessCheck(m_hWnd, pImage, ACCESS_WR,
|
|
&nResult);
|
|
SetPrivateStatusCode(lStat);
|
|
if (nResult != 0)
|
|
{
|
|
szDest.ReleaseBuffer();
|
|
m_szError.LoadString(IDS_NOWRITEACCESS);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PERMISSIONDENIED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Get file info for source (for filetype, page count)
|
|
// Will get info for each page below if not overridden by
|
|
// optional parameters.
|
|
FIO_INFO_CGBW FioInfoCgbw;
|
|
FIO_INFORMATION FioInformation;
|
|
// Empty the input/output structures
|
|
memset( (LPSTR)&FioInfoCgbw, 0, sizeof( FIO_INFO_CGBW));
|
|
memset( (LPSTR)&FioInformation, 0, sizeof( FIO_INFORMATION));
|
|
|
|
// Set source image
|
|
FioInformation.filename = (char *)Source;
|
|
FioInformation.page_number = (UINT)SourcePage;
|
|
// Get info
|
|
lStat = (long)IMGFileGetInfo( NULL, m_hWnd,
|
|
(LP_FIO_INFORMATION)&FioInformation,
|
|
(LP_FIO_INFO_CGBW)&FioInfoCgbw, NULL);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
// Check that there are NumPages left in source file
|
|
if ((ULONG)(SourcePage + NumPages - 1) > FioInformation.page_count)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_BADNUMPAGES);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Set page options (new file or append)
|
|
UINT unPageOpts;
|
|
UINT unOIFileType;
|
|
if (m_bExist == FALSE) // For new file, use input file type
|
|
{
|
|
unPageOpts = FIO_NEW_FILE;
|
|
unOIFileType = FioInformation.file_type;
|
|
}
|
|
else // For existing file, use dest. file type
|
|
{
|
|
unPageOpts = FIO_APPEND_PAGE;
|
|
unOIFileType = FileType2OI(m_nFileType);
|
|
}
|
|
|
|
// Set/Check Optional parameters
|
|
UINT unOICompType = 0;
|
|
short sCompType;
|
|
BOOL bCompTypeOverride = TRUE;
|
|
|
|
// Get CompressionType optional parm
|
|
CVariantHandler Var(v_CompressionType);
|
|
lStat = Var.GetShort(sCompType, 0);
|
|
if (lStat == WI_INVALIDEMPTYVARIANT)
|
|
bCompTypeOverride = FALSE;
|
|
else if (lStat != 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_BADOPTPARAMETER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
else
|
|
{
|
|
unOICompType = CompType2OI(sCompType);
|
|
if (unOICompType == FIO_UNKNOWN)
|
|
{
|
|
szDest.ReleaseBuffer();
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_INVALIDCOMPTYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Get CompressionInfo optional parm
|
|
long lCompInfo;
|
|
UINT unOICompOpts = 0;
|
|
BOOL bCompInfoOverride = TRUE;
|
|
|
|
Var.SetVariant(v_CompressionInfo);
|
|
lStat = Var.GetLong(lCompInfo, 0);
|
|
|
|
if (lStat == WI_INVALIDEMPTYVARIANT)
|
|
bCompInfoOverride = FALSE;
|
|
else if (lStat != 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_BADOPTPARAMETER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
else
|
|
unOICompOpts = CompInfo2OI(lCompInfo);
|
|
|
|
// Verify Compression type and options are compatible
|
|
// If not, throw error
|
|
if (bCompTypeOverride == TRUE)
|
|
{
|
|
// No compression types or options valid with AWD or BMP
|
|
if ((m_nFileType == IMAGE_FILETYPE_AWD) ||
|
|
((m_bExist == FALSE) && // Get a BMP when
|
|
(FioInformation.file_type == FIO_BMP))) // adding BMP to empty file
|
|
{
|
|
if ((sCompType != IMAGE_COMPTYPE_NONE) ||
|
|
(lCompInfo != 0))
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_TYPESINCOMPATIBLE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
// Make sure type and info compatible
|
|
if (VerifyCompression(sCompType, lCompInfo) == FALSE)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_APPEND;
|
|
m_szError.LoadString(IDS_INVALIDCOMPINFO);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// If JPEG type but no info, put in default info
|
|
if ((sCompType == IMAGE_COMPTYPE_JPEG) &&
|
|
(lCompInfo == 0))
|
|
unOICompOpts = MakeJPEGInfo(COMP_LO,QUAL_HI, QUAL_HI);
|
|
}
|
|
|
|
// Append Pages
|
|
UINT DestPage = m_lPageCount + 1; // This is ignored in appending
|
|
short sPageType;
|
|
BOOL bOverrideValid = TRUE;
|
|
|
|
for (int i = 0; i < NumPages; i++)
|
|
{
|
|
// If not first page get info (info for first page retrieved above)
|
|
// Need info to either check with compression or pass in
|
|
if (i != 0)
|
|
{
|
|
FioInformation.page_number = (UINT)SourcePage + i;
|
|
lStat = (long)IMGFileGetInfo( NULL, m_hWnd,
|
|
(LP_FIO_INFORMATION)&FioInformation,
|
|
(LP_FIO_INFO_CGBW)&FioInfoCgbw, NULL);
|
|
SetPrivateStatusCode(lStat);
|
|
}
|
|
sPageType = PageType2Norway(FioInfoCgbw.image_type);
|
|
|
|
// If not overriding or if overriding info is
|
|
// incompatible with current page, use source info
|
|
if ((bCompTypeOverride == FALSE) || // Not overriding
|
|
((bOverrideValid = VerifyPageAndComp(sPageType, sCompType)) == FALSE)) // or no match
|
|
unOICompType = FioInfoCgbw.compress_type & FIO_TYPES_MASK;
|
|
|
|
if ((bCompInfoOverride == FALSE) || // Not overriding
|
|
(bOverrideValid == FALSE)) // or no match
|
|
{
|
|
unOICompOpts = FioInfoCgbw.compress_info1;
|
|
// But if BW, remove FIO_NEGATE so the image does not reverse
|
|
if (FioInfoCgbw.image_type == ITYPE_BI_LEVEL)
|
|
unOICompOpts &= ~FIO_NEGATE;
|
|
}
|
|
|
|
lStat = (long)::IMGFileConvertPage(m_hWnd, (char *)Source,
|
|
(UINT)SourcePage + i,
|
|
pImage, &DestPage,
|
|
unOIFileType,
|
|
unOICompType, unOICompOpts,
|
|
unPageOpts);
|
|
if (lStat != NO_ERROR)
|
|
{
|
|
if (i != 0) // Remove pages already appended before throwing error
|
|
::IMGFileDeletePages(m_hWnd, pImage, (UINT)(m_lPageCount + 1), (UINT)i);
|
|
szDest.ReleaseBuffer();
|
|
SetPrivateStatusCode(lStat);
|
|
}
|
|
// File now exists, change variables
|
|
if (m_bExist == FALSE)
|
|
{
|
|
m_bExist = TRUE;
|
|
unPageOpts = FIO_APPEND_PAGE;
|
|
}
|
|
|
|
}
|
|
m_lPageCount += NumPages; // Update page count
|
|
SetPageNumber(m_lPageCount); // Update Image properties
|
|
szDest.ReleaseBuffer();
|
|
ResetStatus();
|
|
return;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Replace Method
|
|
// This method will insert the pages and then if that is successful,
|
|
// it will remove the pages to be replaced. Otherwise, any pages
|
|
// inserted before the error will be deleted.
|
|
//
|
|
//***************************************************************************
|
|
|
|
void CNrwyadCtrl::Replace(LPCTSTR Source, long SourcePage,
|
|
long DestinationPage, long NumPages,
|
|
const VARIANT FAR& v_CompressionType,
|
|
const VARIANT FAR& v_CompressionInfo)
|
|
{
|
|
long lStat = 0L;
|
|
UINT nHelpId = 0;
|
|
CString szDest = m_szImage;
|
|
ResetStatus();
|
|
|
|
if (NumPages < 0) // No negative numbers
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_BADNUMPAGES);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
else if (NumPages == 0) // If no pages to be replaced, just return.
|
|
return;
|
|
|
|
if (Source == NULL)
|
|
return;
|
|
|
|
if ((SourcePage <= 0) || (DestinationPage <= 0))
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_INVALIDPAGENUM);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Destination file must exist
|
|
if (m_bExist != TRUE)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_FILEMUSTEXIST);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_FILENOTFOUND, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Check Access
|
|
// to Source
|
|
int nResult;
|
|
lStat = (long)::IMGFileAccessCheck(m_hWnd, (char *)Source, ACCESS_RD,
|
|
&nResult);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
if (nResult != 0)
|
|
{
|
|
m_szError.LoadString(IDS_NOREADACCESS);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PERMISSIONDENIED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// to Destination
|
|
LPSTR pImage = szDest.GetBuffer(szDest.GetLength());
|
|
lStat = (long)::IMGFileAccessCheck(m_hWnd, pImage, ACCESS_WR,
|
|
&nResult);
|
|
SetPrivateStatusCode(lStat);
|
|
if (nResult != 0)
|
|
{
|
|
szDest.ReleaseBuffer();
|
|
m_szError.LoadString(IDS_NOWRITEACCESS);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PERMISSIONDENIED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Check if have NumPages in Source
|
|
FIO_INFO_CGBW FioInfoCgbw;
|
|
FIO_INFORMATION FioInformation;
|
|
// Empty the input/output structures
|
|
memset( (LPSTR)&FioInfoCgbw, 0, sizeof( FIO_INFO_CGBW));
|
|
memset( (LPSTR)&FioInformation, 0, sizeof( FIO_INFORMATION));
|
|
|
|
// Set current image and page number
|
|
FioInformation.filename = (char *)Source;
|
|
FioInformation.page_number = (UINT)SourcePage;
|
|
// Get info
|
|
lStat = (long)IMGFileGetInfo( NULL, m_hWnd,
|
|
(LP_FIO_INFORMATION)&FioInformation,
|
|
(LP_FIO_INFO_CGBW)&FioInfoCgbw, NULL);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
// Check that there are NumPages left in source file
|
|
if ((ULONG)(SourcePage + NumPages - 1) > FioInformation.page_count)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_BADNUMPAGES);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
UINT unPageOpts;
|
|
|
|
// If not TIFF and not AWD, overwrite file, otherwise, overwrite page
|
|
if ((m_nFileType != IMAGE_FILETYPE_TIFF) &&
|
|
(m_nFileType != IMAGE_FILETYPE_AWD))
|
|
unPageOpts = FIO_OVERWRITE_FILE;
|
|
else unPageOpts = FIO_INSERT_PAGE;
|
|
// Make sure pages to be replaced exist.
|
|
if ((DestinationPage + NumPages - 1) > m_lPageCount)
|
|
{
|
|
szDest.ReleaseBuffer();
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_REPLACEPAGERANGE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
else SetPageNumber(DestinationPage);
|
|
|
|
// Set/Check Optional parameters
|
|
UINT unOICompType;
|
|
short sCompType;
|
|
BOOL bCompTypeOverride = TRUE;
|
|
|
|
// Get CompressionType optional parm
|
|
CVariantHandler Var(v_CompressionType);
|
|
lStat = Var.GetShort(sCompType, 0);
|
|
if (lStat == WI_INVALIDEMPTYVARIANT)
|
|
bCompTypeOverride = FALSE;
|
|
|
|
else if (lStat != 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_BADOPTPARAMETER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
else
|
|
{
|
|
unOICompType = CompType2OI(sCompType);
|
|
if (unOICompType == FIO_UNKNOWN)
|
|
{
|
|
szDest.ReleaseBuffer();
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_INVALIDCOMPTYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Get CompressionInfo optional parm
|
|
long lCompInfo;
|
|
UINT unOICompOpts;
|
|
BOOL bCompInfoOverride = TRUE;
|
|
|
|
Var.SetVariant(v_CompressionInfo);
|
|
lStat = Var.GetLong(lCompInfo, 0);
|
|
|
|
if (lStat == WI_INVALIDEMPTYVARIANT)
|
|
bCompInfoOverride = FALSE;
|
|
else if (lStat != 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_BADOPTPARAMETER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
|
|
}
|
|
else
|
|
unOICompOpts = CompInfo2OI(lCompInfo);
|
|
|
|
// Verify Compression type and options are compatible
|
|
// If not, throw error
|
|
if (bCompTypeOverride == TRUE)
|
|
{
|
|
// No compression types or options valid with AWD or BMP
|
|
if ((m_nFileType == IMAGE_FILETYPE_AWD) ||
|
|
(m_nFileType == IMAGE_FILETYPE_BMP))
|
|
{
|
|
if ((sCompType != IMAGE_COMPTYPE_NONE) ||
|
|
(lCompInfo != 0))
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_TYPESINCOMPATIBLE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
if (VerifyCompression(sCompType, lCompInfo) == FALSE)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_REPLACE;
|
|
m_szError.LoadString(IDS_INVALIDCOMPINFO);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// If JPEG type but no info, put in default info
|
|
if ((sCompType == IMAGE_COMPTYPE_JPEG) &&
|
|
(lCompInfo == 0))
|
|
unOICompOpts = MakeJPEGInfo(COMP_LO,QUAL_HI, QUAL_HI);
|
|
}
|
|
// Replace Pages
|
|
UINT DestPage;
|
|
short sPageType;
|
|
BOOL bOverrideValid = TRUE;
|
|
|
|
for (int i = 0; i < NumPages; i++)
|
|
{
|
|
// If not first page get info (info for first page retrieved above)
|
|
// Need info to either check with compression or pass in
|
|
if (i != 0)
|
|
{
|
|
FioInformation.page_number = (UINT)SourcePage + i;
|
|
lStat = (long)IMGFileGetInfo( NULL, m_hWnd,
|
|
(LP_FIO_INFORMATION)&FioInformation,
|
|
(LP_FIO_INFO_CGBW)&FioInfoCgbw, NULL);
|
|
SetPrivateStatusCode(lStat);
|
|
}
|
|
sPageType = PageType2Norway(FioInfoCgbw.image_type);
|
|
|
|
// If not overriding or if overriding info is
|
|
// incompatible with current page, use source info
|
|
if ((bCompTypeOverride == FALSE) || // Not overriding
|
|
((bOverrideValid = VerifyPageAndComp(sPageType, sCompType)) == FALSE)) // or no match
|
|
unOICompType = FioInfoCgbw.compress_type & FIO_TYPES_MASK;
|
|
|
|
if ((bCompInfoOverride == FALSE) || // Not overriding
|
|
(bOverrideValid == FALSE)) // or no match
|
|
{
|
|
unOICompOpts = FioInfoCgbw.compress_info1;
|
|
// But if BW, remove FIO_NEGATE so the image does not reverse
|
|
if (FioInfoCgbw.image_type == ITYPE_BI_LEVEL)
|
|
unOICompOpts &= ~FIO_NEGATE;
|
|
}
|
|
|
|
DestPage = (UINT)(DestinationPage + i);
|
|
lStat = (long)::IMGFileConvertPage(m_hWnd, (char *)Source,
|
|
(UINT)SourcePage + i,
|
|
pImage, &DestPage,
|
|
FileType2OI(m_nFileType),
|
|
unOICompType, unOICompOpts,
|
|
unPageOpts);
|
|
if (lStat != NO_ERROR)
|
|
{
|
|
if (i != 0) // Remove pages inserted before throwing error
|
|
::IMGFileDeletePages(m_hWnd, pImage, (UINT)DestinationPage, (UINT)i);
|
|
szDest.ReleaseBuffer();
|
|
SetPrivateStatusCode(lStat);
|
|
}
|
|
}
|
|
// If successful, and this is a multipage file, delete
|
|
// pages that were supposed to be replaced.
|
|
if ((m_nFileType == IMAGE_FILETYPE_TIFF) ||
|
|
(m_nFileType == IMAGE_FILETYPE_AWD))
|
|
{
|
|
lStat = (long)::IMGFileDeletePages(m_hWnd, pImage,
|
|
(UINT)DestinationPage + i, (UINT)i);
|
|
szDest.ReleaseBuffer();
|
|
if (lStat == DISPLAY_CACHEFILEINUSE)
|
|
{
|
|
if (i != 0) // Remove pages inserted before throwing error
|
|
::IMGFileDeletePages(m_hWnd, pImage, (UINT)DestinationPage, (UINT)i);
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_PAGEINUSE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
SetPrivateStatusCode(lStat);
|
|
}
|
|
|
|
// Update file properties
|
|
SetPageNumber((long)DestPage);
|
|
|
|
szDest.ReleaseBuffer();
|
|
ResetStatus();
|
|
return;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// SetSystemFileAttributes Method
|
|
//
|
|
//***************************************************************************
|
|
void CNrwyadCtrl::SetSystemFileAttributes(short PageType, short FileType,
|
|
short CompressionType,
|
|
long CompressionInfo)
|
|
{
|
|
long lStat = 0L;
|
|
UINT nHelpId = IDH_METHOD_ADMIN_SETSYSFILEATTRIBUTES;
|
|
ResetStatus();
|
|
|
|
// Classify page type into one of BW, GRAY, or COLOR
|
|
// Error if unable to
|
|
WORD wImageGroup = ClassifyImageType(PageType);
|
|
if (wImageGroup == 0)
|
|
{
|
|
m_szError.LoadString(IDS_BADPAGETYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
WORD OIFileType;
|
|
WORD OICompType;
|
|
WORD OICompOption;
|
|
// Convert FileType to OI file type
|
|
OIFileType = FileType2OI(FileType);
|
|
if (OIFileType == FIO_UNKNOWN)
|
|
{
|
|
m_szError.LoadString(IDS_BADFILETYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
else if ((FileType == IMAGE_FILETYPE_PCX) ||
|
|
(FileType == IMAGE_FILETYPE_DCX) ||
|
|
//#ifdef WITH_XIF
|
|
(FileType == IMAGE_FILETYPE_XIF) ||
|
|
//#endif //WITH_XIF
|
|
(FileType == IMAGE_FILETYPE_JPEG))
|
|
{
|
|
m_szError.LoadString(IDS_CANNOTWRITEFORMAT);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDFILEFORMAT, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Convert CompType to OI comp type - Error if unknown
|
|
OICompType = CompType2OI(CompressionType);
|
|
if (OICompType == FIO_UNKNOWN)
|
|
{
|
|
m_szError.LoadString(IDS_INVALIDCOMPTYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Verify AWD filetype and image group and compression type
|
|
if (FileType == IMAGE_FILETYPE_AWD)
|
|
{
|
|
if (wImageGroup != BWFORMAT) // AWD are only black & white
|
|
{
|
|
m_szError.LoadString(IDS_TYPESINCOMPATIBLE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
if (CompressionType != IMAGE_COMPTYPE_NONE) // AWD files have internal compression
|
|
{
|
|
m_szError.LoadString(IDS_TYPESINCOMPATIBLE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Verify BMP filetype and image group and compression type
|
|
if (FileType == IMAGE_FILETYPE_BMP)
|
|
{
|
|
if (wImageGroup == GRAYFORMAT) // BMP files cannot be grayscale
|
|
{
|
|
m_szError.LoadString(IDS_TYPESINCOMPATIBLE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
if (CompressionType != IMAGE_COMPTYPE_NONE) // BMP files cannot be compressed
|
|
{
|
|
m_szError.LoadString(IDS_TYPESINCOMPATIBLE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Verify that page type and compression type are compatible
|
|
if (VerifyPageAndComp(PageType, CompressionType) == FALSE)
|
|
{
|
|
m_szError.LoadString(IDS_TYPESINCOMPATIBLE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Verify Compression type and options are compatible
|
|
// If not, throw error
|
|
if (VerifyCompression(CompressionType, CompressionInfo) == FALSE)
|
|
{
|
|
m_szError.LoadString(IDS_INVALIDCOMPINFO);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// If JPEG type but no info, put in default info
|
|
if ((CompressionType == IMAGE_COMPTYPE_JPEG) &&
|
|
(CompressionInfo == 0))
|
|
CompressionInfo = IMAGE_COMPINFO_LOWCMP_HIQ; // == 4096
|
|
|
|
OICompOption = CompInfo2OI(CompressionInfo);
|
|
|
|
// Store default file type in registry
|
|
lStat = ::IMGSetFileType(m_hWnd, wImageGroup, OIFileType, TRUE);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
// Store default compression in registry
|
|
lStat = ::IMGSetImgCodingCgbw(m_hWnd, wImageGroup, OICompType,
|
|
OICompOption, TRUE);
|
|
SetPrivateStatusCode(lStat);
|
|
return;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// GetUniqueName Method
|
|
//
|
|
//***************************************************************************
|
|
BSTR CNrwyadCtrl::GetUniqueName(LPCTSTR Path, LPCTSTR Template, LPCTSTR Extension)
|
|
{
|
|
ResetStatus();
|
|
long lStat = 0;
|
|
UINT nHelpId = IDH_METHOD_ADMIN_GETUNIQUENAME;
|
|
CString s;
|
|
s.Empty();
|
|
|
|
if (Path == NULL)
|
|
{
|
|
nHelpId = 0;
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDUSEOFNULL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
CString szOurPath = Path;
|
|
|
|
CString szOurTemplate;
|
|
if (Template == NULL)
|
|
szOurTemplate.Empty();
|
|
else szOurTemplate = Template;
|
|
|
|
CString szOurExt;
|
|
if (Extension == NULL)
|
|
szOurExt.Empty();
|
|
else szOurExt = Extension;
|
|
|
|
// Check if valid path (0 arg means check existence)
|
|
if (_access( Path, 0) != 0)
|
|
{
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_PATHNOTFOUND, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
// Get unique name truncating template and extension to 4 and 3 characters
|
|
// respectively.
|
|
lStat = IMGFileGetUniqueName( m_hWnd,
|
|
szOurPath.GetBuffer( szOurPath.GetLength()),
|
|
szOurTemplate.GetBuffer(szOurTemplate.GetLength()),
|
|
szOurExt.GetBuffer(szOurExt.GetLength()),
|
|
s.GetBuffer( MAXFILELENGTH));
|
|
|
|
szOurPath.ReleaseBuffer();
|
|
szOurTemplate.ReleaseBuffer();
|
|
szOurExt.ReleaseBuffer();
|
|
s.ReleaseBuffer();
|
|
if (lStat == FIO_SYNTAX_ERROR) // Underlying API didn't like input strings
|
|
{
|
|
m_szError.LoadString(IDS_BADTEMPLATEOREXT);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return s.AllocSysString();
|
|
}
|
|
else SetPrivateStatusCode(lStat);
|
|
return s.AllocSysString();
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// GetSysCompressionType Method
|
|
//
|
|
// ImageType may be one of the following:
|
|
// 1 BW
|
|
// 2 GRAY4
|
|
// 3 GRAY8
|
|
// 4 PAL4
|
|
// 5 PAL8
|
|
// 6 RGB24
|
|
// 7 BGR24
|
|
//
|
|
// Returns one of:
|
|
// 0 Unknown
|
|
// 1 No Compression
|
|
// 2 Group 3 1D FAX
|
|
// 3 Group 3 Modified Huffman
|
|
// 4 Packed Bits
|
|
// 5 Group 4 2D FAX
|
|
// 6 JPEG
|
|
//
|
|
//***************************************************************************
|
|
short CNrwyadCtrl::GetSysCompressionType(short ImageType)
|
|
{
|
|
WORD wImageGroup;
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_METHOD_ADMIN_GETSYSCOMPTYPE;
|
|
long lStat = 0L;
|
|
|
|
// Classify ImageType into one of Black & White, Gray Scale, or Color
|
|
wImageGroup = ClassifyImageType(ImageType);
|
|
if (wImageGroup == 0)
|
|
{
|
|
m_szError.LoadString(IDS_BADPAGETYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return IMAGE_COMPTYPE_UNKNOWN;
|
|
}
|
|
|
|
WORD wCmpType;
|
|
WORD wCmpOption;
|
|
|
|
// Read info from Registry or defaults
|
|
lStat = (long)::IMGGetImgCodingCgbw(m_hWnd, wImageGroup, &wCmpType,
|
|
&wCmpOption, TRUE);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
// Translate from OI to Norway
|
|
short SysCompType = CompType2Norway(wCmpType, wCmpOption);
|
|
|
|
if (SysCompType == IMAGE_COMPTYPE_UNKNOWN)
|
|
{
|
|
nHelpId = 0;
|
|
m_szError.LoadString(IDS_REG_UNKCOMPTYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDFILEFORMAT, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
return SysCompType;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// GetSysCompressionInfo Method
|
|
//
|
|
// ImageType may be one of the following:
|
|
// 1 BW
|
|
// 2 GRAY4
|
|
// 3 GRAY8
|
|
// 4 PAL4
|
|
// 5 PAL8
|
|
// 6 RGB24
|
|
// 7 BGR24
|
|
//
|
|
// Returns a bitwise combination of:
|
|
// 1 EOLs (Include/expect EOLs) - not used for JPEG
|
|
// 2 Packed Lines (Byte align new lines) - not used for JPEG
|
|
// 4 Prefixed EOLs (Include/expect prefixed EOLs) - not used for JPEG
|
|
// 8 Compressed_LTR (Compressed bit order left to right) - not used for JPEG
|
|
// 16 Expanded_LTR (Expand bit order left to right) - not used for JPEG
|
|
// 32 Negate (Invert black/white on expansion) - not used for JPEG
|
|
// 64 Hi_Compression/Hi_Quality (JPEG compression only)
|
|
// 128 Hi_Compression/Med_Quality (JPEG compression only)
|
|
// 256 Hi_Compression/Low_Quality (JPEG compression only)
|
|
// 512 Med_Compression/Hi_Quality (JPEG compression only)
|
|
// 1024 Med_Compression/Med_Quality (JPEG compression only)
|
|
// 2048 Med_Compression/Low_Quality (JPEG compression only)
|
|
// 4098 Low_Compression/Hi_Quality (JPEG compression only)
|
|
// 8196 Low_Compression/Med_Quality (JPEG compression only)
|
|
// 16392 Low_Compression/Low_Quality (JPEG compression only)
|
|
//
|
|
//***************************************************************************
|
|
long CNrwyadCtrl::GetSysCompressionInfo(short ImageType)
|
|
{
|
|
ResetStatus();
|
|
WORD wImageGroup;
|
|
long lStat = 0L;
|
|
UINT nHelpId = IDH_METHOD_ADMIN_GETSYSCOMPINFO;
|
|
|
|
// Classify ImageType into one of Black & White, Gray Scale, or Color
|
|
wImageGroup = ClassifyImageType(ImageType);
|
|
if (wImageGroup == 0)
|
|
{
|
|
m_szError.LoadString(IDS_BADPAGETYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return 0L;
|
|
}
|
|
|
|
WORD wCmpType;
|
|
WORD wCmpOption;
|
|
// Read info from Registry or defaults
|
|
lStat = (long)::IMGGetImgCodingCgbw(m_hWnd, wImageGroup, &wCmpType,
|
|
&wCmpOption, TRUE);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
// translate from OI to Norway
|
|
return CompInfo2Norway(wCmpType, wCmpOption);
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// GetSysFileType Method
|
|
//
|
|
// ImageType may be one of the following:
|
|
// 1 BW
|
|
// 2 GRAY4
|
|
// 3 GRAY8
|
|
// 4 PAL4
|
|
// 5 PAL8
|
|
// 6 RGB24
|
|
// 7 BGR24
|
|
//
|
|
// Returns one of:
|
|
// 1 TIFF
|
|
// 2 AWD
|
|
// 3 Bitmap (BMP)
|
|
// 4 PCX
|
|
// 5 DCX
|
|
// 6 JPEG
|
|
//
|
|
//***************************************************************************
|
|
short CNrwyadCtrl::GetSysFileType(short ImageType)
|
|
{
|
|
ResetStatus();
|
|
WORD wImageGroup;
|
|
long lStat = 0L;
|
|
UINT nHelpId = IDH_METHOD_ADMIN_GETSYSFILETYPE;
|
|
|
|
// Classify ImageType into one of Black & White, Gray Scale, or Color
|
|
wImageGroup = ClassifyImageType(ImageType);
|
|
if (wImageGroup == 0)
|
|
{
|
|
m_szError.LoadString(IDS_BADPAGETYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return IMAGE_FILETYPE_UNKNOWN;
|
|
}
|
|
|
|
int nFileType;
|
|
|
|
// Read info from Registry or defaults
|
|
lStat = (long)::IMGGetFileType(m_hWnd, wImageGroup, &nFileType, TRUE);
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
short SysFileType = FileType2Norway((WORD)nFileType);
|
|
if (SysFileType == IMAGE_FILETYPE_UNKNOWN)
|
|
{
|
|
nHelpId = 0;
|
|
m_szError.LoadString(IDS_REG_UNKFILETYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDFILEFORMAT, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
|
|
return SysFileType;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// DeletePages Method
|
|
//
|
|
// StartPage - First page to be deleted
|
|
// NumPages - Number of pages to be deleted starting with StartPage
|
|
//
|
|
//***************************************************************************
|
|
void CNrwyadCtrl::DeletePages(long StartPage, long NumPages)
|
|
{
|
|
long lStat;
|
|
ResetStatus();
|
|
UINT nHelpId = IDH_METHOD_ADMIN_DELETEPAGES;
|
|
|
|
// Error if Start page is 0 or > PageCount
|
|
if ((StartPage > m_lPageCount) || (StartPage == 0))
|
|
{
|
|
m_szError.LoadString(IDS_INVALIDPAGENUM);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
else if (NumPages == 0) // Just return if NumPages == 0
|
|
return;
|
|
// Truncate number of pages to be deleted if goes beyond eof
|
|
else if ((StartPage + NumPages - 1) > m_lPageCount)
|
|
NumPages = m_lPageCount - StartPage + 1;
|
|
|
|
LPSTR pImage = m_szImage.GetBuffer(m_szImage.GetLength());
|
|
lStat = (long)::IMGFileDeletePages(m_hWnd, pImage, (UINT)StartPage,
|
|
(UINT)NumPages);
|
|
m_szImage.ReleaseBuffer();
|
|
if (lStat == DISPLAY_CACHEFILEINUSE)
|
|
{
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_PAGEINUSE, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
// Adjust PageCount and set current page
|
|
m_lPageCount -= NumPages;
|
|
|
|
if (m_lPageCount == 0)
|
|
{
|
|
m_lPageNum = 1;
|
|
return;
|
|
}
|
|
|
|
if (m_lPageNum > m_lPageCount)
|
|
SetPageNumber(m_lPageCount);
|
|
else SetPageNumber(m_lPageNum);
|
|
return;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// ShowFileDialog Method
|
|
//
|
|
// DialogOption can be one of the following:
|
|
// 0 Open or Select
|
|
// 1 Save As
|
|
//
|
|
//***************************************************************************
|
|
|
|
void CNrwyadCtrl::ShowFileDialog(short DialogOption, const VARIANT FAR& v_hParentWnd)
|
|
{
|
|
UINT nHelpId = 0;
|
|
ResetStatus();
|
|
|
|
// Load OIUI400.DLL if necessary
|
|
if (m_hinstOIUI == NULL)
|
|
{
|
|
/* Get a handle to the DLL module. */
|
|
m_hinstOIUI = LoadLibrary("oiui400");
|
|
// Failed, throw error
|
|
if (m_hinstOIUI == NULL)
|
|
{
|
|
m_szError.LoadString(IDS_CANNOTLOADDLL);
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_INTERNALERROR, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
// Get OIUiGetFileNameDlg proc if necessary
|
|
if (m_pOiCommDlgProc == NULL)
|
|
{
|
|
m_pOiCommDlgProc = (OIDLGPROC)GetProcAddress(m_hinstOIUI, "OiUIFileGetNameCommDlg");
|
|
if (m_pOiCommDlgProc == NULL) // failed
|
|
{
|
|
m_szError.LoadString(IDS_CANNOTLOADDLL);
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_INTERNALERROR, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
LPOI_FILEOPENPARM lpOpenFileParm;
|
|
LPOI_FILESAVEASPARM lpSaveFileParm;
|
|
OPENFILENAME *lpOfn;
|
|
HANDLE hFileParm;
|
|
long lStat = 0;
|
|
int x = 180, y = 196;
|
|
|
|
// Save current active window to make sure focus is returned there after
|
|
// dialog returns (Set lock on temp maps so pointer to active window
|
|
// is still valid after call to dialog box).
|
|
AfxLockTempMaps();
|
|
CWnd *pActiveWnd = GetActiveWindow();
|
|
|
|
// This is how to get the parent of the
|
|
// invisible control!!! No longer need optional
|
|
// parameter!!!
|
|
HWND hwndParent = NULL;
|
|
if (m_pInPlaceSite != NULL)
|
|
m_pInPlaceSite->GetWindow(&hwndParent);
|
|
|
|
// Process Optional parent wnd variant
|
|
HWND hParentWnd = NULL;
|
|
CVariantHandler Var(v_hParentWnd);
|
|
long lTemp;
|
|
lStat = Var.GetLong(lTemp, 0l, FALSE);
|
|
hParentWnd = (HWND)lTemp;
|
|
if (lStat != 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_SHOWFILEDIALOG;
|
|
m_szError.LoadString(IDS_BADOPTPARAMETER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
|
|
// Create Open or SaveAs input structure
|
|
if (DialogOption == DIALOG_OPTION_OPEN)
|
|
hFileParm = GlobalAlloc (GMEM_MOVEABLE | GMEM_ZEROINIT,
|
|
(DWORD) sizeof(OI_FILEOPENPARM));
|
|
else hFileParm = GlobalAlloc (GMEM_MOVEABLE | GMEM_ZEROINIT,
|
|
(DWORD) sizeof(OI_FILESAVEASPARM));
|
|
|
|
if (hFileParm == NULL)
|
|
return;
|
|
|
|
// Set info in structure
|
|
if (DialogOption == DIALOG_OPTION_OPEN)
|
|
{
|
|
lpOpenFileParm = (LPOI_FILEOPENPARM)GlobalLock(hFileParm);
|
|
if (lpOpenFileParm == NULL)
|
|
{
|
|
GlobalFree(hFileParm);
|
|
return;
|
|
}
|
|
lpOfn = &lpOpenFileParm->ofn;
|
|
lpOpenFileParm->lStructSize = sizeof( OI_FILEOPENPARM);
|
|
lpOpenFileParm->lpFileOpenOptionParm = NULL;
|
|
}
|
|
else
|
|
{
|
|
lpSaveFileParm = (LPOI_FILESAVEASPARM)GlobalLock(hFileParm);
|
|
if (lpSaveFileParm == NULL)
|
|
{
|
|
GlobalFree(hFileParm);
|
|
return;
|
|
}
|
|
lpOfn = &lpSaveFileParm->ofn;
|
|
lpSaveFileParm->lStructSize = sizeof( OI_FILESAVEASPARM);
|
|
}
|
|
|
|
lpOfn->lStructSize = sizeof( OPENFILENAME );
|
|
|
|
if (!IsWindow(hParentWnd))
|
|
hParentWnd = hwndParent;
|
|
|
|
if (IsWindow(hParentWnd))
|
|
{
|
|
RECT WndRect;
|
|
::GetWindowRect(hParentWnd, &WndRect);
|
|
x = WndRect.left;
|
|
y = WndRect.top;
|
|
}
|
|
|
|
m_HelpWnd.CreateHelpWindow(x, y, hParentWnd);
|
|
m_HelpWnd.m_pAdminCtrl = this;
|
|
|
|
// Set owner window as help window just created
|
|
lpOfn->hwndOwner = m_HelpWnd.GetSafeHwnd();
|
|
lpOfn->nMaxFile = MAXFILESPECLENGTH;
|
|
// Set default filter index based on current file
|
|
if ((m_lFilterIndex == 0) && // Use default
|
|
(m_bExist == TRUE)) // Have a file
|
|
{
|
|
if (DialogOption == DIALOG_OPTION_SAVEAS)
|
|
{
|
|
if (m_nFileType == IMAGE_FILETYPE_AWD)
|
|
lpOfn->nFilterIndex = OI_SAVEAS_FILTER_AWD;
|
|
else if (m_nFileType == IMAGE_FILETYPE_BMP)
|
|
lpOfn->nFilterIndex = OI_SAVEAS_FILTER_BMP;
|
|
else lpOfn->nFilterIndex = OI_SAVEAS_FILTER_TIFF;
|
|
}
|
|
else
|
|
{
|
|
if (m_nFileType == IMAGE_FILETYPE_TIFF)
|
|
lpOfn->nFilterIndex = OI_OPEN_FILTER_TIFF;
|
|
else if (m_nFileType == IMAGE_FILETYPE_AWD)
|
|
lpOfn->nFilterIndex = OI_OPEN_FILTER_AWD;
|
|
else if (m_nFileType == IMAGE_FILETYPE_BMP)
|
|
lpOfn->nFilterIndex = OI_OPEN_FILTER_BMP;
|
|
else if (m_nFileType == IMAGE_FILETYPE_PCX)
|
|
lpOfn->nFilterIndex = OI_OPEN_FILTER_PCX;
|
|
else if (m_nFileType == IMAGE_FILETYPE_DCX)
|
|
lpOfn->nFilterIndex = OI_OPEN_FILTER_DCX;
|
|
else if (m_nFileType == IMAGE_FILETYPE_JPEG)
|
|
lpOfn->nFilterIndex = OI_OPEN_FILTER_JPEG;
|
|
//#ifdef WITH_XIF
|
|
else if (m_nFileType == IMAGE_FILETYPE_XIF)
|
|
lpOfn->nFilterIndex = OI_OPEN_FILTER_XIF;
|
|
//#endif //WITH_XIF
|
|
else lpOfn->nFilterIndex = OI_OPEN_FILTER_ALL;
|
|
}
|
|
}
|
|
else lpOfn->nFilterIndex = (DWORD)m_lFilterIndex;
|
|
|
|
if (DialogOption == DIALOG_OPTION_OPEN)
|
|
lpOfn->Flags = m_lFlags | OFN_SHAREAWARE;
|
|
else
|
|
lpOfn->Flags = m_lFlags | OFN_SHAREAWARE|OFN_OVERWRITEPROMPT;
|
|
|
|
// Don't show help button if no help file, or not specified by Flags or
|
|
// a different owner window is given
|
|
if (m_szHelpFile.IsEmpty())
|
|
lpOfn->Flags &= ~OFN_SHOWHELP;
|
|
|
|
lpOfn->lpstrInitialDir = m_szInitDir;
|
|
if (!m_szDefaultExt.IsEmpty())
|
|
lpOfn->lpstrDefExt = m_szDefaultExt;
|
|
else lpOfn->lpstrDefExt = NULL;
|
|
lpOfn->lpstrTitle = m_szDialogTitle;
|
|
|
|
// Set Filter (first changing delimiter to zero char)
|
|
CString szFilter;
|
|
szFilter = m_szFilter;
|
|
int nLength = szFilter.GetLength();
|
|
ReplaceCharWithNull(szFilter.GetBuffer(nLength), (int)'|');
|
|
szFilter.ReleaseBuffer(nLength);
|
|
lpOfn->lpstrFilter = szFilter;
|
|
|
|
CString s = m_szImage; // Set file name to current image name
|
|
lpOfn->lpstrFile = s.GetBuffer( MAXFILESPECLENGTH);
|
|
|
|
PreModalDialog();
|
|
// Put up requested dialog box
|
|
if (DialogOption == DIALOG_OPTION_OPEN)
|
|
lStat = (long)(m_pOiCommDlgProc)(lpOpenFileParm,OI_UIFILEOPENGETNAME);
|
|
else lStat = (long)(m_pOiCommDlgProc)(lpSaveFileParm,OI_UIFILESAVEASGETNAME);
|
|
PostModalDialog();
|
|
|
|
if (IsWindow(pActiveWnd->GetSafeHwnd()))
|
|
pActiveWnd->SetActiveWindow();
|
|
if (IsWindow(m_HelpWnd.m_hWnd))
|
|
m_HelpWnd.DestroyWindow();
|
|
|
|
AfxUnlockTempMaps(); // Unlock temp maps
|
|
|
|
// release the buffers we just obtained
|
|
s.ReleaseBuffer();
|
|
// GlobalUnlock(hFileParm);
|
|
// GlobalFree(hFileParm);
|
|
|
|
if (lStat == CANCELPRESSED) // Process cancel
|
|
{
|
|
if (m_bCancelErr == TRUE)
|
|
{
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_CANCELPRESSED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
GlobalUnlock(hFileParm);
|
|
GlobalFree(hFileParm);
|
|
return;
|
|
}
|
|
SetPrivateStatusCode(NO_ERROR);
|
|
GlobalUnlock(hFileParm);
|
|
GlobalFree(hFileParm);
|
|
return;
|
|
}
|
|
SetPrivateStatusCode(lStat);
|
|
|
|
if (lStat == FIO_SUCCESS)
|
|
{
|
|
// Reset filter index if it has changed, and user has specified a filter (i.e.
|
|
// m_lNumFilters is not 0) Otherwise, new filter index won't make sense
|
|
if ((lpOfn->nFilterIndex != (DWORD) m_lFilterIndex) &&
|
|
(m_lNumFilters != 0))
|
|
SetFilterIndex(lpOfn->nFilterIndex);
|
|
|
|
if (lpOfn->Flags & OFN_EXTENSIONDIFFERENT)
|
|
m_lFlags |= OFN_EXTENSIONDIFFERENT;
|
|
else m_lFlags &= ~OFN_EXTENSIONDIFFERENT;
|
|
|
|
if (lpOfn->Flags & OFN_READONLY)
|
|
m_lFlags |= OFN_READONLY;
|
|
else m_lFlags &= ~OFN_READONLY;
|
|
|
|
SetImage(s);
|
|
}
|
|
GlobalUnlock(hFileParm);
|
|
GlobalFree(hFileParm);
|
|
return;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// ShowPrintDialog Method
|
|
//
|
|
//***************************************************************************
|
|
void CNrwyadCtrl::ShowPrintDialog(const VARIANT FAR& v_hParentWnd)
|
|
{
|
|
OI_FILEPRINTPARM PrintParm;
|
|
long lStat;
|
|
UINT nHelpId;
|
|
ResetStatus();
|
|
|
|
// Load OIUI400.DLL if necessary
|
|
if (m_hinstOIUI == NULL)
|
|
{
|
|
/* Get a handle to the DLL module. */
|
|
m_hinstOIUI = LoadLibrary("oiui400");
|
|
// Failed, throw error
|
|
if (m_hinstOIUI == NULL)
|
|
{
|
|
m_szError.LoadString(IDS_CANNOTLOADDLL);
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_INTERNALERROR, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
// Get OIUiGetFileNameDlg proc if necessary
|
|
if (m_pOiCommDlgProc == NULL)
|
|
{
|
|
m_pOiCommDlgProc = (OIDLGPROC)GetProcAddress(m_hinstOIUI, "OiUIFileGetNameCommDlg");
|
|
if (m_pOiCommDlgProc == NULL) // failed
|
|
{
|
|
m_szError.LoadString(IDS_CANNOTLOADDLL);
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_INTERNALERROR, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
AfxLockTempMaps();
|
|
CWnd *pActiveWnd = GetActiveWindow();
|
|
|
|
// This is how to get the parent of the
|
|
// invisible control!!! No longer need optional
|
|
// parameter!!!
|
|
HWND hwndParent = NULL;
|
|
if (m_pInPlaceSite != NULL)
|
|
m_pInPlaceSite->GetWindow(&hwndParent);
|
|
|
|
// Process Optional parent wnd variant
|
|
HWND hParentWnd = NULL;
|
|
CVariantHandler Var(v_hParentWnd);
|
|
long lTemp;
|
|
lStat = Var.GetLong(lTemp, 0l, FALSE);
|
|
hParentWnd = (HWND)lTemp;
|
|
if (lStat != 0)
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_SHOWPRINTDIALOG;
|
|
m_szError.LoadString(IDS_BADOPTPARAMETER);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_ILLEGALFUNCTIONCALL, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
if (!IsWindow(hParentWnd))
|
|
hParentWnd = hwndParent;
|
|
|
|
// Zero out structure
|
|
memset( (LPSTR)&PrintParm, 0, sizeof( OI_FILEPRINTPARM ));
|
|
|
|
if (GetPageCount() == 0) // Need something to print
|
|
{
|
|
nHelpId = IDH_METHOD_ADMIN_SHOWPRINTDIALOG;
|
|
m_szError.LoadString(IDS_FILEMUSTEXIST);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_FILENOTFOUND, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Fill in O/i defaults
|
|
PrintParm.lStructSize = sizeof(OI_FILEPRINTPARM);
|
|
PrintParm.bPrintAnno = m_bPrtAnnotations;
|
|
if (m_nPrtOutFormat == CTL_WCOMMON_PRINTFORMAT_PIXEL)
|
|
PrintParm.dPrintFormat = PO_PIX2PIX;
|
|
else if (m_nPrtOutFormat == CTL_WCOMMON_PRINTFORMAT_ACTUALSIZE)
|
|
PrintParm.dPrintFormat = PO_IN2IN;
|
|
else PrintParm.dPrintFormat = PO_FULLPAGE;
|
|
|
|
// Fill in standard print dialog parameters
|
|
PrintParm.pd.lStructSize = sizeof(PRINTDLG);
|
|
if (hParentWnd == NULL)
|
|
PrintParm.pd.hwndOwner = m_hWnd;
|
|
else PrintParm.pd.hwndOwner = hParentWnd;
|
|
|
|
PrintParm.pd.Flags = m_lFlags | PD_NOSELECTION; // Disable Selection Button
|
|
PrintParm.pd.nFromPage = (short) m_lPrtStartPage;
|
|
PrintParm.pd.nToPage = (short) m_lPrtEndPage;
|
|
|
|
if (m_nPrtRangeOption == IMAGE_RANGE_ALL)
|
|
PrintParm.pd.Flags &= ~PD_PAGENUMS;
|
|
else if (m_nPrtRangeOption == IMAGE_RANGE_PAGES)
|
|
PrintParm.pd.Flags |= PD_PAGENUMS;
|
|
else
|
|
{
|
|
PrintParm.pd.Flags |= PD_PAGENUMS;
|
|
PrintParm.pd.nFromPage = (short) m_lPageNum;
|
|
PrintParm.pd.nToPage = (short) m_lPageNum;
|
|
}
|
|
|
|
PrintParm.pd.nMinPage = 1;
|
|
PrintParm.pd.nMaxPage = (short) m_lPageCount;
|
|
PrintParm.pd.nCopies = (short) m_lPrtNumCopies;
|
|
|
|
if (m_bPrtToFile == TRUE)
|
|
PrintParm.pd.Flags |= PD_PRINTTOFILE;
|
|
|
|
PrintParm.pd.Flags |= PD_RETURNDC;
|
|
|
|
WORD wResult = (m_pOiCommDlgProc)(&PrintParm,OI_UIFILEPRINT);
|
|
if (IsWindow(pActiveWnd->GetSafeHwnd()))
|
|
pActiveWnd->SetActiveWindow();
|
|
|
|
AfxUnlockTempMaps();
|
|
|
|
// If result not TRUE, then CANCEL or error
|
|
if (wResult != SUCCESS)
|
|
{
|
|
if (wResult == CANCELPRESSED)
|
|
{
|
|
if (m_bCancelErr == TRUE)
|
|
{ // Return Cancel error
|
|
nHelpId = 0;
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_CANCELPRESSED, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
lStat = NO_ERROR;
|
|
}
|
|
else lStat = (long)wResult; // Return other error
|
|
|
|
SetPrivateStatusCode(lStat);
|
|
return;
|
|
}
|
|
ResetStatus();
|
|
|
|
// Fill in variables based on what user entered
|
|
m_bPrtAnnotations = PrintParm.bPrintAnno;
|
|
|
|
if (PrintParm.dPrintFormat == PO_PIX2PIX)
|
|
m_nPrtOutFormat = CTL_WCOMMON_PRINTFORMAT_PIXEL;
|
|
else if (PrintParm.dPrintFormat == PO_IN2IN)
|
|
m_nPrtOutFormat = CTL_WCOMMON_PRINTFORMAT_ACTUALSIZE;
|
|
else m_nPrtOutFormat = CTL_WCOMMON_PRINTFORMAT_FITTOPAGE;
|
|
|
|
if (!(PrintParm.pd.Flags & PD_PAGENUMS))
|
|
m_nPrtRangeOption = IMAGE_RANGE_ALL;
|
|
else m_nPrtRangeOption = IMAGE_RANGE_PAGES;
|
|
//else if (PrintParm.pd.Flags & PD_PAGENUMS) // For Beta no print current page
|
|
//{
|
|
//if ((PrintParm.pd.nFromPage == PrintParm.pd.nToPage) &&
|
|
//(PrintParm.pd.nFromPage == m_lPageNum))
|
|
//m_nPrtRangeOption = IMAGE_RANGE_CURRENT;
|
|
//else m_nPrtRangeOption = IMAGE_RANGE_PAGES;
|
|
//}
|
|
//else m_nPrtRangeOption = IMAGE_RANGE_CURRENT;
|
|
|
|
m_lPrtStartPage = PrintParm.pd.nFromPage;
|
|
m_lPrtEndPage = PrintParm.pd.nToPage;
|
|
m_lPrtNumCopies = PrintParm.pd.nCopies;
|
|
|
|
if (PrintParm.pd.Flags & PD_PRINTTOFILE)
|
|
m_bPrtToFile = TRUE;
|
|
else
|
|
m_bPrtToFile = FALSE;
|
|
|
|
if (PrintParm.pd.Flags & PD_COLLATE)
|
|
m_lFlags |= PD_COLLATE;
|
|
else m_lFlags &= ~PD_COLLATE;
|
|
|
|
// Set device context, name, and annotations flag for when
|
|
// print is called
|
|
PRTOPTS PrintOptions;
|
|
|
|
// Zero out structure
|
|
memset( (LPSTR)&PrintOptions, 0, sizeof(PRTOPTS));
|
|
PrintOptions.nVersion = PRTOPTSVERSION; // Set version
|
|
|
|
// Load OIPRT400.DLL if necessary
|
|
if (m_hinstOIPRT == NULL)
|
|
{
|
|
/* Get a handle to the DLL module. */
|
|
m_hinstOIPRT = LoadLibrary("oiprt400");
|
|
// Failed, throw error
|
|
if (m_hinstOIPRT == NULL)
|
|
{
|
|
m_szError.LoadString(IDS_CANNOTLOADDLL);
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_INTERNALERROR, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
// Get OIPrtXXXOpts procs if necessary
|
|
if (m_pOiGetPrtOptProc == NULL)
|
|
{
|
|
m_pOiGetPrtOptProc = (OIGETOPTPROC)GetProcAddress(m_hinstOIPRT, "OiPrtGetOpts");
|
|
if (m_pOiGetPrtOptProc == NULL) // failed
|
|
{
|
|
m_szError.LoadString(IDS_CANNOTLOADDLL);
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_INTERNALERROR, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
if (m_pOiSetPrtOptProc == NULL)
|
|
{
|
|
m_pOiSetPrtOptProc = (OISETOPTPROC)GetProcAddress(m_hinstOIPRT, "OiPrtSetOpts");
|
|
if (m_pOiSetPrtOptProc == NULL) // failed
|
|
{
|
|
m_szError.LoadString(IDS_CANNOTLOADDLL);
|
|
m_lStatusCode = ErrMap::Xlate(WICTL_E_INTERNALERROR, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Get global mem pointer to DEVMODE structure
|
|
DEVMODE *lpDevMode = NULL;
|
|
if (PrintParm.pd.hDevNames != NULL)
|
|
lpDevMode = (DEVMODE *)GlobalLock(PrintParm.pd.hDevMode);
|
|
|
|
lStat = (m_pOiGetPrtOptProc)(&PrintOptions); // Get current options
|
|
SetPrivateStatusCode(lStat);
|
|
if (lpDevMode != NULL) // Set Device Name
|
|
{
|
|
if (strlen((LPCSTR)lpDevMode->dmDeviceName) >= MAX_PRINTERNAMESIZE)
|
|
lpDevMode->dmDeviceName[MAX_PRINTERNAMESIZE] = '\0';
|
|
strcpy(PrintOptions.szPrtName, (LPCSTR)lpDevMode->dmDeviceName);
|
|
GlobalUnlock(PrintParm.pd.hDevMode);
|
|
}
|
|
PrintOptions.hPrtDC = PrintParm.pd.hDC; // Change DC
|
|
if (m_bPrtAnnotations == FALSE) // Change annotations
|
|
PrintOptions.nFlags |= PO_DONTPRTANNO;
|
|
else PrintOptions.nFlags &= ~PO_DONTPRTANNO;
|
|
lStat = (m_pOiSetPrtOptProc)(&PrintOptions, FALSE); // Set options
|
|
SetPrivateStatusCode(lStat);
|
|
return;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// AboutBox Method Display an "About" box to the user
|
|
//
|
|
//***************************************************************************
|
|
|
|
void CNrwyadCtrl::AboutBox()
|
|
{
|
|
CDialog dlgAbout(IDD_ABOUTBOX_ADMIN);
|
|
dlgAbout.DoModal();
|
|
}
|
|
|
|
//****************************************************************************
|
|
//
|
|
// GetVersion - A hidden, undocumented method for QA use.
|
|
//
|
|
//****************************************************************************
|
|
BSTR CNrwyadCtrl::GetVersion()
|
|
{
|
|
CString strResult;
|
|
strResult = _T("01.00");
|
|
return strResult.AllocSysString();
|
|
}
|
|
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
//
|
|
// CNrwyadCtrl Other (Message Handlers and Private Functions)
|
|
//
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNrwyadCtrl message handlers
|
|
|
|
//***************************************************************************
|
|
//
|
|
// OnCreate
|
|
//
|
|
//***************************************************************************
|
|
int CNrwyadCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (COleControl::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
// Call IDK to register Admin wnd as an image wnd
|
|
if (IMGRegWndw( m_hWnd ) != SUCCESS)
|
|
return -1;
|
|
|
|
CString szAdmin;
|
|
szAdmin.LoadString(IDS_NRWYAD_ADMIN);
|
|
SetWindowText(szAdmin);
|
|
//m_hCommDlgInst = LoadLibrary("comdlg32.dll");
|
|
return 0;
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// OnDestroy
|
|
//
|
|
//***************************************************************************
|
|
void CNrwyadCtrl::OnDestroy()
|
|
{
|
|
TRACE1("Destroying Admin Control Window: 0x%04X\n", m_hWnd);
|
|
if (m_hWnd != NULL)
|
|
{
|
|
// Call IDK to unregister Admin window
|
|
if (IMGDeRegWndw( m_hWnd ) != SUCCESS)
|
|
TRACE0("Unable to DeReg window");
|
|
}
|
|
//if (m_hCommDlgInst != NULL)
|
|
//FreeLibrary(m_hCommDlgInst);
|
|
if (m_hinstOIUI != NULL)
|
|
FreeLibrary(m_hinstOIUI);
|
|
if (m_hinstOIPRT != NULL)
|
|
FreeLibrary(m_hinstOIPRT);
|
|
COleControl::OnDestroy();
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// OnSetClientSite - Force creation of window
|
|
//
|
|
//***************************************************************************
|
|
|
|
void CNrwyadCtrl::OnSetClientSite()
|
|
{
|
|
if (m_hWnd == NULL)
|
|
{
|
|
TRACE0("Forcing creation of Admin Control window\n");
|
|
RecreateControlWindow();
|
|
TRACE1("Admin Control Window: 0x%04X\n", m_hWnd);
|
|
}
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNrwyadCtrl Private and Static Functions
|
|
|
|
//***************************************************************************
|
|
//
|
|
// SetPrivateStatusCode - Called for codes returned from IDK functions.
|
|
// If lStat is not an error, just reset the status and return.
|
|
// Otherwise call translation function to translate to SCODE
|
|
// and throw error.
|
|
//
|
|
//***************************************************************************
|
|
void CNrwyadCtrl::SetPrivateStatusCode(long lStat, int nStringId /* = 0 */,
|
|
UINT nHelpId /* = 0 */)
|
|
{
|
|
if ((lStat == NO_ERROR) || (lStat == SUCCESS))
|
|
{
|
|
ResetStatus();
|
|
return;
|
|
}
|
|
|
|
#ifdef _DEBUG
|
|
//::IMGErrorMessageBox(m_hWnd, (UINT)lStat);
|
|
#endif
|
|
|
|
if (nStringId != 0)
|
|
m_szError.LoadString(nStringId);
|
|
m_lStatusCode = ErrMap::Xlate(lStat, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
|
|
//***************************************************************************
|
|
//
|
|
// ReplaceCharWithNull -- Static function
|
|
// Replaces given character in string with '\0'
|
|
// Returns the number of changes made.
|
|
//
|
|
//***************************************************************************
|
|
int FAR PASCAL ReplaceCharWithNull(LPSTR psz, int ch)
|
|
{
|
|
int cChanged = 0;
|
|
|
|
if (NULL != psz)
|
|
{
|
|
while (0 != *psz)
|
|
{
|
|
if (ch == *psz)
|
|
{
|
|
*psz = 0;
|
|
cChanged++;
|
|
}
|
|
psz++;
|
|
}
|
|
}
|
|
return cChanged;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// GetFileAttributes - private function
|
|
// Gets attributes of file specified by the Image property. Checks
|
|
// validity of attributes. Throws error if an unrecognized attribute
|
|
// is encountered. Attributes are reset if the Image file is not
|
|
// found. Otherwise, they are translated from IDK codes to Norway codes.
|
|
//
|
|
//***************************************************************************
|
|
void CNrwyadCtrl::GetFileAttributes()
|
|
{
|
|
ResetStatus();
|
|
UINT nHelpId = 0;
|
|
|
|
if (m_szImage.IsEmpty()) // If no image, set all unk. and return
|
|
return;
|
|
|
|
CString SourceObj = m_szImage;
|
|
long lStat = 0;
|
|
|
|
FIO_INFO_CGBW FioInfoCgbw;
|
|
FIO_INFORMATION FioInformation;
|
|
|
|
// Empty the input/output structures
|
|
memset( (LPSTR)&FioInfoCgbw, 0, sizeof( FIO_INFO_CGBW));
|
|
memset( (LPSTR)&FioInformation, 0, sizeof( FIO_INFORMATION));
|
|
|
|
// Set current image and page number
|
|
FioInformation.filename = SourceObj.GetBuffer( MAXFILESPECLENGTH);
|
|
FioInformation.page_number = (UINT)m_lPageNum;
|
|
// Get info
|
|
lStat = (long)IMGFileGetInfo( NULL, m_hWnd,
|
|
(LP_FIO_INFORMATION)&FioInformation,
|
|
(LP_FIO_INFO_CGBW)&FioInfoCgbw, NULL);
|
|
SourceObj.ReleaseBuffer();
|
|
#ifdef _DEBUG
|
|
if (lStat == FIO_INVALID_WINDOW_HANDLE)
|
|
TRACE1("Admin Control GetFileAttibutes - Invalid Window: 0x%04X\n", m_hWnd);
|
|
#endif
|
|
m_bExist = FALSE;
|
|
if (lStat == (long)FIO_FILE_NOEXIST) // File does not exist
|
|
{
|
|
ResetStatus();
|
|
m_nPageType = IMAGE_PAGETYPE_UNKNOWN;
|
|
m_nFileType = IMAGE_FILETYPE_UNKNOWN;
|
|
m_nCompType = IMAGE_COMPTYPE_UNKNOWN;
|
|
m_lCompInfo = 0L;
|
|
m_lPageCount = 0L;
|
|
m_lImageHeight = 0L;
|
|
m_lImageWidth = 0L;
|
|
m_lImageResX = 0L;
|
|
m_lImageResY = 0L;
|
|
m_lPrtEndPage = 0L;
|
|
m_lPrtStartPage = 0L;
|
|
return;
|
|
}
|
|
// If bad compression type - clarify why file is an invalid format
|
|
else if (lStat == (long) FIO_ILLEGAL_COMPRESSION_TYPE)
|
|
SetPrivateStatusCode(lStat, IDS_UNKCOMPTYPE);
|
|
|
|
SetPrivateStatusCode(lStat); // Set any other status
|
|
m_bExist = TRUE;
|
|
|
|
m_lPageCount = FioInformation.page_count;
|
|
m_lPrtEndPage = m_lPageCount;
|
|
m_lPrtStartPage = 1L;
|
|
|
|
m_lImageWidth = FioInformation.horizontal_pixels;
|
|
m_lImageHeight = FioInformation.vertical_pixels;
|
|
m_lImageResX = FioInformation.horizontal_dpi;
|
|
m_lImageResY = FioInformation.vertical_dpi;
|
|
|
|
/*** File Type ***/
|
|
m_nFileType = FileType2Norway(FioInformation.file_type);
|
|
if (m_nFileType == IMAGE_FILETYPE_UNKNOWN)
|
|
{
|
|
m_szError.LoadString(IDS_UNKFILETYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDFILEFORMAT, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
/*** Page Type ***/
|
|
m_nPageType = PageType2Norway(FioInfoCgbw.image_type);
|
|
if (m_nPageType == IMAGE_PAGETYPE_UNKNOWN)
|
|
{
|
|
m_szError.LoadString(IDS_UNKPAGETYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDFILEFORMAT, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
}
|
|
|
|
// First reverse the negate bit if tiff BW file
|
|
if ((m_nFileType == IMAGE_FILETYPE_TIFF) &&
|
|
(m_nPageType == IMAGE_PAGETYPE_BW))
|
|
{
|
|
if (FioInfoCgbw.compress_info1 & FIO_NEGATE)
|
|
FioInfoCgbw.compress_info1 &= ~FIO_NEGATE;
|
|
else FioInfoCgbw.compress_info1 |= FIO_NEGATE;
|
|
}
|
|
|
|
// Compression Type
|
|
m_nCompType = CompType2Norway(FioInfoCgbw.compress_type,
|
|
FioInfoCgbw.compress_info1);
|
|
|
|
if (m_nCompType == IMAGE_COMPTYPE_UNKNOWN)
|
|
{
|
|
m_szError.LoadString(IDS_UNKCOMPTYPE);
|
|
m_lStatusCode = ErrMap::Xlate(CTL_E_INVALIDFILEFORMAT, m_szError, nHelpId, __FILE__, __LINE__);
|
|
ThrowError(m_lStatusCode, m_szError, nHelpId);
|
|
return;
|
|
}
|
|
|
|
// Compression Info
|
|
m_lCompInfo = CompInfo2Norway(FioInfoCgbw.compress_type,
|
|
FioInfoCgbw.compress_info1);
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Private Conversion Routines to convert OI constants to Norway and
|
|
// vice versa:
|
|
// FileType2Norway
|
|
// FileType2OI
|
|
// CompType2Norway
|
|
// CompType2OI
|
|
// CompInfo2Norway
|
|
// CompInfo2OI
|
|
// PageType2Norway
|
|
// ClassifyImageType (i.e. ImageType into ImageGroup)
|
|
//
|
|
// (Note there is no page type conversion since it is only needed once)
|
|
//
|
|
//***************************************************************************
|
|
|
|
// **** File Types *****
|
|
// WIISFIO1 information from OIFILE.H
|
|
// #define FIO_PIX 1 /* Not currently supported */
|
|
// #define FIO_WIF 2
|
|
// #define FIO_TIF 3
|
|
// #define FIO_BMP 4
|
|
// #define FIO_GIF 5 /* Not currently supported */
|
|
// #define FIO_UNKNOWN 7
|
|
// #define FIO_PCX 8 /* Not currently supported */
|
|
// #define FIO_DCX 9 /* Not currently supported */
|
|
|
|
// OCX - FileTypes
|
|
// 0 unknown
|
|
// 1 TIFF
|
|
// 2 AWD
|
|
// 3 Bitmap (BMP)
|
|
// 4 PCX
|
|
// 5 DCX
|
|
// 6 JPEG
|
|
|
|
short CNrwyadCtrl::FileType2Norway(WORD OIFileType)
|
|
{
|
|
switch(OIFileType)
|
|
{
|
|
case FIO_TIF:
|
|
return IMAGE_FILETYPE_TIFF;
|
|
break;
|
|
|
|
case FIO_BMP:
|
|
return IMAGE_FILETYPE_BMP;
|
|
break;
|
|
|
|
case FIO_PCX:
|
|
return IMAGE_FILETYPE_PCX;
|
|
break;
|
|
|
|
case FIO_DCX:
|
|
return IMAGE_FILETYPE_DCX;
|
|
break;
|
|
//#ifdef WITH_XIF
|
|
|
|
case FIO_XIF:
|
|
return IMAGE_FILETYPE_XIF;
|
|
break;
|
|
//#endif //WITH_XIF
|
|
|
|
case FIO_JPG:
|
|
return IMAGE_FILETYPE_JPEG;
|
|
break;
|
|
#ifdef WITH_AWD
|
|
|
|
case FIO_AWD:
|
|
return IMAGE_FILETYPE_AWD;
|
|
break;
|
|
#endif
|
|
|
|
case FIO_WIF:
|
|
case FIO_GIF:
|
|
case FIO_PIX:
|
|
default:
|
|
break;
|
|
}
|
|
return IMAGE_FILETYPE_UNKNOWN;
|
|
}
|
|
|
|
WORD CNrwyadCtrl::FileType2OI(short NorwayFileType)
|
|
{
|
|
switch(NorwayFileType)
|
|
{
|
|
case IMAGE_FILETYPE_TIFF:
|
|
return FIO_TIF;
|
|
break;
|
|
|
|
case IMAGE_FILETYPE_BMP:
|
|
return FIO_BMP;
|
|
break;
|
|
|
|
case IMAGE_FILETYPE_PCX:
|
|
return FIO_PCX;
|
|
break;
|
|
|
|
case IMAGE_FILETYPE_DCX:
|
|
return FIO_DCX;
|
|
break;
|
|
//#ifdef WITH_XIF
|
|
|
|
case IMAGE_FILETYPE_XIF:
|
|
return FIO_XIF;
|
|
break;
|
|
//#endif //WITH_XIF
|
|
|
|
case IMAGE_FILETYPE_JPEG:
|
|
return FIO_JPG;
|
|
break;
|
|
#ifdef WITH_AWD
|
|
|
|
case IMAGE_FILETYPE_AWD:
|
|
return FIO_AWD;
|
|
#endif
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return FIO_UNKNOWN;
|
|
}
|
|
|
|
// /*** Compression Types ***/
|
|
// WIISFIO1 information from OIFILE.H
|
|
// #define FIO_TYPES_MASK 0x00FF
|
|
// #define FIO_TYPES_MASK_BYTE 0xFF
|
|
// #define FIO_OD 0x00 /* No longer used */
|
|
// #define FIO_0D 0x00 /* Uncompressed coding */
|
|
// #define FIO_1D 0x01 /* CCITT Group 3 1d coding */
|
|
// #define FIO_2D 0x02 /* CCITT Group 4 2d coding */
|
|
// #define FIO_PACKED 0x04 /* PackBits coding */
|
|
// #define FIO_GLZW 0x05 /* Not currently supported */
|
|
// #define FIO_LZW 0x15 /* TIFF LZW, not supported */
|
|
// #define FIO_TJPEG 0x08 /* JPEG compression */
|
|
// #define FIO_WAVELET 0x09 /* Not currently supported */
|
|
// #define FIO_FRACTAL 0x0A /* Not currently supported */
|
|
// #define FIO_DPCM 0x0B /* Not currently supported */
|
|
|
|
// OCX - CompressionType
|
|
// 0 Unknown
|
|
// 1 No Compression
|
|
// 2 Group 3 1D FAX
|
|
// 3 Group 3 Modified Huffman
|
|
// 4 Packed Bits
|
|
// 5 Group 4 2D FAX
|
|
// 6 JPEG
|
|
|
|
short CNrwyadCtrl::CompType2Norway(WORD OICompType, WORD OICompInfo)
|
|
{
|
|
OICompType &= FIO_TYPES_MASK;
|
|
OICompInfo &= FIO_BITS_MASK;
|
|
|
|
switch ( OICompType )
|
|
{
|
|
case FIO_0D:
|
|
return IMAGE_COMPTYPE_NONE;
|
|
break;
|
|
|
|
case FIO_1D:
|
|
if (OICompInfo & (FIO_FULL_EOL)) // Difference between Group3 1D
|
|
return IMAGE_COMPTYPE_GROUP3_1D; // and Group3 Huff is EOLs
|
|
else return IMAGE_COMPTYPE_GROUP3_HUFF; // for 1D
|
|
break;
|
|
|
|
case FIO_1D2D:
|
|
return IMAGE_COMPTYPE_GROUP3_2D_FAX;
|
|
break;
|
|
|
|
case FIO_2D:
|
|
return IMAGE_COMPTYPE_GROUP4_2D;
|
|
break;
|
|
|
|
case FIO_PACKED:
|
|
return IMAGE_COMPTYPE_PACKED_BITS;
|
|
break;
|
|
|
|
case FIO_TJPEG:
|
|
return IMAGE_COMPTYPE_JPEG;
|
|
break;
|
|
|
|
case FIO_LZW:
|
|
return IMAGE_COMPTYPE_LZW;
|
|
break;
|
|
}
|
|
return IMAGE_COMPTYPE_UNKNOWN;
|
|
}
|
|
|
|
WORD CNrwyadCtrl::CompType2OI(short NorwayCompType)
|
|
{
|
|
switch ( NorwayCompType )
|
|
{
|
|
case IMAGE_COMPTYPE_NONE:
|
|
return FIO_0D;
|
|
break;
|
|
|
|
case IMAGE_COMPTYPE_GROUP3_1D:
|
|
case IMAGE_COMPTYPE_GROUP3_HUFF:
|
|
return FIO_1D;
|
|
break;
|
|
|
|
case IMAGE_COMPTYPE_GROUP3_2D_FAX:
|
|
return FIO_1D2D;
|
|
break;
|
|
|
|
case IMAGE_COMPTYPE_GROUP4_2D:
|
|
return FIO_2D;
|
|
break;
|
|
|
|
case IMAGE_COMPTYPE_PACKED_BITS:
|
|
return FIO_PACKED;
|
|
break;
|
|
|
|
case IMAGE_COMPTYPE_JPEG:
|
|
return FIO_TJPEG;
|
|
break;
|
|
|
|
case IMAGE_COMPTYPE_LZW:
|
|
return FIO_LZW;
|
|
break;
|
|
}
|
|
return FIO_UNKNOWN;
|
|
}
|
|
|
|
// /*** Compression Options ***/
|
|
// WIISFIO1 information from OIFILE.H
|
|
// #define FIO_BITS_MASK 0xFF00
|
|
// #define FIO_EOL 0x0100 /* Include/expect EOLs */
|
|
// #define FIO_PACKED_LINES 0x0200 /* Byte align new lines */
|
|
// #define FIO_PREFIXED_EOL 0x0800 /* Include/expect prefixed EOLs */
|
|
// #define FIO_COMPRESSED_LTR 0x1000 /* Bit order left to right */
|
|
// #define FIO_EXPAND_LTR 0x2000 /* Bit order left to right */
|
|
// #define FIO_NEGATE 0x8000 /* Invert black/white on expansion */
|
|
|
|
/*** Compression Option Combinations ***/
|
|
// #define FIO_FULL_LTR FIO_COMPRESSED_LTR | FIO_EXPAND_LTR
|
|
// #define FIO_FULL_EOL FIO_EOL | FIO_PREFIXED_EOL
|
|
|
|
// OCX - CompressInfo
|
|
// 0 None
|
|
// or a bitwise combination of:
|
|
// 1 EOLs (Include/expect EOLs) - not used for JPEG
|
|
// 2 Packed Lines (Byte align new lines) - not used for JPEG
|
|
// 4 Prefixed EOLs (Include/expect prefixed EOLs) - not used for JPEG
|
|
// 8 Compressed_LTR (Compressed bit order left to right) - not used for JPEG
|
|
// 16 Expanded_LTR (Expand bit order left to right) - not used for JPEG
|
|
// 32 Negate (Invert black/white on expansion) - not used for JPEG
|
|
// 64 Hi_Compression/Hi_Quality (JPEG compression only)
|
|
// 128 Hi_Compression/Med_Quality (JPEG compression only)
|
|
// 256 Hi_Compression/Low_Quality (JPEG compression only)
|
|
// 512 Med_Compression/Hi_Quality (JPEG compression only)
|
|
// 1024 Med_Compression/Med_Quality (JPEG compression only)
|
|
// 2048 Med_Compression/Low_Quality (JPEG compression only)
|
|
// 4096 Low_Compression/Hi_Quality (JPEG compression only)
|
|
// 8192 Low_Compression/Med_Quality (JPEG compression only)
|
|
// 16384 Low_Compression/Low_Quality (JPEG compression only)
|
|
|
|
long CNrwyadCtrl::CompInfo2Norway(WORD OICompType, WORD OICompInfo)
|
|
{
|
|
long lCompInfo = 0L;
|
|
|
|
if (OICompInfo == 0) // No Compression info
|
|
return lCompInfo;
|
|
|
|
// Compression type is not JPEG so options are not JPEG
|
|
if (OICompType != FIO_TJPEG)
|
|
{
|
|
OICompInfo &= FIO_BITS_MASK;
|
|
|
|
if (OICompInfo & FIO_EOL)
|
|
lCompInfo |= IMAGE_COMPINFO_EOL;
|
|
|
|
if (OICompInfo & FIO_PACKED_LINES)
|
|
lCompInfo |= IMAGE_COMPINFO_PACKED_LINES;
|
|
|
|
if (OICompInfo & FIO_PREFIXED_EOL)
|
|
lCompInfo |= IMAGE_COMPINFO_PREFIXED_EOL;
|
|
|
|
if (OICompInfo & FIO_COMPRESSED_LTR)
|
|
lCompInfo |= IMAGE_COMPINFO_COMP_LTR;
|
|
|
|
if (OICompInfo & FIO_EXPAND_LTR)
|
|
lCompInfo |= IMAGE_COMPINFO_EXP_LTR;
|
|
|
|
if (OICompInfo & FIO_NEGATE)
|
|
lCompInfo |= IMAGE_COMPINFO_NEGATE;
|
|
|
|
return lCompInfo;
|
|
}
|
|
|
|
// Otherwise, compression Options reflect Jpeg options
|
|
// Round OI value to closest Norway JPEG value.
|
|
// Get Res, Lum, and Chrom values from OI value.
|
|
// Round them to the nearest Norway value (note that
|
|
// Lum and Chrom must be the same, so if they are different,
|
|
// choose the lower value and then round to Norway high, med, low).
|
|
UINT nComp = OICompInfo >> 14;
|
|
UINT nLum = (OICompInfo >> 7) & 0x7f;
|
|
UINT nChrom = OICompInfo & 0x7f;
|
|
UINT nQual;
|
|
|
|
if (nComp > COMP_LO)
|
|
nComp = COMP_LO; // Highest Res value.
|
|
|
|
if (nLum < nChrom) // Choose highest of Lum or Chrom
|
|
nQual = nChrom;
|
|
else nQual = nLum;
|
|
|
|
// Set Quality to High, Med, or Low
|
|
if (nQual <= MAX_LO)
|
|
nQual = QUAL_LO;
|
|
else if (nQual <= MAX_MD)
|
|
nQual = QUAL_MD;
|
|
else nQual = QUAL_HI;
|
|
|
|
if (nComp == COMP_HI)
|
|
{
|
|
if (nQual == QUAL_HI)
|
|
lCompInfo = IMAGE_COMPINFO_HICMP_HIQ;
|
|
else if (nQual == QUAL_MD)
|
|
lCompInfo = IMAGE_COMPINFO_HICMP_MEDQ;
|
|
else lCompInfo = IMAGE_COMPINFO_HICMP_LOWQ;
|
|
}
|
|
else if (nComp == COMP_MD)
|
|
{
|
|
if (nQual == QUAL_HI)
|
|
lCompInfo = IMAGE_COMPINFO_MEDCMP_HIQ;
|
|
else if (nQual == QUAL_MD)
|
|
lCompInfo = IMAGE_COMPINFO_MEDCMP_MEDQ;
|
|
else lCompInfo = IMAGE_COMPINFO_MEDCMP_LOWQ;
|
|
}
|
|
else
|
|
{
|
|
if (nQual == QUAL_HI)
|
|
lCompInfo = IMAGE_COMPINFO_LOWCMP_HIQ;
|
|
else if (nQual == QUAL_MD)
|
|
lCompInfo = IMAGE_COMPINFO_LOWCMP_MEDQ;
|
|
else lCompInfo = IMAGE_COMPINFO_LOWCMP_LOWQ;
|
|
}
|
|
|
|
return lCompInfo;
|
|
}
|
|
|
|
WORD CNrwyadCtrl::CompInfo2OI(long NorwayCompInfo)
|
|
{
|
|
WORD wOICompInfo = 0;
|
|
|
|
if (NorwayCompInfo & IMAGE_COMPINFO_EOL)
|
|
wOICompInfo |= FIO_EOL;
|
|
|
|
if (NorwayCompInfo & IMAGE_COMPINFO_PACKED_LINES)
|
|
wOICompInfo |= FIO_PACKED_LINES;
|
|
|
|
if (NorwayCompInfo & IMAGE_COMPINFO_PREFIXED_EOL)
|
|
wOICompInfo |= FIO_PREFIXED_EOL;
|
|
|
|
if (NorwayCompInfo & IMAGE_COMPINFO_COMP_LTR)
|
|
wOICompInfo |= FIO_COMPRESSED_LTR;
|
|
|
|
if (NorwayCompInfo & IMAGE_COMPINFO_EXP_LTR)
|
|
wOICompInfo |= FIO_EXPAND_LTR;
|
|
|
|
if (NorwayCompInfo & IMAGE_COMPINFO_NEGATE)
|
|
wOICompInfo |= FIO_NEGATE;
|
|
|
|
switch (NorwayCompInfo)
|
|
{
|
|
case IMAGE_COMPINFO_HICMP_HIQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_HI,QUAL_HI,QUAL_HI);
|
|
break;
|
|
case IMAGE_COMPINFO_HICMP_MEDQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_HI,QUAL_MD,QUAL_MD);
|
|
break;
|
|
case IMAGE_COMPINFO_HICMP_LOWQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_HI,QUAL_LO,QUAL_LO);
|
|
break;
|
|
case IMAGE_COMPINFO_MEDCMP_HIQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_MD,QUAL_HI,QUAL_HI);
|
|
break;
|
|
case IMAGE_COMPINFO_MEDCMP_MEDQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_MD,QUAL_MD,QUAL_MD);
|
|
break;
|
|
case IMAGE_COMPINFO_MEDCMP_LOWQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_MD,QUAL_LO,QUAL_LO);
|
|
break;
|
|
case IMAGE_COMPINFO_LOWCMP_HIQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_LO,QUAL_HI,QUAL_HI);
|
|
break;
|
|
case IMAGE_COMPINFO_LOWCMP_MEDQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_LO,QUAL_MD,QUAL_MD);
|
|
break;
|
|
case IMAGE_COMPINFO_LOWCMP_LOWQ:
|
|
wOICompInfo = MakeJPEGInfo(COMP_LO,QUAL_LO,QUAL_LO);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return wOICompInfo;
|
|
}
|
|
|
|
/*** Page(Image) Types ***/
|
|
// WIISFIO1 information from OIFILE.H
|
|
// #define ITYPE_NONE 0
|
|
// #define ITYPE_BI_LEVEL 1 /* Black and white image */
|
|
// #define ITYPE_GRAY4 2 /* 4 bit grayscale image */
|
|
// #define ITYPE_GRAY8 3 /* 8 bit grayscale image */
|
|
// #define ITYPE_RGB24 6 /* 24 bit red, green, blue image */
|
|
// #define ITYPE_BGR24 7 /* 24 bit blue, green, red image */
|
|
// #define ITYPE_PAL8 8 /* 8 bit palettized image */
|
|
// #define ITYPE_PAL4 10 /* 4 bit palettized image */
|
|
// #define ITYPE_MAX 10
|
|
|
|
// OCX Page types
|
|
// 1 BW
|
|
// 2 GRAY4
|
|
// 3 GRAY8
|
|
// 4 PAL4
|
|
// 5 PAL8
|
|
// 6 RGB24
|
|
// 7 BGR24
|
|
|
|
short CNrwyadCtrl::PageType2Norway(WORD wImageType)
|
|
{
|
|
switch ( wImageType )
|
|
{
|
|
case ITYPE_BI_LEVEL: // Black & White
|
|
return IMAGE_PAGETYPE_BW;
|
|
|
|
case ITYPE_GRAY4:
|
|
return IMAGE_PAGETYPE_GRAY4;
|
|
|
|
case ITYPE_GRAY8:
|
|
return IMAGE_PAGETYPE_GRAY8;
|
|
|
|
case ITYPE_PAL4:
|
|
return IMAGE_PAGETYPE_PAL4;
|
|
|
|
case ITYPE_PAL8:
|
|
return IMAGE_PAGETYPE_PAL8;
|
|
|
|
case ITYPE_RGB24:
|
|
return IMAGE_PAGETYPE_RGB24;
|
|
|
|
case ITYPE_BGR24:
|
|
return IMAGE_PAGETYPE_BGR24;
|
|
} // end switch on image type
|
|
return IMAGE_PAGETYPE_UNKNOWN;
|
|
}
|
|
|
|
WORD CNrwyadCtrl::ClassifyImageType(short ImageType)
|
|
{
|
|
switch(ImageType)
|
|
{
|
|
case IMAGE_PAGETYPE_BW:
|
|
return BWFORMAT;
|
|
break;
|
|
|
|
case IMAGE_PAGETYPE_GRAY4:
|
|
case IMAGE_PAGETYPE_GRAY8:
|
|
return GRAYFORMAT;
|
|
break;
|
|
|
|
case IMAGE_PAGETYPE_PAL4:
|
|
case IMAGE_PAGETYPE_PAL8:
|
|
case IMAGE_PAGETYPE_RGB24:
|
|
case IMAGE_PAGETYPE_BGR24:
|
|
return COLORFORMAT;
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
// VerifyCompression - Make sure compression info is compatible with
|
|
// compression type according to the following table.
|
|
// Return FALSE if not.
|
|
|
|
Compression Types vs. Coding Options
|
|
|
|
Certain options are not allowed, depending upon the compression type
|
|
selected. The following table represents what is done:
|
|
|
|
|
|
Packed Lines (Not Byte Align) codes
|
|
| EOL codes
|
|
| | Begin with EOL
|
|
| | | Left to Right
|
|
| | | | Compression/Quality
|
|
| | | | | Compression Group Box
|
|
| | | | | |
|
|
| | | | | | | Negate
|
|
-------------------------------------------
|
|
Unknown | G | G | G | G | G N | G N | G |
|
|
Uncompressed | G | G | G | | G N | N | |
|
|
CCITT 1D | X | G X | G X | | G N | N | |
|
|
TIFF CCITT 1D | G | G | G | | G N | N | |
|
|
CCITT 2D | G X | G | G | | G N | N | |
|
|
Packbits | G | G | G | | G N | N | |
|
|
JPEG | G | G | G | G | N | N | G |
|
|
-------------------------------------------
|
|
|
|
G = grayed out
|
|
X = checked
|
|
N = Not Available
|
|
|
|
****************************************************************************/
|
|
|
|
BOOL CNrwyadCtrl::VerifyCompression(short sCompType, long lCompInfo)
|
|
{
|
|
// Can't specify JPEG compression options with non-JPEG compression type
|
|
if ((sCompType != IMAGE_COMPTYPE_JPEG) && // Not Jpeg
|
|
(lCompInfo & JPEG_COMPRESSION_INFO)) // But Jpeg options
|
|
return FALSE;
|
|
|
|
// Can't specify non-JPEG options with JPEG type
|
|
if ((sCompType == IMAGE_COMPTYPE_JPEG) && // Jpeg type
|
|
(lCompInfo & NONJPEG_COMPRESSION_INFO)) // Non Jpeg options
|
|
return FALSE;
|
|
|
|
// CompressionType Group3 1D has full EOLs by definition
|
|
if ((sCompType == IMAGE_COMPTYPE_GROUP3_1D) && // Group3 1D
|
|
(!(lCompInfo & IMAGE_COMPINFO_EOL) || // No EOLs or
|
|
!(lCompInfo & IMAGE_COMPINFO_PREFIXED_EOL))) // No Prefixed EOLs
|
|
return FALSE;
|
|
|
|
// CompressionTypes None, Group3 Modified Huffman, and PackBits have
|
|
// no EOL or packed lines by definition
|
|
if (((sCompType == IMAGE_COMPTYPE_GROUP3_HUFF) || // Group 3 Huff
|
|
(sCompType == IMAGE_COMPTYPE_PACKED_BITS) || // Packed Bits or
|
|
(sCompType == IMAGE_COMPTYPE_NONE)) && // No Compression type, but
|
|
(lCompInfo & (IMAGE_COMPINFO_EOL | // Eols or
|
|
IMAGE_COMPINFO_PREFIXED_EOL | // Prefixed Eols or
|
|
IMAGE_COMPINFO_PACKED_LINES))) // Packed lines specified
|
|
return FALSE;
|
|
|
|
// PackedBits cannot be compressed in reversed order
|
|
if ((sCompType == IMAGE_COMPTYPE_PACKED_BITS) &&
|
|
(lCompInfo & IMAGE_COMPINFO_COMP_LTR))
|
|
return FALSE;
|
|
|
|
// CompressionType Group4 2D has Packed lines and no EOLs by definition
|
|
if ((sCompType == IMAGE_COMPTYPE_GROUP4_2D) && // Group 4 2D
|
|
(!(lCompInfo & IMAGE_COMPINFO_PACKED_LINES) || // but No Packed lines or
|
|
(lCompInfo & (IMAGE_COMPINFO_EOL | // One of the EOLs is
|
|
IMAGE_COMPINFO_PREFIXED_EOL)))) // specified
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//****************************************************************************
|
|
//
|
|
// VerifyPageAndComp - Make sure compression type is compatible with
|
|
// page type. Return FALSE if they are not.
|
|
//
|
|
//****************************************************************************
|
|
BOOL CNrwyadCtrl::VerifyPageAndComp(short sPageType, short sCompType)
|
|
{
|
|
if ((sPageType == IMAGE_PAGETYPE_BW) && // BW format
|
|
(sCompType == IMAGE_COMPTYPE_JPEG)) // but JPEG compression = error
|
|
return FALSE;
|
|
if ((sPageType != IMAGE_PAGETYPE_BW) && // Color or Gray format
|
|
(sCompType != IMAGE_COMPTYPE_JPEG) &&
|
|
(sCompType != IMAGE_COMPTYPE_NONE)) // but not jpeg or none = error
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|