diff options
Diffstat (limited to 'NSCmpts/ProgressDlg.cpp')
-rw-r--r-- | NSCmpts/ProgressDlg.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/NSCmpts/ProgressDlg.cpp b/NSCmpts/ProgressDlg.cpp new file mode 100644 index 0000000..9f1ae5c --- /dev/null +++ b/NSCmpts/ProgressDlg.cpp @@ -0,0 +1,151 @@ +// ProgressDlg.cpp : Implementation of CProgressDlg +#include "stdafx.h" +#include "ProgressDlg.h" + +///////////////////////////////////////////////////////////////////////////// +// CProgressDlg + +CActionProgressDlg::CActionProgressDlg(IUnknown* pSite, UINT nIDD) + : CDialogImplEx(nIDD) +{ + m_pUnk = pSite; + m_bCancel = false; +} + +CActionProgressDlg::~CActionProgressDlg() +{ + if(IsWindow()) + DestroyWindow(); + + // Release any pointers we're holding on to + if(m_pUnk) + m_pUnk->Release(); + if(m_pErrorLog) + m_pErrorLog->Release(); +} + +LRESULT CActionProgressDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + // Used later + m_ctlProgress = GetDlgItem(IDC_PROGRESS); + + CenterWindow(GetDesktopWindow()); + + // This sets up the Event Mechanism + if(m_pUnk != NULL) + DispEventAdvise(m_pUnk); // Pointer from IObjectWithSite + + return 1; // Let the system set the focus +} + +LRESULT CActionProgressDlg::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + + // Release any pointers we're holding on to + if(m_pUnk) + { + // Drop the Event Stuff + DispEventUnadvise(m_pUnk); // Pointer from IObjectWithSite + + m_pUnk->Release(); + } + if(m_pErrorLog) + m_pErrorLog->Release(); + + return 0; +} + +// Update Message from Action Engine +LRESULT CActionProgressDlg::OnUpdateFile(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + NS_UPDATE_DATA* pData = (NS_UPDATE_DATA*)lParam; + + // If there 0 in the total then clear + if(pData->lTot == 0) + { + m_ctlProgress.SetRange(0, 1); + m_ctlProgress.SetPos(0); + } + else + { + // If total != -1 then change range + if(pData->lTot > 0) + m_ctlProgress.SetRange(0, pData->lTot); + + // If Current changed (!= -1) then set state + if(pData->lCur >= 0) + m_ctlProgress.SetPos(pData->lCur); + } + + // If there's a message display it + if(pData->szMessage1) + ::SetWindowText(GetDlgItem(IDC_MESSAGE1), pData->szMessage1); + if(pData->szMessage2) + ::SetWindowText(GetDlgItem(IDC_MESSAGE2), pData->szMessage2); + + // If m_bCancel is set then this cancels the CActionEngine + return m_bCancel ? 0 : 1; +} + +// Called in response to the button being pressed, window being closed, or +// event being fired +LRESULT CActionProgressDlg::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) +{ + // This gets checked when the Engine sends and Update (OnUpdateFile) + m_bCancel = true; + + // We're working on cancelling so reflect that in UI + ::SetWindowText(GetDlgItem(IDCANCEL), _T("Cancelling...")); + ::EnableWindow(GetDlgItem(IDCANCEL), FALSE); + return 0; +} + +// Called when event Fired +STDMETHODIMP CActionProgressDlg::OnCancelEv() +{ + // Just call normal cancel event + BOOL bHandled = TRUE; + OnCancel(0, 0, NULL, bHandled); + + return S_OK; +}; + +// Error Message from CActionEngine +LRESULT CActionProgressDlg::OnError(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) +{ + // See if we can get an INightSecErrorLog pointer that IObjectWithSite + // gave us + if(m_pErrorLog == NULL) + m_pErrorLog = m_pUnk; + + if(m_pErrorLog == NULL) + return 0; + + // Create a new NightSecError object + CComObject<CActionErrorImpl>* pError = NULL; + HRESULT hr = CComObject<CActionErrorImpl>::CreateInstance(&pError); + + if(FAILED(hr)) + return 0; + + // Set info on the Error Object + NS_ERROR_DATA* pData = (NS_ERROR_DATA*)lParam; + pError->SetError(pData->szDesc, pData->hRes); + pError->Attach((CAction*)pData->lParam); + + // Send it to the INightSecErrorLog + m_pErrorLog->AddError(pError->GetUnknown()); + + return 0; +} + +// Starts the AVI file playing from resources +bool CActionProgressDlg::PlayAmination(UINT nID) +{ + ASSERT(IsWindow()); + ASSERT(GetDlgItem(IDC_ANIMATION)); + + // Dialog box should have AutoPlay enabled + return ((BOOL)::SendMessage(GetDlgItem(IDC_ANIMATION), ACM_OPEN, 0, (LPARAM)MAKEINTRESOURCE(nID))) ? true : false; +} + |