// modelessdlg.cpp : implementation file
//
#include "config.h"
#include "modelessdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CModelessDlg dialog

CModelessDlg::CModelessDlg(CWnd* pParent, char *dlgTitle) //Standard constructor
	: CDialog(CModelessDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CModelessDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_pParentDlg =  pParent;
	if(dlgTitle != NULL)
		strcpy(dialogTitle, dlgTitle);

	dialogCreated = FALSE;
}

void CModelessDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CModelessDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CModelessDlg, CDialog)
	//{{AFX_MSG_MAP(CModelessDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CModelessDlg message handlers
BOOL CModelessDlg::CreateOkCancel(char * msg)
{
BOOL b;
char safemsg[MAX_QMSG_SIZE];

strncpy(safemsg,msg, (MAX_QMSG_SIZE - 5) );
strcat(safemsg,"\n");

	if(dialogCreated == TRUE)
	{
		Q.EnqueueMsg(safemsg, OK_CANCEL_RESPONSE);			
		return FALSE;
	}
	
	if( (b = CDialog::Create(CModelessDlg::IDD) ) == TRUE)
	{
		if(dialogTitle != NULL)
			CWnd::SetWindowText(dialogTitle);

		SetDlgItemText(IDC_MESSAGE,safemsg);
		CWnd *pWnd = GetDlgItem(IDCANCEL);
		pWnd->ShowWindow(SW_SHOW);	
		dialogCreated = TRUE;
	}
	
	return b;

}

BOOL CModelessDlg::Create(char *msg) 
{
BOOL b;
char safemsg[MAX_QMSG_SIZE];

strncpy(safemsg,msg, (MAX_QMSG_SIZE - 5) );
strcat(safemsg,"\n");

	if(dialogCreated == TRUE)
	{
		Q.EnqueueMsg(safemsg, OK_RESPONSE);			
		return FALSE;
	}

	if( (b = CDialog::Create(CModelessDlg::IDD) ) == TRUE)
	{
		SetDlgItemText(IDC_MESSAGE,safemsg);
		CWnd::ShowWindow(SW_SHOW);
		dialogCreated = TRUE;	
		if(dialogTitle != NULL)
			CWnd::SetWindowText(dialogTitle);	
		CWnd *pWnd = GetDlgItem(IDCANCEL);
		pWnd->ShowWindow(SW_HIDE);	
	}
	
	return b;
}

void CModelessDlg::OnOK() 
{
char msg[80];
int type = 0;

	if(m_pParentDlg != NULL)
	{	
		if(Q.DequeueMsg(msg,type) == FALSE) //no message in queue destroy window
		{
			dialogCreated = FALSE;
			m_pParentDlg->PostMessage(WM_MODELESSOK,IDD_MODELESSDIALOG);				
		}
		else
		{
			SetDlgItemText(IDC_MESSAGE, msg);
			if(type == OK_CANCEL_RESPONSE)
			{
				CWnd *pWnd = GetDlgItem(IDCANCEL);
				pWnd->ShowWindow(SW_SHOW);	
			}
		}


	}
	else //handle modal dialog case
	{
		CDialog::OnCancel();		
	}
}
void CModelessDlg::OnCancel() 
{
	if(m_pParentDlg != NULL)
	{	
		dialogCreated = FALSE;
		m_pParentDlg->PostMessage(WM_MODELESSEXIT,IDD_MODELESSDIALOG);
	}
	else
	{
		CDialog::OnCancel();		
	}
}

