mirror of
https://github.com/leozide/leocad
synced 2024-11-17 07:47:55 +01:00
184 lines
3.4 KiB
C++
184 lines
3.4 KiB
C++
// ProgDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "leocad.h"
|
|
#include "ProgDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CProgressDlg dialog
|
|
|
|
CProgressDlg::CProgressDlg(LPCTSTR pszTitle)
|
|
{
|
|
//{{AFX_DATA_INIT(CProgressDlg)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_nMinValue = 0;
|
|
m_nMaxValue = 100;
|
|
m_nPrevPos = 0;
|
|
m_nPrevPercent = 0;
|
|
m_strTitle = pszTitle;
|
|
m_bCancel = FALSE;
|
|
m_bParentDisabled = FALSE;
|
|
}
|
|
|
|
CProgressDlg::~CProgressDlg()
|
|
{
|
|
if(m_hWnd != NULL)
|
|
DestroyWindow();
|
|
}
|
|
|
|
BOOL CProgressDlg::Create(CWnd* pParent)
|
|
{
|
|
m_pParentWnd = CWnd::GetSafeOwner(pParent);
|
|
|
|
if((m_pParentWnd != NULL) && m_pParentWnd->IsWindowEnabled())
|
|
{
|
|
m_pParentWnd->EnableWindow(FALSE);
|
|
m_bParentDisabled = TRUE;
|
|
}
|
|
|
|
if(!CDialog::Create(CProgressDlg::IDD, pParent))
|
|
{
|
|
ReEnableParent();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CProgressDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CProgressDlg)
|
|
DDX_Control(pDX, IDC_PRGDLG_PROGRESS, m_Progress);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CProgressDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CProgressDlg)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CProgressDlg message handlers
|
|
|
|
void CProgressDlg::OnCancel()
|
|
{
|
|
m_bCancel = TRUE;
|
|
}
|
|
|
|
BOOL CProgressDlg::CheckCancelButton()
|
|
{
|
|
// Process all pending messages
|
|
PumpMessages();
|
|
|
|
BOOL bResult = m_bCancel;
|
|
m_bCancel = FALSE;
|
|
|
|
return bResult;
|
|
}
|
|
|
|
void CProgressDlg::PumpMessages()
|
|
{
|
|
// Must call Create() before using the dialog
|
|
ASSERT(m_hWnd!=NULL);
|
|
|
|
MSG msg;
|
|
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
|
{
|
|
if(!IsDialogMessage(&msg))
|
|
{
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
}
|
|
}
|
|
|
|
int CProgressDlg::StepIt()
|
|
{
|
|
PumpMessages();
|
|
return SetPos(m_nPrevPos + 1);
|
|
}
|
|
|
|
int CProgressDlg::SetPos(int nPos)
|
|
{
|
|
CString strTitle;
|
|
int nPercentage;
|
|
|
|
m_nPrevPos = nPos;
|
|
|
|
if (m_nMaxValue > m_nMinValue)
|
|
nPercentage = (nPos*100)/(m_nMaxValue - m_nMinValue);
|
|
else
|
|
nPercentage = 0;
|
|
|
|
if ((nPercentage != m_nPrevPercent) || (nPos == 1))
|
|
{
|
|
m_nPrevPercent = nPercentage;
|
|
strTitle.Format(_T("%s [%d%%]"), m_strTitle, nPercentage);
|
|
SetWindowText(strTitle);
|
|
}
|
|
|
|
return m_Progress.SetPos(nPos);
|
|
}
|
|
|
|
void CProgressDlg::SetRange(int nLower, int nUpper)
|
|
{
|
|
ASSERT(0 <= nLower && nLower <= 65535);
|
|
ASSERT(0 <= nUpper && nUpper <= 65535);
|
|
|
|
m_Progress.SetRange(nLower, nUpper);
|
|
m_nMaxValue = nUpper;
|
|
m_nMinValue = nLower;
|
|
}
|
|
|
|
BOOL CProgressDlg::DestroyWindow()
|
|
{
|
|
ReEnableParent();
|
|
return CDialog::DestroyWindow();
|
|
}
|
|
|
|
void CProgressDlg::ReEnableParent()
|
|
{
|
|
if(m_bParentDisabled && (m_pParentWnd != NULL))
|
|
m_pParentWnd->EnableWindow(TRUE);
|
|
m_bParentDisabled = FALSE;
|
|
}
|
|
|
|
BOOL CProgressDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_Progress.ModifyStyle(0, PBS_SMOOTH);
|
|
m_Progress.SetRange(m_nMinValue, m_nMaxValue);
|
|
m_Progress.SetStep(1);
|
|
SetPos(m_nMinValue);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CProgressDlg::SetStatus(LPCTSTR lpszMessage)
|
|
{
|
|
ASSERT(m_hWnd);
|
|
CWnd *pWndStatus = GetDlgItem(IDC_PRGDLG_TEXT);
|
|
|
|
ASSERT(pWndStatus != NULL);
|
|
pWndStatus->SetWindowText(lpszMessage);
|
|
}
|
|
|
|
void CProgressDlg::SetSubStatus(LPCTSTR lpszMessage)
|
|
{
|
|
ASSERT(m_hWnd);
|
|
CWnd *pWndStatus = GetDlgItem(IDC_PRGDLG_TEXT2);
|
|
|
|
ASSERT(pWndStatus != NULL);
|
|
pWndStatus->SetWindowText(lpszMessage);
|
|
}
|