summaryrefslogtreecommitdiff
path: root/hammer/progdlg.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/progdlg.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'hammer/progdlg.cpp')
-rw-r--r--hammer/progdlg.cpp215
1 files changed, 215 insertions, 0 deletions
diff --git a/hammer/progdlg.cpp b/hammer/progdlg.cpp
new file mode 100644
index 0000000..c36f923
--- /dev/null
+++ b/hammer/progdlg.cpp
@@ -0,0 +1,215 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+// ProgDlg.cpp : implementation file
+// CG: This file was added by the Progress Dialog component
+
+#include "stdafx.h"
+#include "resource.h"
+#include "ProgDlg.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+/////////////////////////////////////////////////////////////////////////////
+// CProgressDlg dialog
+
+CProgressDlg::CProgressDlg(UINT nCaptionID)
+{
+ m_nCaptionID = CG_IDS_PROGRESS_CAPTION;
+ if (nCaptionID != 0)
+ m_nCaptionID = nCaptionID;
+
+ m_bCancel=FALSE;
+ m_nLower=0;
+ m_nUpper=100;
+ m_nStep=10;
+ //{{AFX_DATA_INIT(CProgressDlg)
+ // NOTE: the ClassWizard will add member initialization here
+ //}}AFX_DATA_INIT
+ m_bParentDisabled = FALSE;
+}
+
+CProgressDlg::~CProgressDlg()
+{
+ if(m_hWnd!=NULL)
+ DestroyWindow();
+}
+
+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::Create(CWnd *pParent)
+{
+ // Get the true parent of the dialog
+ m_pParentWnd = CWnd::GetSafeOwner(pParent);
+
+ // m_bParentDisabled is used to re-enable the parent window
+ // when the dialog is destroyed. So we don't want to set
+ // it to TRUE unless the parent was already enabled.
+
+ 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, CG_IDC_PROGDLG_PROGRESS, m_Progress);
+ //}}AFX_DATA_MAP
+}
+
+BEGIN_MESSAGE_MAP(CProgressDlg, CDialog)
+ //{{AFX_MSG_MAP(CProgressDlg)
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+
+void CProgressDlg::OnCancel()
+{
+ m_bCancel=TRUE;
+}
+
+void CProgressDlg::SetRange(int nLower,int nUpper)
+{
+ m_nLower = nLower;
+ m_nUpper = nUpper;
+ m_Progress.SetRange(nLower,nUpper);
+}
+
+int CProgressDlg::SetPos(int nPos)
+{
+ PumpMessages();
+ int iResult = m_Progress.SetPos(nPos);
+ UpdatePercent(nPos);
+ return iResult;
+}
+
+int CProgressDlg::SetStep(int nStep)
+{
+ m_nStep = nStep; // Store for later use in calculating percentage
+ return m_Progress.SetStep(nStep);
+}
+
+int CProgressDlg::OffsetPos(int nPos)
+{
+ PumpMessages();
+ int iResult = m_Progress.OffsetPos(nPos);
+ UpdatePercent(iResult+nPos);
+ return iResult;
+}
+
+int CProgressDlg::StepIt()
+{
+ PumpMessages();
+ int iResult = m_Progress.StepIt();
+ UpdatePercent(iResult+m_nStep);
+ return iResult;
+}
+
+void CProgressDlg::PumpMessages()
+{
+ // Must call Create() before using the dialog
+ Assert(m_hWnd!=NULL);
+
+ MSG msg;
+ // Handle dialog messages
+ while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ if(!IsDialogMessage(&msg))
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+}
+
+BOOL CProgressDlg::CheckCancelButton()
+{
+ // Process all pending messages
+ PumpMessages();
+
+ // Reset m_bCancel to FALSE so that
+ // CheckCancelButton returns FALSE until the user
+ // clicks Cancel again. This will allow you to call
+ // CheckCancelButton and still continue the operation.
+ // If m_bCancel stayed TRUE, then the next call to
+ // CheckCancelButton would always return TRUE
+
+ BOOL bResult = m_bCancel;
+ m_bCancel = FALSE;
+
+ return bResult;
+}
+
+void CProgressDlg::UpdatePercent(int nNewPos)
+{
+ CWnd *pWndPercent = GetDlgItem(CG_IDC_PROGDLG_PERCENT);
+ int nPercent;
+
+ int nDivisor = m_nUpper - m_nLower;
+ Assert(nDivisor>0); // m_nLower should be smaller than m_nUpper
+
+ int nDividend = (nNewPos - m_nLower);
+ Assert(nDividend>=0); // Current position should be greater than m_nLower
+
+ nPercent = nDividend * 100 / nDivisor;
+
+ // Since the Progress Control wraps, we will wrap the percentage
+ // along with it. However, don't reset 100% back to 0%
+ if(nPercent!=100)
+ nPercent %= 100;
+
+ // Display the percentage
+ CString strBuf;
+ strBuf.Format(_T("%d%c"),nPercent,_T('%'));
+
+ CString strCur; // get current percentage
+ pWndPercent->GetWindowText(strCur);
+
+ if (strCur != strBuf)
+ pWndPercent->SetWindowText(strBuf);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CProgressDlg message handlers
+
+BOOL CProgressDlg::OnInitDialog()
+{
+ CDialog::OnInitDialog();
+ m_Progress.SetRange(m_nLower,m_nUpper);
+ m_Progress.SetStep(m_nStep);
+ m_Progress.SetPos(m_nLower);
+
+ CString strCaption;
+ VERIFY(strCaption.LoadString(m_nCaptionID));
+ SetWindowText(strCaption);
+
+ return TRUE;
+}