NT4/private/wangview/norway/iedit95/gotopage.cpp
2020-09-30 17:12:29 +02:00

321 lines
11 KiB
C++

//=============================================================================
// (c) Copyright Wang Laboratories, Inc. 1995 All rights reserved.
//-----------------------------------------------------------------------------
// Project: Norway - Image Editor
//
// Component: CGotoPageDlg
//
// File Name: gotopage.cpp
//
// Class: CGotoPageDlg
//
// Functions:
//-----------------------------------------------------------------------------
// Maintenance Log:
/*
$Header: S:\norway\iedit95\gotopage.cpv 1.9 21 Dec 1995 09:38:56 MMB $
$Log: S:\norway\iedit95\gotopage.cpv $
Rev 1.9 21 Dec 1995 09:38:56 MMB
fix so that first page is not available if on first page == same with last
page
Rev 1.8 28 Nov 1995 14:18:08 MMB
fix erroneous error msg to enter a integer when you deleted all numbers
from the page number edit box
Rev 1.7 21 Sep 1995 18:01:36 MMB
fix bug# 4182 partially
Rev 1.6 18 Sep 1995 11:41:16 MMB
added pagespin to the help table
Rev 1.5 12 Sep 1995 11:36:20 MMB
fix tab order
Rev 1.4 01 Sep 1995 11:36:44 MMB
make Invalid page entered work with %1 in resource
Rev 1.3 08 Aug 1995 11:25:24 MMB
added context help & whats this help
Rev 1.2 08 Jun 1995 12:37:38 MMB
fixed bug - page edit fld was initing to 0 & going to a max of 8000, now
inits at the page number being displayed & goes to max of pages in doc
Rev 1.1 06 Jun 1995 11:36:36 MMB
added code to disable OK button on invalid input
Rev 1.0 31 May 1995 09:28:10 MMB
Initial entry
*/
//=============================================================================
// ----------------------------> Includes <-------------------------------
#include "stdafx.h"
#include <afxpriv.h>
#include "iedit.h"
#include "ieditnum.h"
#include "gotopage.h"
// includes for the help system
#include "helpids.h"
#include "iedithm.h"
// ----------------------------> Globals <-------------------------------
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
static const DWORD GotoDlgHelpIDs [] =
{
IDC_PAGE, HIDC_PAGE,
IDC_PAGENUMBER, HIDC_PAGENUMBER,
IDC_FIRSTPAGE, HIDC_FIRSTPAGE,
IDC_LASTPAGE, HIDC_LASTPAGE,
IDC_PAGESPIN, HIDC_PAGESPIN,
IDOK, HIDC_GOTODLG_OK,
IDCANCEL, HIDC_GOTODLG_CANCEL,
0,0
};
// ---------------------------> Message Maps <----------------------------
BEGIN_MESSAGE_MAP(CGotoPageDlg, CDialog)
//{{AFX_MSG_MAP(CGotoPageDlg)
ON_BN_CLICKED(ID_HELP_GOTOPAGE_DLG, OnHelpGotopageDlg)
ON_BN_CLICKED(IDC_FIRSTPAGE, OnFirstpage)
ON_BN_CLICKED(IDC_LASTPAGE, OnLastpage)
ON_BN_CLICKED(IDC_PAGE, OnPage)
ON_EN_CHANGE(IDC_PAGENUMBER, OnChangePagenumber)
//}}AFX_MSG_MAP
ON_MESSAGE (WM_HELP, OnHelp)
ON_MESSAGE (WM_COMMANDHELP, OnCommandHelp)
ON_MESSAGE (WM_CONTEXTMENU, OnContextMenu)
END_MESSAGE_MAP()
//=============================================================================
// Function: CGotoPageDlg ()
// CGotoPageDlg class constructor
//-----------------------------------------------------------------------------
CGotoPageDlg::CGotoPageDlg(long lInitPg, long lMaxPg, CWnd* pParent /*=NULL*/)
: CDialog(CGotoPageDlg::IDD, pParent)
{
ASSERT (lMaxPg > 0);
ASSERT (lInitPg > 0 && lInitPg <= lMaxPg);
m_lMaxPages = lMaxPg;
//{{AFX_DATA_INIT(CGotoPageDlg)
m_lPageRequested = lInitPg;
//}}AFX_DATA_INIT
}
//=============================================================================
// Function: DoDataExchange(CDataExchange* pDX)
//-----------------------------------------------------------------------------
void CGotoPageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGotoPageDlg)
DDX_Text(pDX, IDC_PAGENUMBER, m_lPageRequested);
//}}AFX_DATA_MAP
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// CGotoPageDlg message handlers
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//=============================================================================
// Function: OnInitDialog()
// Set the focus on the Goto radio button, and enable the edit box. Fill the
// edit box with the passed in information of the page number
//-----------------------------------------------------------------------------
BOOL CGotoPageDlg::OnInitDialog()
{
// process default first
CDialog::OnInitDialog();
m_NumOnly.SubclassDlgItem (IDC_PAGENUMBER, this);
CSpinButtonCtrl* pCtrl = (CSpinButtonCtrl*)GetDlgItem (IDC_PAGESPIN);
pCtrl->SetBuddy (GetDlgItem (IDC_PAGENUMBER));
pCtrl->SetRange (1, m_lMaxPages);
pCtrl->SetPos (m_lPageRequested);
// set focus on the Goto radio button
CheckRadioButton (IDC_PAGE, IDC_LASTPAGE, IDC_PAGE);
CWnd* pWnd = GetDlgItem (IDC_PAGENUMBER);
pWnd->SetFocus ();
// select the text in the edit box & show the caret
((CEdit*)pWnd)->SetSel (0, -1);
UpdateData (FALSE);
if (m_lPageRequested == 1) // are we already on the first page ?
(GetDlgItem (IDC_FIRSTPAGE))->EnableWindow (FALSE);
if (m_lPageRequested == m_lMaxPages) // are we already on the last page ?
(GetDlgItem (IDC_LASTPAGE))->EnableWindow (FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//=============================================================================
// Function: OnHelpGotopageDlg()
// The user has picked OK : collect all the information and return IDOK
//-----------------------------------------------------------------------------
void CGotoPageDlg::OnHelpGotopageDlg()
{
// TODO: Add your control notification handler code here
}
//=============================================================================
// Function: OnFirstpage()
// The user has picked OK : collect all the information and return IDOK
//-----------------------------------------------------------------------------
void CGotoPageDlg::OnFirstpage()
{
// set the edit box to show 1
CWnd* pWnd = GetDlgItem (IDC_PAGENUMBER);
pWnd->SetWindowText (_T("1"));
// disable the edit box
pWnd->EnableWindow (FALSE);
// this is where the user wants to go
m_lPageRequested = 1;
(GetDlgItem (IDOK))->EnableWindow (TRUE);
}
//=============================================================================
// Function: OnLastpage()
// The user has picked OK : collect all the information and return IDOK
//-----------------------------------------------------------------------------
void CGotoPageDlg::OnLastpage()
{
// disable the edit box
CWnd* pWnd = GetDlgItem (IDC_PAGENUMBER);
pWnd->EnableWindow (FALSE);
char szTmp[10];
// set the max page number in the edit box
_ltoa (m_lMaxPages, szTmp, 10);
pWnd->SetWindowText (szTmp);
// this is where the user wants to go
m_lPageRequested = m_lMaxPages;
(GetDlgItem (IDOK))->EnableWindow (TRUE);
}
//=============================================================================
// Function: OnPage()
// The user has picked OK : collect all the information and return IDOK
//-----------------------------------------------------------------------------
void CGotoPageDlg::OnPage()
{
// enable the edit box so that the user can type the page number
CWnd* pWnd = GetDlgItem (IDC_PAGENUMBER);
pWnd->EnableWindow (TRUE);
// select the text in the edit box & show the caret
((CEdit*)pWnd)->SetSel (0, -1);
}
//=============================================================================
// Function: OnOK()
// The user has picked OK : collect all the information and return IDOK
//-----------------------------------------------------------------------------
void CGotoPageDlg::OnOK()
{
if (IsDlgButtonChecked (IDC_PAGE))
{
if (!UpdateData (TRUE))
return;
if (m_lPageRequested > m_lMaxPages)
{
CString szMsg;
char szTmp2[10];
// set the max page number in the edit box
_ltoa (m_lMaxPages, szTmp2, 10);
AfxFormatString1 (szMsg, IDS_PAGERANGE_MESSAGE, szTmp2);
AfxMessageBox (szMsg, MB_OK|MB_ICONINFORMATION);
CheckRadioButton (IDC_PAGE, IDC_LASTPAGE, IDC_PAGE);
CWnd* pWnd = GetDlgItem (IDC_PAGENUMBER);
pWnd->SetFocus ();
// select the text in the edit box & show the caret
((CEdit*)pWnd)->SetSel (0, -1);
return;
}
}
CDialog::OnOK();
}
//=============================================================================
// Function: OnChangePagenumber()
//-----------------------------------------------------------------------------
void CGotoPageDlg::OnChangePagenumber()
{
char szTmp[10];
GetDlgItemText (IDC_PAGENUMBER, szTmp, 10);
if (szTmp[0] == NULL)
{
(GetDlgItem (IDOK))->EnableWindow (FALSE);
return;
}
UpdateData (TRUE);
if (m_lPageRequested == 0 || m_lPageRequested > m_lMaxPages)
(GetDlgItem (IDOK))->EnableWindow (FALSE);
else
(GetDlgItem (IDOK))->EnableWindow (TRUE);
}
//=============================================================================
// Function: OnContextMenu ()
//-----------------------------------------------------------------------------
afx_msg LRESULT CGotoPageDlg::OnContextMenu (WPARAM wParam, LPARAM lParam)
{
if (::GetDlgCtrlID ((HWND)wParam) == AFX_IDC_TAB_CONTROL)
return 0L;
return ::WinHelp ((HWND)wParam, "WANGIMG.HLP", HELP_CONTEXTMENU,
(DWORD)(LPVOID)GotoDlgHelpIDs);
}
//=============================================================================
// Function: OnHelp (WPARAM wParam, LPARAM lParam)
//-----------------------------------------------------------------------------
afx_msg LRESULT CGotoPageDlg::OnHelp (WPARAM wParam, LPARAM lParam)
{
LPHELPINFO lpHelpInfo;
lpHelpInfo = (LPHELPINFO)lParam;
// All tabs have same ID so can't give tab specific help
if (lpHelpInfo->iCtrlId == AFX_IDC_TAB_CONTROL)
return 0L;
if (lpHelpInfo->iContextType == HELPINFO_WINDOW) // must be for a control
{
::WinHelp ((HWND)lpHelpInfo->hItemHandle, "WANGIMG.HLP", HELP_WM_HELP,
(DWORD)(LPVOID)GotoDlgHelpIDs);
}
return 1L;
}
//=============================================================================
// Function: OnCommandHelp(WPARAM, LPARAM)
//-----------------------------------------------------------------------------
afx_msg LRESULT CGotoPageDlg::OnCommandHelp(WPARAM, LPARAM)
{
return TRUE;
}