/*-----------------------------------------------------------------------------
[名称]	PrintDlg.cpp
[概要]	印刷ダイアログクラスの実装
[備考]	なし
[履歴]	2003-03-11	NC		コメント付加(moralog)
		2003-11-20	b031130 (3198) BOX表示設定反映追加 (dincom)
-----------------------------------------------------------------------------*/


//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "shitarabian.h"
#include "PrintDlg.h"
#include "PrintDefine.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/*-----------------------------------------------------------------------------
[名称]	コンストラクタ
[機能]	インスタンスの生成。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CPrintDlg::CPrintDlg(CWnd* pParent /*=NULL*/)
	: COwnerTabPage(CPrintDlg::IDD, pParent)
	, m_pPrintDefine( NULL )
	, m_pLastEdit( NULL )
{
	//{{AFX_DATA_INIT(CPrintDlg)
	m_iTopMargin = 0;
	m_iRightMargin = 0;
	m_iLeftMargin = 0;
	m_iHeaderHeight = 0;
	m_iBottomMargin = 0;
	m_iFooterHeight = 0;
	m_bWidthLine = FALSE;
	m_uiPrintWidth = 0;
	m_bCareSelection = FALSE;
	m_bCareEmphasis = FALSE;
	m_strHeaderRight = _T("");
	m_strHeaderMid = _T("");
	m_strHeaderLeft = _T("");
	m_bHeaderEnable = FALSE;
	m_strFooterRight = _T("");
	m_strFooterMid = _T("");
	m_strFooterLeft = _T("");
	m_bFooterEnable = FALSE;
	m_bMarge = FALSE;
	m_uiMargeCount = 0;
	m_bCareBoxChar = FALSE;
	//}}AFX_DATA_INIT
}


/*-----------------------------------------------------------------------------
[名称]	データ変換
[機能]	CDialog::DoDataExchange() のヘルプを参照。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPrintDlg)
	DDX_Text(pDX, IDC_PRINTER_TOPMARGIN, m_iTopMargin);
	DDX_Text(pDX, IDC_PRINTER_RIGHTMARGIN, m_iRightMargin);
	DDX_Text(pDX, IDC_PRINTER_LEFTMARGIN, m_iLeftMargin);
	DDX_Text(pDX, IDC_PRINTER_HEADERHEIGHT, m_iHeaderHeight);
	DDX_Text(pDX, IDC_PRINTER_BOTTOMMARGIN, m_iBottomMargin);
	DDX_Text(pDX, IDC_PRINTER_BOTFOOTERHEIGHT, m_iFooterHeight);
	DDX_Check(pDX, IDC_PRINT_WIDTHLINE, m_bWidthLine);
	DDX_Text(pDX, IDC_PRINT_WIDTH, m_uiPrintWidth);
	DDX_Check(pDX, IDC_PRINT_SELECTION, m_bCareSelection);
	DDX_Check(pDX, IDC_PRINT_EMPHASIS, m_bCareEmphasis);
	DDX_Text(pDX, IDC_HEADERRIGHT, m_strHeaderRight);
	DDX_Text(pDX, IDC_HEADERMID, m_strHeaderMid);
	DDX_Text(pDX, IDC_HEADERLEFT, m_strHeaderLeft);
	DDX_Check(pDX, IDC_HEADERENABLE, m_bHeaderEnable);
	DDX_Text(pDX, IDC_FOOTERRIGHT, m_strFooterRight);
	DDX_Text(pDX, IDC_FOOTERMID, m_strFooterMid);
	DDX_Text(pDX, IDC_FOOTERLEFT, m_strFooterLeft);
	DDX_Check(pDX, IDC_FOOTERENABLE, m_bFooterEnable);
	DDX_Check(pDX, IDC_PRINT_MARGE, m_bMarge);
	DDX_Text(pDX, IDC_PRINT_MARGECOUNT, m_uiMargeCount);
	DDX_Check(pDX, IDC_PRINT_BOXCHAR, m_bCareBoxChar);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPrintDlg, CDialog)
	//{{AFX_MSG_MAP(CPrintDlg)
	ON_BN_CLICKED(IDC_BTN_PATH, OnBtnPath)
	ON_BN_CLICKED(IDC_BTN_FILE, OnBtnFile)
	ON_BN_CLICKED(IDC_BTN_EXT, OnBtnExt)
	ON_BN_CLICKED(IDC_BTN_PAGE, OnBtnPage)
	ON_BN_CLICKED(IDC_BTN_PAGECOUNT, OnBtnPagecount)
	ON_BN_CLICKED(IDC_BTN_YEAR, OnBtnYear)
	ON_BN_CLICKED(IDC_BTN_MONTH, OnBtnMonth)
	ON_BN_CLICKED(IDC_BTN_DAY, OnBtnDay)
	ON_BN_CLICKED(IDC_BTN_DAYOFWEEK, OnBtnDayofweek)
	ON_BN_CLICKED(IDC_BTN_HOUR, OnBtnHour)
	ON_BN_CLICKED(IDC_BTN_MNITE, OnBtnMinute)
	ON_EN_SETFOCUS(IDC_HEADERLEFT, OnSetfocusz)
	ON_BN_CLICKED(IDC_PRINT_HEADERFONT, OnPrintHeaderfont)
	ON_EN_SETFOCUS(IDC_HEADERMID, OnSetfocusz)
	ON_EN_SETFOCUS(IDC_HEADERRIGHT, OnSetfocusz)
	ON_EN_SETFOCUS(IDC_FOOTERLEFT, OnSetfocusz)
	ON_EN_SETFOCUS(IDC_FOOTERMID, OnSetfocusz)
	ON_EN_SETFOCUS(IDC_FOOTERRIGHT, OnSetfocusz)
	ON_BN_CLICKED(IDC_PRINT_FOOTERFONT, OnPrintFooterfont)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/*-----------------------------------------------------------------------------
[名称]	初期化ハンドラ
[機能]	コントロールの初期化処理。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
BOOL CPrintDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	if( m_pPrintDefine != NULL )
	{
		m_iTopMargin		= m_pPrintDefine->m_lTopMargin;
		m_iRightMargin		= m_pPrintDefine->m_lRightMargin;
		m_iLeftMargin		= m_pPrintDefine->m_lLeftMargin;
		m_iHeaderHeight		= m_pPrintDefine->m_lHeaderHeight;
		m_iBottomMargin		= m_pPrintDefine->m_lBottomMargin;
		m_iFooterHeight		= m_pPrintDefine->m_lFooterHeight;
		m_bWidthLine		= m_pPrintDefine->m_bPrintWidthLine;
		m_uiPrintWidth		= m_pPrintDefine->m_lPrintPixelWidth;
		m_bCareSelection	= m_pPrintDefine->m_bCareSelection;
		m_bCareEmphasis		= m_pPrintDefine->m_bCareEmphasis;
		m_strHeaderRight	= m_pPrintDefine->m_strHeaderRight;
		m_strHeaderMid		= m_pPrintDefine->m_strHeaderMid;
		m_strHeaderLeft		= m_pPrintDefine->m_strHeaderLeft;
		m_bHeaderEnable		= m_pPrintDefine->m_bHeader;
		m_strFooterRight	= m_pPrintDefine->m_strFooterRight;
		m_strFooterMid		= m_pPrintDefine->m_strFooterMid;
		m_strFooterLeft		= m_pPrintDefine->m_strFooterLeft;
		m_bFooterEnable		= m_pPrintDefine->m_bFooter;
		m_bMarge			= m_pPrintDefine->m_bMarge;
		m_uiMargeCount		= m_pPrintDefine->m_uiMargeCount;

		m_fontHeader		= m_pPrintDefine->m_fontHeader;
		m_fontFooter		= m_pPrintDefine->m_fontFooter;
		// ▼ (3198) BGN 2003.11.20 (dincom) BOX表示設定反映有無
		m_bCareBoxChar		= m_pPrintDefine->m_bCareBoxChar;
		// ▲ (3198) END 
	}
	UpdateData( FALSE );

	return TRUE;  // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
	              // 例外: OCX プロパティ ページの戻り値は FALSE となります
}


/*-----------------------------------------------------------------------------
[名称]	適用
[機能]	設定内容の反映処理。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::Confirm() 
{
	UpdateData( TRUE );
	if( m_pPrintDefine != NULL )
	{
		m_pPrintDefine->m_lTopMargin = m_iTopMargin;
		m_pPrintDefine->m_lRightMargin = m_iRightMargin;
		m_pPrintDefine->m_lLeftMargin = m_iLeftMargin;
		m_pPrintDefine->m_lHeaderHeight = m_iHeaderHeight;
		m_pPrintDefine->m_lBottomMargin = m_iBottomMargin;
		m_pPrintDefine->m_lFooterHeight = m_iFooterHeight;
		m_pPrintDefine->m_bPrintWidthLine = m_bWidthLine;
		m_pPrintDefine->m_lPrintPixelWidth = m_uiPrintWidth;
		m_pPrintDefine->m_bCareSelection = m_bCareSelection;
		m_pPrintDefine->m_bCareEmphasis = m_bCareEmphasis;
		m_pPrintDefine->m_strHeaderRight = m_strHeaderRight;
		m_pPrintDefine->m_strHeaderMid = m_strHeaderMid;
		m_pPrintDefine->m_strHeaderLeft = m_strHeaderLeft;
		m_pPrintDefine->m_bHeader = m_bHeaderEnable;
		m_pPrintDefine->m_strFooterRight = m_strFooterRight;
		m_pPrintDefine->m_strFooterMid = m_strFooterMid;
		m_pPrintDefine->m_strFooterLeft = m_strFooterLeft;
		m_pPrintDefine->m_bFooter = m_bFooterEnable;
		m_pPrintDefine->m_bMarge = m_bMarge;
		m_pPrintDefine->m_uiMargeCount = m_uiMargeCount;
		m_pPrintDefine->m_fontHeader = m_fontHeader;
		m_pPrintDefine->m_fontFooter = m_fontFooter;
		// ▼ (3198) BGN 2003.11.20 (dincom) BOX表示設定反映有無
		m_pPrintDefine->m_bCareBoxChar = m_bCareBoxChar;
		// ▲ (3198) END 
	}
}


/*-----------------------------------------------------------------------------
[名称]	「パス」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnPath() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordPath
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「ファイル名」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnFile() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordFile
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「拡張子」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnExt() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordExt
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「頁番号」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnPage() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordPage
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「ページ数」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnPagecount() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordPageCount
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「年」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnYear() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordYear
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「月」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnMonth() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordMonth
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「日」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnDay() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordDay
		);
		m_pLastEdit->SetFocus();
	}	
}


/*-----------------------------------------------------------------------------
[名称]	「曜日」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnDayofweek() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordDayOfWeek
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「時」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnHour() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordHour
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	「分」ボタンハンドラ
[機能]	ヘッダ・フッタ文字列補完機能。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnBtnMinute() 
{
	if ( m_pPrintDefine != NULL )
	if ( m_pLastEdit != NULL )
	{
		m_pLastEdit->ReplaceSel(
			m_pPrintDefine->m_strKeywordMinute
		);
		m_pLastEdit->SetFocus();
	}
}


/*-----------------------------------------------------------------------------
[名称]	フォーカス取得ハンドラ
[機能]	フォーカス取得したコントロールを記憶する。
[戻値]	なし
[備考]	ヘッダ・フッタ文字列補完機能用。
		ボタンを押したときに、対象とするエディットボックスを保持しておく。
-----------------------------------------------------------------------------*/
void CPrintDlg::OnSetfocusz() 
{
	m_pLastEdit = (CEdit*)GetFocus();
}


/*-----------------------------------------------------------------------------
[名称]	「ヘッダ用フォント」ボタンハンドラ
[機能]	ヘッダ用フォントを選択する。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnPrintHeaderfont() 
{
	HDC		hdc = ::GetDC( NULL );
	CDC		DC;
	DC.Attach( hdc );

	CFontDialog		dlg( m_fontHeader.GetLogFont( &DC ), CF_EFFECTS|CF_PRINTERFONTS );
	DC.Detach();
	::ReleaseDC( NULL, hdc );

	if ( dlg.DoModal() == IDOK)
	{
		// Settingデータを設定しなおす
		m_fontHeader.m_iPointSize = (dlg.GetSize())/10;
		m_fontHeader.m_strFontName = dlg.GetFaceName();
		m_fontHeader.m_bBold = dlg.IsBold();
		m_fontHeader.m_bItalic = dlg.IsItalic();
		m_fontHeader.m_bUnderLine = dlg.IsUnderline();

		LOGFONT		tLogFont;
		dlg.GetCurrentFont( &tLogFont );
		m_fontHeader.m_nCharSet = tLogFont.lfCharSet;
	}	
}


/*-----------------------------------------------------------------------------
[名称]	「フッタ用フォント」ボタンハンドラ
[機能]	フッタ用フォントを選択する。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CPrintDlg::OnPrintFooterfont() 
{
	HDC		hdc = ::GetDC( NULL );
	CDC		DC;
	DC.Attach( hdc );

	CFontDialog		dlg( m_fontFooter.GetLogFont( &DC ), CF_EFFECTS|CF_PRINTERFONTS );
	DC.Detach();
	::ReleaseDC( NULL, hdc );

	if ( dlg.DoModal() == IDOK)
	{
		// Settingデータを設定しなおす
		m_fontFooter.m_iPointSize = (dlg.GetSize())/10;
		m_fontFooter.m_strFontName = dlg.GetFaceName();
		m_fontFooter.m_bBold = dlg.IsBold();
		m_fontFooter.m_bItalic = dlg.IsItalic();
		m_fontFooter.m_bUnderLine = dlg.IsUnderline();
		m_fontFooter.m_bStrikeOut = dlg.IsStrikeOut();

		LOGFONT		tLogFont;
		dlg.GetCurrentFont( &tLogFont );
		m_fontFooter.m_nCharSet = tLogFont.lfCharSet;
	}	
}

