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.
1330 lines
40 KiB
1330 lines
40 KiB
//=============================================================================
|
|
// (c) Copyright Wang Laboratories, Inc. 1993 All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
// Project: Norway - Image Editor
|
|
//
|
|
// Component: CIEditDoc
|
|
//
|
|
// File Name: docpage.cpp
|
|
//
|
|
// Class: CIEditDoc
|
|
//
|
|
// Functions:
|
|
//
|
|
// Remarks: This file is the continuation of the ieditdoc.cpp.
|
|
//-----------------------------------------------------------------------------
|
|
// Maintenance Log:
|
|
/*
|
|
$Header: S:\products\wangview\norway\iedit95\docpage.cpv 1.86 04 Apr 1996 16:58:06 GMP $
|
|
$Log: S:\products\wangview\norway\iedit95\docpage.cpv $
|
|
|
|
Rev 1.86 04 Apr 1996 16:58:06 GMP
|
|
removed caching
|
|
|
|
Rev 1.85 04 Apr 1996 14:57:08 GMP
|
|
in convert page, allways get compression info from edit ocx and if ok button
|
|
clicked, save temp file.
|
|
|
|
Rev 1.84 16 Feb 1996 10:01:10 MMB
|
|
added AFX_THREADPROC cast to AfxBeginThread
|
|
|
|
Rev 1.83 22 Jan 1996 15:13:02 GMP
|
|
don't allow PageGoback if only one page.
|
|
|
|
Rev 1.82 22 Jan 1996 10:47:24 GMP
|
|
change paint parm from FALSE to TRUE in ConvertPage.
|
|
|
|
Rev 1.81 09 Jan 1996 13:57:10 GSAGER
|
|
added new thumbnail code to check for null thumbnail pointer
|
|
|
|
Rev 1.80 21 Dec 1995 14:37:12 GMP
|
|
prompt user to be sure they want to delete page.
|
|
|
|
Rev 1.79 13 Dec 1995 12:32:32 MMB
|
|
partial fix for zoom bullet
|
|
|
|
Rev 1.78 06 Dec 1995 11:08:40 LMACLENNAN
|
|
back from VC++2.2
|
|
|
|
Rev 1.75 06 Dec 1995 10:50:16 LMACLENNAN
|
|
use IMG_MFC_40 at CachePage for compatible 2.2/4.0 code
|
|
|
|
Rev 1.74 06 Dec 1995 10:27:30 LMACLENNAN
|
|
disable convert menu pick if in thumbnail view
|
|
|
|
Rev 1.73 30 Nov 1995 17:25:48 JPRATT
|
|
changed cachepage to return without creating thread to cache image page
|
|
because of problem with using threads to call methods in ocxs
|
|
|
|
Rev 1.72 28 Nov 1995 10:39:40 MMB
|
|
change print calls to send the original filename also
|
|
|
|
Rev 1.71 22 Nov 1995 13:24:56 MMB
|
|
after convert is done check if resolution conversion had taken place and
|
|
if yes - adjust to the new zoom factor
|
|
|
|
Rev 1.70 17 Nov 1995 17:07:28 LMACLENNAN
|
|
propsheet now back to off the stack - not NEW'd
|
|
|
|
Rev 1.69 10 Nov 1995 15:01:20 GMP
|
|
don't cache page in debug mode. It crashes with MSVC 2.2.
|
|
|
|
Rev 1.68 09 Nov 1995 15:15:16 LMACLENNAN
|
|
from VC++4.0
|
|
|
|
Rev 1.73 07 Nov 1995 08:36:40 LMACLENNAN
|
|
no longer call InternalSaveModified(1) for page-convert
|
|
|
|
Rev 1.72 06 Nov 1995 18:22:50 GMP
|
|
disable Insert and Append popup menu picks if read only.
|
|
|
|
Rev 1.71 03 Nov 1995 18:02:08 MMB
|
|
change CachePage to accept string reference instead of string on the stack
|
|
|
|
Rev 1.70 31 Oct 1995 16:00:56 GMP
|
|
in SetPageTo replace code that clears selection rect with call to
|
|
ClearSelectionRect.
|
|
|
|
Rev 1.69 31 Oct 1995 15:47:50 LMACLENNAN
|
|
tracing stmts
|
|
|
|
Rev 1.68 27 Oct 1995 16:44:42 GMP
|
|
SetInitDir to the dir of selected file in insert or append page.
|
|
|
|
Rev 1.67 25 Oct 1995 10:52:04 GMP
|
|
if convert page is done while in thumbnail only view, save changes to temp
|
|
file.
|
|
|
|
Rev 1.66 24 Oct 1995 09:30:36 JPRATT
|
|
updates setpageto to cache the next or previous page
|
|
added the member functions cachepage and createcachepage
|
|
|
|
Rev 1.65 19 Oct 1995 15:28:36 GMP
|
|
update zoom display in toolbar when changing pages.
|
|
|
|
Rev 1.64 18 Oct 1995 15:40:38 LMACLENNAN
|
|
do 'delete' for the 'new' in page converrt
|
|
|
|
Rev 1.63 17 Oct 1995 16:38:52 JPRATT
|
|
modified OnPageAppend, OnPageDelete, OnPageConvert, OnPageInsertExistingPage
|
|
OnPageAppendExistingPage to call InternalSaveModified with new parameter
|
|
value to support creating temporary files when the document is modified
|
|
|
|
Rev 1.62 17 Oct 1995 15:09:56 GMP
|
|
fixed OnPageConvert bug that was causing the compression to be lost on
|
|
new images.
|
|
|
|
Rev 1.61 10 Oct 1995 13:47:52 JPRATT
|
|
VC++ 4.0 update
|
|
|
|
|
|
Rev 1.60 21 Sep 1995 14:17:28 LMACLENNAN
|
|
dirty for page convert
|
|
|
|
Rev 1.59 20 Sep 1995 13:42:54 MMB
|
|
added bMustDisplay
|
|
|
|
Rev 1.58 18 Sep 1995 15:25:54 MMB
|
|
fix convert bug in settings
|
|
|
|
Rev 1.57 15 Sep 1995 14:31:48 MMB
|
|
remove read only picks from Insert & Append
|
|
|
|
Rev 1.56 15 Sep 1995 14:20:10 GMP
|
|
Put up hourglass when deleting page. fixes 4308.
|
|
|
|
Rev 1.55 13 Sep 1995 09:43:18 MMB
|
|
changed PageStatus enabling on Pauls request & removed save from print
|
|
|
|
Rev 1.54 12 Sep 1995 16:10:36 MMB
|
|
fix DeletePage availability for new documents
|
|
|
|
Rev 1.53 12 Sep 1995 14:44:54 MMB
|
|
fixed page convbug
|
|
|
|
Rev 1.52 12 Sep 1995 11:36:50 MMB
|
|
bug fixes
|
|
|
|
Rev 1.51 08 Sep 1995 16:01:22 GMP
|
|
added m_bDlgUp wrapper around dlgs for F1 help.
|
|
|
|
Rev 1.50 07 Sep 1995 16:29:46 MMB
|
|
performance for AWD zoomfactor stuff
|
|
|
|
Rev 1.49 06 Sep 1995 10:23:08 MMB
|
|
fixed bug in delete page
|
|
|
|
Rev 1.48 06 Sep 1995 09:46:32 GMP
|
|
Set theApp.m_bDlgUp to TRUE when opening GoTo dlg so that OnHelp function
|
|
will put up the appropriate kind of help.
|
|
|
|
Rev 1.47 05 Sep 1995 14:50:42 LMACLENNAN
|
|
allow thumbs now for OLE
|
|
|
|
Rev 1.46 05 Sep 1995 10:25:38 MMB
|
|
remember the compression type&info that were set by the user when he did
|
|
page convert
|
|
|
|
Rev 1.45 02 Sep 1995 16:31:22 JPRATT
|
|
move check for thumbnail initialized into the !IsEmbed state
|
|
instead of the Embed path (thumbanails not used when embedding
|
|
|
|
Rev 1.44 02 Sep 1995 13:49:52 MMB
|
|
fix new blank doc bugs
|
|
|
|
Rev 1.43 29 Aug 1995 15:15:56 MMB
|
|
added dynamic view mode
|
|
|
|
Rev 1.42 27 Aug 1995 14:01:54 MMB
|
|
fix bug so that the global modification flag is set after Insert, Append &
|
|
Delete
|
|
|
|
Rev 1.41 26 Aug 1995 16:30:36 LMACLENNAN
|
|
test if annot/image selections there before deselcting them
|
|
|
|
Rev 1.40 25 Aug 1995 15:08:56 MMB
|
|
reset some Admin Image stuff & set selection rect values
|
|
|
|
Rev 1.38 25 Aug 1995 10:25:26 MMB
|
|
move to document model
|
|
|
|
Rev 1.37 24 Aug 1995 16:20:30 MMB
|
|
changed from default of TIFF to sFileType
|
|
|
|
Rev 1.36 24 Aug 1995 11:53:30 LMACLENNAN
|
|
last copy had syntax error
|
|
|
|
Rev 1.35 24 Aug 1995 11:31:22 LMACLENNAN
|
|
Oledirty for append, Miki convert changes
|
|
|
|
Rev 1.34 22 Aug 1995 10:52:24 LMACLENNAN
|
|
deselect annotations just before page move
|
|
|
|
Rev 1.33 14 Aug 1995 13:53:04 LMACLENNAN
|
|
use GetAppToolbar
|
|
|
|
Rev 1.32 11 Aug 1995 13:47:08 MMB
|
|
remove question for save from page-convert
|
|
|
|
Rev 1.31 11 Aug 1995 09:07:44 MMB
|
|
add new additional dbg error info
|
|
|
|
Rev 1.30 10 Aug 1995 16:17:04 MMB
|
|
add generation of thumbs when going to another page in one page mode
|
|
|
|
Rev 1.29 10 Aug 1995 12:53:24 LMACLENNAN
|
|
rename SelectionActive -> State
|
|
|
|
Rev 1.28 09 Aug 1995 11:34:20 LMACLENNAN
|
|
new OleDirtyset for delete
|
|
|
|
Rev 1.27 08 Aug 1995 16:35:32 MMB
|
|
fix Append bug
|
|
|
|
Rev 1.26 07 Aug 1995 10:49:14 MMB
|
|
gix compile bug
|
|
|
|
Rev 1.25 04 Aug 1995 09:33:10 LMACLENNAN
|
|
remove srvritem.h
|
|
|
|
Rev 1.24 03 Aug 1995 14:55:12 MMB
|
|
fixed updating zoom factor when a new page is displayed
|
|
|
|
Rev 1.23 02 Aug 1995 14:14:48 MMB
|
|
changed Print to PrintImage for new Image Edit OCX
|
|
|
|
Rev 1.22 02 Aug 1995 11:22:36 MMB
|
|
added new error handling mechanism
|
|
|
|
Rev 1.21 31 Jul 1995 13:58:50 LMACLENNAN
|
|
remove old lines for SetOleState
|
|
|
|
Rev 1.20 28 Jul 1995 16:09:10 LMACLENNAN
|
|
update oledirytset
|
|
|
|
Rev 1.19 27 Jul 1995 15:14:38 MMB
|
|
fix bug where we were checking for page count > 0 - dont need it!
|
|
|
|
Rev 1.18 27 Jul 1995 13:40:50 MMB
|
|
added code to disable Append - Insert Existing page when the opened file is
|
|
read only
|
|
|
|
Rev 1.17 26 Jul 1995 15:42:48 LMACLENNAN
|
|
minor change to setpageto for OLE
|
|
|
|
Rev 1.16 19 Jul 1995 10:23:48 LMACLENNAN
|
|
re-enable selection boxes after page moves
|
|
|
|
Rev 1.15 18 Jul 1995 16:31:56 MMB
|
|
check for new CANCELPRESSED define in Admin
|
|
|
|
Rev 1.14 12 Jul 1995 16:27:56 LMACLENNAN
|
|
update container after insert
|
|
|
|
Rev 1.13 12 Jul 1995 14:12:36 MMB
|
|
added ClearDisplay call to ImageEdit OCX before calling Admin to delete a
|
|
page
|
|
|
|
Rev 1.12 12 Jul 1995 11:13:56 MMB
|
|
move to new DispErr call
|
|
|
|
Rev 1.11 12 Jul 1995 10:43:28 LMACLENNAN
|
|
clear embedstate.KnownPage for append/insert
|
|
|
|
Rev 1.10 11 Jul 1995 14:47:14 MMB
|
|
fixed Print call into Image EditOCX to reflect new method parameters
|
|
|
|
Rev 1.9 07 Jul 1995 14:33:20 MMB
|
|
changed Convert over to use pagedll.dll - the AFXDLL
|
|
|
|
Rev 1.8 06 Jul 1995 13:53:00 LMACLENNAN
|
|
Still Fixing cross-check-in
|
|
|
|
Rev 1.7 06 Jul 1995 11:29:14 LMACLENNAN
|
|
chkout/in mistake by Miki dropped v 1.5
|
|
|
|
Rev 1.6 06 Jul 1995 09:48:54 MMB
|
|
catch errors in delete pages
|
|
|
|
Rev 1.5 06 Jul 1995 09:43:10 LMACLENNAN
|
|
Do A OleDirtyset after moving pages...
|
|
|
|
Rev 1.4 05 Jul 1995 14:13:20 MMB
|
|
changed to new Insert & Append calls in Admin OCX
|
|
|
|
Rev 1.3 29 Jun 1995 15:24:00 LMACLENNAN
|
|
no thumb for embedding, cach errors
|
|
|
|
Rev 1.2 28 Jun 1995 17:13:34 LMACLENNAN
|
|
error display
|
|
|
|
Rev 1.1 27 Jun 1995 14:54:46 LMACLENNAN
|
|
look @ dynamic_doc when enableing insert/append
|
|
|
|
Rev 1.0 16 Jun 1995 07:21:36 LMACLENNAN
|
|
Initial entry
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
// ----------------------------> Includes <-------------------------------
|
|
#include "stdafx.h"
|
|
#include "IEdit.h"
|
|
|
|
#include "IEditdoc.h"
|
|
#include "cntritem.h"
|
|
#include "ocxitem.h"
|
|
#include "items.h"
|
|
#include "pagerang.h"
|
|
|
|
// ALL READY TO START ADDING ERROR CODES..
|
|
#define E_13_CODES // limits error defines to ours..
|
|
#include "error.h"
|
|
|
|
#include "wangiocx.h"
|
|
|
|
extern "C"
|
|
{
|
|
#include "oierror.h"
|
|
}
|
|
// ----------------------------> Globals <-------------------------------
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
// works with definition in ieditetc.h
|
|
#ifdef _DEBUG
|
|
#define MYTRCENTRY(str) TRACE1("In CIeDOC::%s\r\n", str);
|
|
#endif
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
// CIEditDoc Page functionality
|
|
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
|
|
//=============================================================================
|
|
// Function: OnPagePrintpage()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPagePrintpage()
|
|
{
|
|
// save the current page first
|
|
// if (!InternalSaveModified ())
|
|
// return;
|
|
|
|
// set the above information in the ImageEdit OCX
|
|
VARIANT vStartPage, vEndPage, vOutputFormat, vPrintAnnotations, evt;
|
|
// set the start and end page
|
|
vStartPage.vt = VT_I4; vEndPage.vt = VT_I4;
|
|
vStartPage.lVal = vEndPage.lVal = m_lCurrPageNumber;
|
|
// set the output format
|
|
vOutputFormat.vt = VT_ERROR;
|
|
// set the flag to print annotation or not
|
|
vPrintAnnotations.vt = VT_ERROR;
|
|
evt.vt = VT_ERROR;
|
|
|
|
// do it!
|
|
_DImagedit* pIedit = g_pAppOcxs->GetIeditDispatch();
|
|
VARIANT vTitle; vTitle.vt = VT_BSTR;
|
|
|
|
TRY
|
|
{
|
|
CString szTmp1;
|
|
|
|
if (m_eCurrentAppDocStatus == Dynamic_Document)
|
|
{
|
|
CString szTmp, szTmp1;
|
|
szTmp.LoadString (IDR_MAINFRAME);
|
|
AfxExtractSubString (szTmp1, szTmp, 1); // extract the name of a new document
|
|
|
|
vTitle.bstrVal = szTmp1.AllocSysString ();
|
|
pIedit->PrintImageAs (vStartPage, vEndPage, vOutputFormat, vPrintAnnotations, vTitle, evt, evt, evt);
|
|
SysFreeString (vTitle.bstrVal);
|
|
}
|
|
else
|
|
{
|
|
if (m_szInternalObjDisplayed.IsEmpty ())
|
|
{
|
|
pIedit->PrintImage (vStartPage, vEndPage, vOutputFormat, vPrintAnnotations, evt, evt, evt);
|
|
}
|
|
else
|
|
{
|
|
LPTSTR lpFile = szTmp1.GetBuffer (_MAX_FNAME);
|
|
GetFileTitle (m_szCurrObjDisplayed, lpFile, _MAX_FNAME);
|
|
szTmp1.ReleaseBuffer ();
|
|
vTitle.bstrVal = szTmp1.AllocSysString ();
|
|
pIedit->PrintImageAs (vStartPage, vEndPage, vOutputFormat, vPrintAnnotations, vTitle, evt, evt, evt);
|
|
SysFreeString (vTitle.bstrVal);
|
|
}
|
|
}
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
g_pErr->PutErr (ErrorInImageEdit);
|
|
g_pErr->SpecifyLocation (__FILE__, __LINE__);
|
|
g_pErr->HandlePrintPageError ();
|
|
}
|
|
END_CATCH
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnUpdatePagePrintpage(CCmdUI* pCmdUI)
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnUpdatePagePrintpage(CCmdUI* pCmdUI)
|
|
{
|
|
if (m_eCurrentAppDocStatus == No_Document)
|
|
pCmdUI->Enable (FALSE);
|
|
else
|
|
pCmdUI->Enable (TRUE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPageDelete()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPageDelete()
|
|
{
|
|
if (AfxMessageBox (IDS_DELETEPAGE_WARNING, MB_YESNO | MB_ICONEXCLAMATION) != IDYES)
|
|
{
|
|
return;
|
|
}
|
|
|
|
BeginWaitCursor ();
|
|
|
|
// Set option to '1' to force temp file creation now
|
|
if (!InternalSaveModified (1))
|
|
return;
|
|
|
|
_DImagedit* pIedit = g_pAppOcxs->GetIeditDispatch();
|
|
// clear the display - else the page cannot be deleted
|
|
TRY
|
|
{
|
|
pIedit->ClearDisplay ();
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
}
|
|
END_CATCH
|
|
|
|
// call the Admin OCX to delete this page
|
|
_DNrwyad* pAdmin = g_pAppOcxs->GetAdminDispatch ();
|
|
TRY
|
|
{
|
|
pAdmin->DeletePages (m_lCurrPageNumber, 1);
|
|
// set the globally modified flag to TRUE - this will make us prompt for Save at exit
|
|
m_bWasModified = ImageModifiedByUser;
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
EndWaitCursor();
|
|
g_pErr->HandleDeletePageError ();
|
|
ClearDocument ();
|
|
return;
|
|
}
|
|
END_CATCH
|
|
|
|
EndWaitCursor();
|
|
if (!ReDisplayImageFile (ON_DELETE, m_lCurrPageNumber, 1))
|
|
{
|
|
g_pErr->HandleDeletePageError ();
|
|
ClearDocument ();
|
|
return;
|
|
}
|
|
|
|
// For OLE, as we Delete, make the container update himself
|
|
OleDirtyset(OLEDIRTY_PAGDEL);
|
|
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnUpdatePageDelete(CCmdUI* pCmdUI)
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnUpdatePageDelete(CCmdUI* pCmdUI)
|
|
{
|
|
if (m_eCurrentAppDocStatus != No_Document && m_lPageCount > 1 && m_eFileStatus != ReadOnly)
|
|
pCmdUI->Enable (TRUE);
|
|
else
|
|
pCmdUI->Enable (FALSE);
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
//this is a modified version of an MSJ sample routine for finding a
|
|
//popup sub menu in a menu when you know an ID of one of the picks in the
|
|
//parent menu.
|
|
//---------------------------------------------------------------------
|
|
CMenu* CIEditDoc::FindPopupMenuFromID(CMenu* pMenu, UINT nID)
|
|
{
|
|
ASSERT_VALID(pMenu);
|
|
// Walk through all items, looking for ID match.
|
|
UINT nItems = pMenu->GetMenuItemCount();
|
|
for (int iItem = 0; iItem < (int)nItems; iItem++)
|
|
{
|
|
CMenu* pPopup = pMenu->GetSubMenu(iItem);
|
|
if (pPopup != NULL)
|
|
{
|
|
// Find child pop-up menu.
|
|
pPopup = FindPopupMenuFromID(pPopup, nID);
|
|
// check popups on this popup
|
|
if (pPopup != NULL)
|
|
return pPopup;
|
|
}
|
|
else if (pMenu->GetMenuItemID(iItem) == nID)
|
|
{
|
|
// It is a normal item inside our pop-up menu.
|
|
//pMenu = CMenu::FromHandlePermanent(pMenu->m_hMenu);
|
|
return pMenu;
|
|
}
|
|
}
|
|
// Not found.
|
|
return NULL;
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnUpdatePageConvert(CCmdUI* pCmdUI)
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnUpdatePageConvert(CCmdUI* pCmdUI)
|
|
{
|
|
BOOL enab = TRUE;
|
|
// if no doc or thumbs only, no convert is allowed
|
|
if ( (m_eCurrentAppDocStatus == No_Document) ||
|
|
(m_eCurrentView == Thumbnails_only) )
|
|
enab = FALSE;
|
|
|
|
pCmdUI->Enable (enab);
|
|
|
|
|
|
// THis code handles the enable/gray for the first-level "Insert" "Append"
|
|
// menu picks. If the inner picks were to be grayed, then the first-level
|
|
// pick is grayed, too. ITs done here in the Convert UI because these
|
|
// "Insert" and "Append" picks always appear in the same places as the
|
|
// "convert" pick.
|
|
CMenu* pMenu = CMenu::FromHandle(GetApphMenu());
|
|
if( !pMenu )
|
|
return;
|
|
CMenu* pSubMenu = FindPopupMenuFromID(pMenu, ID_PAGE_CONVERT);
|
|
if( !pSubMenu )
|
|
return;
|
|
|
|
// same test as in the CMDUI for insert/append
|
|
if (m_bCanBeMultiPage && (m_eFileStatus != ReadOnly))
|
|
{
|
|
pSubMenu->EnableMenuItem( INSERTPOS, MF_BYPOSITION | MF_ENABLED );
|
|
pSubMenu->EnableMenuItem( APPENDPOS, MF_BYPOSITION | MF_ENABLED );
|
|
}
|
|
else
|
|
{
|
|
pSubMenu->EnableMenuItem( INSERTPOS, MF_BYPOSITION | MF_GRAYED );
|
|
pSubMenu->EnableMenuItem( APPENDPOS, MF_BYPOSITION | MF_GRAYED );
|
|
}
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnUpdatePageInsertExistingpage(CCmdUI* pCmdUI)
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnUpdatePageInsertExistingpage(CCmdUI* pCmdUI)
|
|
{
|
|
|
|
// cant be dynamic document (blank-not saved...)
|
|
if (m_bCanBeMultiPage && (m_eFileStatus != ReadOnly))
|
|
pCmdUI->Enable (TRUE);
|
|
else
|
|
pCmdUI->Enable (FALSE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnUpdatePageAppendExistingpage(CCmdUI* pCmdUI)
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnUpdatePageAppendExistingpage(CCmdUI* pCmdUI)
|
|
{
|
|
// cant be dynamic document (blank-not saved...)
|
|
if (m_bCanBeMultiPage && (m_eFileStatus != ReadOnly))
|
|
pCmdUI->Enable (TRUE);
|
|
else
|
|
pCmdUI->Enable (FALSE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPageConvert()
|
|
//-----------------------------------------------------------------------------
|
|
#include "pagedll.h"
|
|
void CIEditDoc::OnPageConvert()
|
|
{
|
|
// BeginWaitCursor ();
|
|
// Set option to '1' to force temp file creation now
|
|
// if (!InternalSaveModified (1))
|
|
// {
|
|
// EndWaitCursor ();
|
|
// return;
|
|
// }
|
|
// EndWaitCursor ();
|
|
|
|
CString szTmp;
|
|
szTmp.LoadString (IDS_PAGECONVERT_DLGCAPTION);
|
|
|
|
// NOTE: Since we do the "new" we must do a delete!!!
|
|
//CPagePropSheet* pNewDlg = NULL;
|
|
//pNewDlg = new CPagePropSheet(szTmp, theApp.m_pMainWnd);
|
|
CPagePropSheet NewDlg (szTmp, theApp.m_pMainWnd);
|
|
|
|
// the order of the property pages on the dialog box are : FileType, Color, Compression,
|
|
// Resolution & Size
|
|
NewDlg.AddColorPage ();
|
|
NewDlg.AddCompressionPage ();
|
|
NewDlg.AddResolutionPage ();
|
|
|
|
_DImagedit* pIedit = g_pAppOcxs->GetIeditDispatch ();
|
|
// set up the defaults in the dialog box - no error checking here MUST PASS!!
|
|
short sFileType = pIedit->GetFileType(),
|
|
sPageType = pIedit->GetPageType ();
|
|
long lXRes = pIedit->GetImageResolutionX(),
|
|
lYRes = pIedit->GetImageResolutionY();
|
|
short CompType;
|
|
long lCompInfo;
|
|
|
|
|
|
lCompInfo = pIedit->GetCompressionInfo ();
|
|
CompType = pIedit->GetCompressionType ();
|
|
|
|
NewDlg.SetDefaultFileType (sFileType);
|
|
NewDlg.SetDefaultColor (sPageType);
|
|
NewDlg.SetDefaultResolution (lXRes, lYRes);
|
|
NewDlg.SetDefaultCompType (CompType);
|
|
NewDlg.SetDefaultCompOpts (lCompInfo);
|
|
|
|
theApp.m_bDlgUp = TRUE;
|
|
if (NewDlg.DoModal() == IDOK)
|
|
{
|
|
theApp.m_bDlgUp = FALSE;
|
|
lXRes = NewDlg.GetXRes ();
|
|
lYRes = NewDlg.GetYRes ();
|
|
sPageType = NewDlg.GetColor();
|
|
CompType = NewDlg.GetCompType();
|
|
lCompInfo = NewDlg.GetCompOpts();
|
|
|
|
// now that we are done, kill it...
|
|
//delete pNewDlg;
|
|
//pNewDlg = NULL;
|
|
|
|
BeginWaitCursor ();
|
|
|
|
VARIANT vPaint;
|
|
vPaint.vt = VT_BOOL; vPaint.bVal = TRUE;
|
|
BOOL bResConverted = FALSE;
|
|
|
|
TRY
|
|
{
|
|
pIedit->SetAutoRefresh (FALSE);
|
|
if (pIedit->GetPageType () != sPageType)
|
|
// convert the pagetype first
|
|
pIedit->ConvertPageType (sPageType, vPaint);
|
|
// set the new image resolution
|
|
if (pIedit->GetImageResolutionX () != lXRes)
|
|
{
|
|
pIedit->SetImageResolutionX (lXRes);
|
|
bResConverted = TRUE;
|
|
}
|
|
if (pIedit->GetImageResolutionY () != lYRes)
|
|
{
|
|
pIedit->SetImageResolutionY (lYRes);
|
|
bResConverted = TRUE;
|
|
}
|
|
// redisplay the image
|
|
pIedit->Refresh ();
|
|
if (bResConverted)
|
|
m_eFitTo = g_pAppOcxs->GetZoomFactorType (m_fZoomFactor);
|
|
pIedit->SetAutoRefresh (TRUE);
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
// if you dontlet it go to bottom to do Delete..do here
|
|
g_pErr->PutErr (ErrorInImageEdit);
|
|
g_pErr->HandlePageConvertError ();
|
|
EndWaitCursor ();
|
|
}
|
|
END_CATCH
|
|
|
|
// store the filetype & compression parameters away - we will use them when
|
|
// we save this image to disk
|
|
m_CompStruct.sCompType = CompType;
|
|
m_CompStruct.lCompInfo = lCompInfo;
|
|
m_CompStruct.sFileType = sFileType;
|
|
|
|
//Save info in temp file
|
|
if (!InternalSaveModified (1))
|
|
{
|
|
return;
|
|
}
|
|
|
|
//Mark image as modified because SaveModified will have restored
|
|
//sCompType to -1
|
|
m_bWasModified = ImageModifiedByUser;
|
|
|
|
// For OLE, as we convert, make the container update himself
|
|
OleDirtyset(OLEDIRTY_CONVERT);
|
|
//if thumbnail only view we need to save the temp file to force the page
|
|
//view to show our changes.
|
|
if (m_eCurrentView == Thumbnails_only)
|
|
InternalSaveModified (1);
|
|
EndWaitCursor ();
|
|
}
|
|
else // bozo does not want to do the new page after all!
|
|
{
|
|
theApp.m_bDlgUp = FALSE;
|
|
}
|
|
|
|
|
|
//if (NULL != pNewDlg)
|
|
// delete pNewDlg;
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPageInsertExistingpage()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPageInsertExistingpage()
|
|
{
|
|
// Set option to '1' to force temp file creation now
|
|
if (!InternalSaveModified (1))
|
|
return;
|
|
|
|
// select a file - bring up the Admin OCX dialog box
|
|
CString szTitle;
|
|
szTitle.LoadString (IDS_INSERT_DLG_TITLE);
|
|
|
|
_DNrwyad* pAdmDisp = g_pAppOcxs->GetAdminDispatch();
|
|
CString szFile = pAdmDisp->GetImage (), szTmp1;
|
|
|
|
szTmp1.Empty();
|
|
// set to NULL so that no file shows up in the file name field
|
|
pAdmDisp->SetImage (szTmp1);
|
|
|
|
if (!AdminShowFileDialogBox (szTitle, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY))
|
|
{
|
|
g_pErr->HandleFilePickError ();
|
|
return;
|
|
}
|
|
|
|
if (pAdmDisp->GetStatusCode () == WICTL_E_CANCELPRESSED)
|
|
{
|
|
pAdmDisp->SetImage (szFile);
|
|
return;
|
|
}
|
|
|
|
|
|
// get the filename and number of pages from the Admin OCX
|
|
szFile = pAdmDisp->GetImage ();
|
|
if (szFile.CompareNoCase (m_szCurrObjDisplayed) == 0)
|
|
{
|
|
AfxMessageBox (IDS_E_INSERT_CANNOTINSERTFILEINTOITSELF, MB_OK | MB_ICONSTOP);
|
|
return;
|
|
}
|
|
int i = szFile.ReverseFind (_T('\\'));
|
|
szTmp1 = szFile.Left (i);
|
|
SetInitialPath (szTmp1);
|
|
|
|
long lPages = pAdmDisp->GetPageCount ();
|
|
|
|
// show the page number dialog box to allow the user to select the pages
|
|
// he wants to append
|
|
CPageRangeDlg PageRange (lPages);
|
|
|
|
PageRange.SetDialogTitle (szTitle);
|
|
|
|
szTitle = (LPCTSTR) NULL;
|
|
AfxFormatString1 (szTitle, IDS_INSERT_INFO, szFile);
|
|
PageRange.SetInfoText (szTitle);
|
|
|
|
theApp.m_bDlgUp = TRUE;
|
|
if (PageRange.DoModal () == IDOK)
|
|
{
|
|
theApp.m_bDlgUp = FALSE;
|
|
TRY // added 6/29/95 LDM
|
|
{
|
|
// set the currently displayed image as the Image prop in Admin OCX
|
|
if (!m_szInternalObjDisplayed.IsEmpty())
|
|
pAdmDisp->SetImage (m_szInternalObjDisplayed);
|
|
else
|
|
pAdmDisp->SetImage (m_szCurrObjDisplayed);
|
|
|
|
// call the Append method appropriately
|
|
VARIANT evt;
|
|
evt.vt = VT_ERROR;
|
|
lPages = (PageRange.m_ToPage - PageRange.m_FromPage + 1);
|
|
|
|
pAdmDisp->Insert (szFile, PageRange.m_FromPage, m_lCurrPageNumber, lPages, evt, evt);
|
|
// set the globally modified flag to TRUE - this will make us prompt for Save at exit
|
|
m_bWasModified = ImageModifiedByUser;
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
g_pErr->PutErr (ErrorInAdmin);
|
|
g_pErr->HandlePageInsertExistingError ();
|
|
return;
|
|
}
|
|
END_CATCH
|
|
|
|
|
|
// reset the Image Edit OCX & the Thumbnail OCX
|
|
if (!ReDisplayImageFile (ON_INSERT, m_lCurrPageNumber, lPages))
|
|
{
|
|
g_pErr->HandlePageInsertExistingError ();
|
|
ClearDocument ();
|
|
return;
|
|
}
|
|
|
|
// For OLE, as we Insert, make the container update himself
|
|
OleDirtyset(OLEDIRTY_PAGINS);
|
|
}
|
|
theApp.m_bDlgUp = FALSE;
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPageAppendExistingpage()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPageAppendExistingpage()
|
|
{
|
|
// Set option to '1' to force temp file creation now
|
|
if (!InternalSaveModified (1))
|
|
return;
|
|
|
|
// select a file - bring up the Admin OCX dialog box
|
|
CString szTitle;
|
|
szTitle.LoadString (IDS_APPEND_DLG_TITLE);
|
|
|
|
_DNrwyad* pAdmDisp = g_pAppOcxs->GetAdminDispatch();
|
|
CString szFile = pAdmDisp->GetImage (), szTmp1;
|
|
szTmp1.Empty();
|
|
pAdmDisp->SetImage (szTmp1);
|
|
|
|
if (!AdminShowFileDialogBox (szTitle, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY))
|
|
{
|
|
g_pErr->HandleFilePickError ();
|
|
return;
|
|
}
|
|
|
|
if (pAdmDisp->GetStatusCode () == WICTL_E_CANCELPRESSED)
|
|
{
|
|
pAdmDisp->SetImage (szFile);
|
|
return;
|
|
}
|
|
// user has now picked a file - let's deal with it!
|
|
|
|
// get the filename and number of pages from the Admin OCX
|
|
szFile = pAdmDisp->GetImage ();
|
|
if (szFile.CompareNoCase (m_szCurrObjDisplayed) == 0)
|
|
{
|
|
AfxMessageBox (IDS_E_APPEND_CANNOTAPPENDFILETOITSELF, MB_OK | MB_ICONSTOP);
|
|
return;
|
|
}
|
|
int i = szFile.ReverseFind (_T('\\'));
|
|
szTmp1 = szFile.Left (i);
|
|
SetInitialPath (szTmp1);
|
|
|
|
long lPages = pAdmDisp->GetPageCount ();
|
|
|
|
// show the page number dialog box to allow the user to select the pages
|
|
// he wants to append
|
|
CPageRangeDlg PageRange (lPages);
|
|
|
|
PageRange.SetDialogTitle (szTitle);
|
|
|
|
szTitle = (LPCTSTR) NULL;
|
|
AfxFormatString1 (szTitle, IDS_APPEND_INFO, szFile);
|
|
PageRange.SetInfoText (szTitle);
|
|
|
|
theApp.m_bDlgUp = TRUE;
|
|
if (PageRange.DoModal () == IDOK)
|
|
{
|
|
theApp.m_bDlgUp = FALSE;
|
|
TRY // added 6/29/95 LDM
|
|
{
|
|
// set the currently displayed image as the Image prop in Admin OCX
|
|
if (!m_szInternalObjDisplayed.IsEmpty())
|
|
pAdmDisp->SetImage (m_szInternalObjDisplayed);
|
|
else
|
|
pAdmDisp->SetImage (m_szCurrObjDisplayed);
|
|
|
|
// call the Append method appropriately
|
|
VARIANT evt;
|
|
evt.vt = VT_ERROR;
|
|
lPages = (PageRange.m_ToPage - PageRange.m_FromPage + 1);
|
|
|
|
pAdmDisp->Append (szFile, PageRange.m_FromPage, lPages, evt, evt);
|
|
// set the globally modified flag to TRUE - this will make us prompt for Save at exit
|
|
m_bWasModified = ImageModifiedByUser;
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
g_pErr->PutErr (ErrorInAdmin);
|
|
g_pErr->HandlePageAppendExistingError ();
|
|
return;
|
|
}
|
|
END_CATCH
|
|
|
|
// reset the Image Edit OCX & the Thumbnail OCX
|
|
if (!ReDisplayImageFile (ON_APPEND, m_lPageCount + 1, lPages))
|
|
{
|
|
g_pErr->HandlePageAppendExistingError ();
|
|
ClearDocument ();
|
|
}
|
|
|
|
// FOR OLE, force update when we close file if not done already...
|
|
OleDirtyset(OLEDIRTY_PAGAPP);
|
|
}
|
|
theApp.m_bDlgUp = FALSE;
|
|
}
|
|
|
|
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
|
* PAGE MOVEMENT SECTION - these routines will handle movement within a file
|
|
* from page to page
|
|
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
|
|
//=============================================================================
|
|
// Function: OnUpdatePageRanges(CCmdUI* pCmdUI)
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnUpdatePageRanges(CCmdUI* pCmdUI)
|
|
{
|
|
// if we don't even have a document ...
|
|
if (m_eCurrentAppDocStatus == No_Document)
|
|
pCmdUI->Enable (FALSE);
|
|
else
|
|
{
|
|
switch (pCmdUI->m_nID)
|
|
{
|
|
case ID_PAGE_NEXT :
|
|
pCmdUI->Enable (m_lCurrPageNumber != m_lPageCount ? TRUE : FALSE);
|
|
break;
|
|
case ID_PAGE_PREVIOUS :
|
|
pCmdUI->Enable (m_lCurrPageNumber != 1 ? TRUE : FALSE);
|
|
break;
|
|
case ID_PAGE_GOTO :
|
|
pCmdUI->Enable (m_lPageCount > 1 ? TRUE : FALSE);
|
|
break;
|
|
case ID_PAGE_FIRST :
|
|
pCmdUI->Enable ((m_lCurrPageNumber != 1 && m_lPageCount > 1) ? TRUE : FALSE);
|
|
break;
|
|
case ID_PAGE_LAST :
|
|
pCmdUI->Enable ((m_lCurrPageNumber != m_lPageCount && m_lPageCount > 1) ? TRUE : FALSE);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnUpdatePageGoback(CCmdUI* pCmdUI)
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnUpdatePageGoback(CCmdUI* pCmdUI)
|
|
{
|
|
// if we don't even have a document ... or we haven't gone anywhere else yet!
|
|
if (m_eCurrentAppDocStatus == No_Document || m_lPreviousPageNumber == 0
|
|
|| m_lPageCount == 1)
|
|
pCmdUI->Enable (FALSE);
|
|
else
|
|
// okay, this guy can't seem to make up his mind
|
|
pCmdUI->Enable (TRUE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: SetPageTo (long lPage, BOOL bUpdateOnly, BOOL bHandleError, BOOL bCenterThumb)
|
|
// This function only sets the page number in the Image Edit & Thumbnail control
|
|
// to the specified number it will not set different zoom factors etc.
|
|
//
|
|
// Return values : 0 for success, else error
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CIEditDoc::SetPageTo (long lPage, BOOL bUpdateOnly, BOOL bHandleError, BOOL bCenterThumb)
|
|
{
|
|
BOOL badocx = FALSE;
|
|
_DThumb* pThmDisp;
|
|
|
|
ASSERT (lPage <= m_lPageCount);
|
|
|
|
if (lPage == m_lCurrPageNumber)
|
|
// not gonna go to the same page again!
|
|
return (TRUE);
|
|
|
|
// page to cache
|
|
|
|
#ifdef THUMBGEN
|
|
if (!OleSaveModified ())
|
|
return (FALSE);
|
|
#endif
|
|
|
|
_DImagedit* pIedDisp = g_pAppOcxs->GetIeditDispatch();
|
|
CIEMainToolBar* pToolBar = GetAppToolBar();
|
|
|
|
// ONLY FOOL WITH THUMB control if NOT EMBEDDING......
|
|
// OLETHUMB
|
|
//if (!IsitEmbed())
|
|
// {
|
|
pThmDisp = g_pAppOcxs->GetThumbDispatch();
|
|
// }
|
|
|
|
if (bUpdateOnly) goto SetPageTo_UPDATEONLY;
|
|
|
|
TRY
|
|
{
|
|
BeginWaitCursor ();
|
|
// Also, take care of annotations....
|
|
// remember orig, set selection type, draw 0, reselect
|
|
if (Annotation_Selection == m_bSelectionState)
|
|
{
|
|
ClearSelectionRect( Annotation_Selection );
|
|
m_bSelectionState = No_Selection;
|
|
}
|
|
|
|
pIedDisp->SetPage (lPage);
|
|
#ifdef THUMBGEN
|
|
m_bMustDisplay = TRUE;
|
|
#endif
|
|
if (m_eCurrentView == One_Page || m_eCurrentView == Thumbnail_and_Page)
|
|
{
|
|
// if we can see the ImageEdit control then we will have to tell it
|
|
// to update itself
|
|
_DNrwyad* pAdmin = g_pAppOcxs->GetAdminDispatch();
|
|
pIedDisp->Display ();
|
|
#ifdef THUMBGEN
|
|
m_bMustDisplay = FALSE;
|
|
#endif
|
|
m_fZoomFactor = pIedDisp->GetZoom ();
|
|
if (pAdmin->GetFileType() == AWD)
|
|
m_fOrigZoomFactor = m_fZoomFactor;
|
|
|
|
// m_eFitTo = g_pAppOcxs->GetZoomFactorType (m_fZoomFactor);
|
|
pToolBar->ShowSelectionInZoomBox (m_fZoomFactor, m_eFitTo);
|
|
}
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
EndWaitCursor ();
|
|
g_pErr->PutErr (ErrorInImageEdit);
|
|
if (bHandleError)
|
|
{
|
|
g_pErr->HandlePageMovementError ();
|
|
ClearDocument ();
|
|
}
|
|
return (FALSE);
|
|
}
|
|
END_CATCH
|
|
|
|
// ONLY FOOL WITH THUMB control if NOT EMBEDDING......
|
|
// OLETHUMB
|
|
//if (!IsitEmbed())
|
|
//{
|
|
if(pThmDisp != NULL)
|
|
{
|
|
TRY // LDM ADDED 6/28/95
|
|
{
|
|
// deselect the selected thumb
|
|
pThmDisp->DeselectAllThumbs ();
|
|
// select the new one
|
|
pThmDisp->SetThumbSelected (lPage, TRUE);
|
|
|
|
if ((m_eCurrentView == Thumbnail_and_Page || m_eCurrentView == Thumbnails_only)
|
|
&& bCenterThumb)
|
|
{
|
|
// show the selected thumb in the middle of the thumbnail OCX client rect
|
|
VARIANT Page, Option;
|
|
|
|
Page.vt = VT_I4;
|
|
Page.lVal = lPage;
|
|
Option.vt = VT_I2;
|
|
Option.iVal = CTL_THUMB_MIDDLE;
|
|
|
|
pThmDisp->DisplayThumbs (Page, Option);
|
|
}
|
|
else
|
|
{
|
|
VARIANT vPgNum; vPgNum.vt = VT_I4; vPgNum.lVal = lPage;
|
|
pThmDisp->GenerateThumb (CTL_THUMB_GENERATEIFNEEDED, vPgNum);
|
|
}
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
EndWaitCursor ();
|
|
g_pErr->PutErr (ErrorInThumbnail);
|
|
if (bHandleError)
|
|
{
|
|
g_pErr->HandlePageMovementError ();
|
|
ClearDocument ();
|
|
}
|
|
return (FALSE);
|
|
}
|
|
END_CATCH
|
|
}
|
|
//else // THIS IS AN OLE EMBEDDING SESSION...
|
|
//{
|
|
// For OLE, as we move from page to page, make the container update himself
|
|
OleDirtyset(OLEDIRTY_PAGMOV);
|
|
//}
|
|
|
|
SetPageTo_UPDATEONLY :
|
|
pToolBar->SetPageNumberInPageBox (lPage);
|
|
|
|
|
|
|
|
// all's okey-dokey
|
|
if (m_lCurrPageNumber != 0)
|
|
// save the current page number for goback functionality
|
|
m_lPreviousPageNumber = m_lCurrPageNumber;
|
|
|
|
m_lCurrPageNumber = lPage;
|
|
|
|
// once he moves a page, any selection rectangle is now gone
|
|
// The Code in OCXEVENT to draw a rect will have set
|
|
// Rectangle drawing to FALSE, so re-enable it here.
|
|
if (Image_Selection == m_bSelectionState)
|
|
{
|
|
m_bSelectionState = No_Selection;
|
|
if (m_eCurrPtrMode == Select)
|
|
pIedDisp->SetSelectionRectangle(TRUE);
|
|
}
|
|
|
|
EndWaitCursor ();
|
|
return (TRUE);
|
|
}
|
|
|
|
|
|
//=============================================================================
|
|
// Function: OnPageFirst
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPageFirst()
|
|
{
|
|
// OLE, call our 'wrapper' function to set flags to make this
|
|
// operation more efficient during OLE Embedding sessions
|
|
if (!OleSaveModified ())
|
|
return;
|
|
|
|
SetPageTo (1);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPageGoto()
|
|
//-----------------------------------------------------------------------------
|
|
#include "gotopage.h"
|
|
void CIEditDoc::OnPageGoto()
|
|
{
|
|
CGotoPageDlg PageDlg (m_lCurrPageNumber, m_lPageCount);
|
|
theApp.m_bDlgUp = TRUE;
|
|
|
|
if (PageDlg.DoModal () == IDOK)
|
|
{
|
|
// OLE, call our 'wrapper' function to set flags to make this
|
|
// operation more efficient during OLE Embedding sessions
|
|
if (!OleSaveModified ())
|
|
{
|
|
theApp.m_bDlgUp = FALSE;
|
|
return;
|
|
}
|
|
|
|
SetPageTo (PageDlg.m_lPageRequested);
|
|
}
|
|
theApp.m_bDlgUp = FALSE;
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: DoPageGotoDlg ()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::DoPageGotoDlg ()
|
|
{
|
|
if (m_eCurrentAppDocStatus != No_Document && m_lPageCount > 1)
|
|
OnPageGoto();
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPageLast()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPageLast()
|
|
{
|
|
// OLE, call our 'wrapper' function to set flags to make this
|
|
// operation more efficient during OLE Embedding sessions
|
|
if (!OleSaveModified ())
|
|
return;
|
|
|
|
SetPageTo (m_lPageCount);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPageNext()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPageNext()
|
|
{
|
|
if ((m_lCurrPageNumber + 1) > m_lPageCount)
|
|
return;
|
|
|
|
// OLE, call our 'wrapper' function to set flags to make this
|
|
// operation more efficient during OLE Embedding sessions
|
|
if (!OleSaveModified ())
|
|
return;
|
|
|
|
SetPageTo (m_lCurrPageNumber + 1);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPagePrevious()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPagePrevious()
|
|
{
|
|
if ((m_lCurrPageNumber - 1) < 1)
|
|
return;
|
|
|
|
// OLE, call our 'wrapper' function to set flags to make this
|
|
// operation more efficient during OLE Embedding sessions
|
|
if (!OleSaveModified ())
|
|
return;
|
|
|
|
SetPageTo (m_lCurrPageNumber - 1);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: OnPageGoback()
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc::OnPageGoback()
|
|
{
|
|
// OLE, call our 'wrapper' function to set flags to make this
|
|
// operation more efficient during OLE Embedding sessions
|
|
if (!OleSaveModified ())
|
|
return;
|
|
|
|
SetPageTo (m_lPreviousPageNumber);
|
|
}
|
|
//=============================================================================
|
|
// Function: OnUpdatePageNumberStatus (CCmdUI* pCmdUI)
|
|
//-----------------------------------------------------------------------------
|
|
void CIEditDoc :: OnUpdatePageNumberStatus (CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable (TRUE);
|
|
if (m_lCurrPageNumber != 0)
|
|
{
|
|
CIEMainStatusBar* pStatusBar = ((CIEditMainFrame*)theApp.m_pMainWnd)->GetStatusBar();
|
|
CString szPage;
|
|
pStatusBar->SetPageText (m_lCurrPageNumber, m_lPageCount, szPage);
|
|
pCmdUI->SetText (szPage);
|
|
}
|
|
else
|
|
{
|
|
pCmdUI->SetText ("");
|
|
}
|
|
}
|
|
|
|
#if 0
|
|
//=============================================================================
|
|
// Function: CachePage used to cache previous or next page to
|
|
// improve page navigation performance
|
|
//-----------------------------------------------------------------------------
|
|
|
|
VOID CIEditDoc :: CachePage(CString& ImageFile, long Page, long TotalPages)
|
|
{
|
|
#ifndef _DEBUG
|
|
SHOWENTRY("CachePage");
|
|
// only complie the function if on VC++ 4.0
|
|
// for VC++ 2.2, return without caching page. VC++ 2.x has problems
|
|
// with using threads to call methods in OCXs
|
|
#if defined(IMG_MFC_40)
|
|
|
|
// validate requested cache page and return if not possible
|
|
if ( (Page == 0) || (Page > TotalPages) || (TotalPages == 1) )
|
|
return;
|
|
|
|
if (m_hCacheEvent != 0)
|
|
{
|
|
WaitForSingleObject(m_hCacheEvent, 10000);
|
|
CloseHandle(m_hCacheEvent);
|
|
m_hCacheEvent = 0;
|
|
}
|
|
|
|
m_hCacheEvent = CreateEvent (NULL, FALSE, FALSE, "ImgCachePage");
|
|
if (m_hCacheEvent != 0)
|
|
{
|
|
|
|
LPCACHEINFO pCacheInfo = NULL;
|
|
pCacheInfo = new CACHEINFO;
|
|
|
|
|
|
pCacheInfo->ImageFile = ImageFile;
|
|
pCacheInfo->Page = Page;
|
|
pCacheInfo->TotalPages = TotalPages;
|
|
pCacheInfo->hEvent = m_hCacheEvent;
|
|
AfxBeginThread((AFX_THREADPROC)CreatePageCache, pCacheInfo);
|
|
}
|
|
#endif // #if defined(IMG_MFC_40)
|
|
|
|
#endif // #ifndef _DEBUG
|
|
|
|
return;
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: CreateCachePage - thread used to do the actual page cache
|
|
//-----------------------------------------------------------------------------
|
|
|
|
UINT CreatePageCache(LPVOID pParam)
|
|
{
|
|
|
|
LPCACHEINFO pCacheInfo = (LPCACHEINFO)pParam;
|
|
|
|
_DImagedit* pIedDisp = g_pAppOcxs->GetIeditDispatch(FALSE);
|
|
|
|
if (pIedDisp)
|
|
{
|
|
|
|
TRY
|
|
{
|
|
pIedDisp->CacheImage (pCacheInfo->ImageFile, pCacheInfo->Page);
|
|
}
|
|
CATCH (COleDispatchException, e)
|
|
{
|
|
SetEvent(pCacheInfo->hEvent);
|
|
delete pCacheInfo;
|
|
AfxEndThread(0);
|
|
}
|
|
END_CATCH
|
|
}
|
|
|
|
SetEvent(pCacheInfo->hEvent);
|
|
delete pCacheInfo;
|
|
AfxEndThread(0);
|
|
return 0;
|
|
|
|
}
|
|
#endif
|