third-party libs
This commit is contained in:
parent
f836927d3a
commit
b154ee9266
3667 changed files with 854591 additions and 0 deletions
365
third-party/BugTrap-1.3-57bd515/source/TransferProgressDlg.cpp
vendored
Normal file
365
third-party/BugTrap-1.3-57bd515/source/TransferProgressDlg.cpp
vendored
Normal file
|
|
@ -0,0 +1,365 @@
|
|||
/*
|
||||
* This is a part of the BugTrap package.
|
||||
* Copyright (c) 2005-2009 IntelleSoft.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Description: Transfer Progress dialog.
|
||||
* Author: Maksim Pyatkovskiy.
|
||||
*
|
||||
* This source code is only intended as a supplement to the
|
||||
* BugTrap package reference and related electronic documentation
|
||||
* provided with the product. See these sources for detailed
|
||||
* information regarding the BugTrap package.
|
||||
*/
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include "resource.h"
|
||||
#include "TransferProgressDlg.h"
|
||||
#include "BugTrapUtils.h"
|
||||
#include "BugTrapUI.h"
|
||||
#include "StrStream.h"
|
||||
#include "Globals.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @addtogroup BugTrapUI BugTrap Graphical User Interface
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define IDC_DIALOG_PANE 100
|
||||
|
||||
/// Transfer thread handle.
|
||||
static HANDLE g_hTransferThread = NULL;
|
||||
/// Transfer thread parameters.
|
||||
static CTransferThreadParams* g_pTransferThreadParams = NULL;
|
||||
|
||||
/**
|
||||
* @brief WM_INITDIALOG handler of Transfer Status pane.
|
||||
* @param hwnd - window handle.
|
||||
* @param hwndFocus - system-defined focus window.
|
||||
* @return true to setup focus to system-defined control.
|
||||
*/
|
||||
static BOOL TransferStatusPane_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM /*lParam*/)
|
||||
{
|
||||
hwndFocus;
|
||||
|
||||
CStrStream Stream(1024);
|
||||
TCHAR szMessageText[128];
|
||||
HICON hIcon;
|
||||
|
||||
DWORD dwErrorCode = g_pTransferThreadParams->GetErrorCode();
|
||||
if (dwErrorCode == ERROR_SUCCESS)
|
||||
{
|
||||
hIcon = LoadIcon(NULL, IDI_INFORMATION);
|
||||
LoadString(g_hInstance, IDS_STATUS_REPORTSENT, szMessageText, countof(szMessageText));
|
||||
Stream << szMessageText;
|
||||
}
|
||||
else
|
||||
{
|
||||
hIcon = LoadIcon(NULL, IDI_ERROR);
|
||||
LoadString(g_hInstance, IDS_ERROR_TRANSFERFAILED, szMessageText, countof(szMessageText));
|
||||
Stream << szMessageText << _T('\n');
|
||||
PCTSTR pszErrorMessage = g_pTransferThreadParams->GetErrorMessage();
|
||||
if (pszErrorMessage == NULL)
|
||||
{
|
||||
TCHAR szErrorMessageTemplate[256];
|
||||
LoadString(g_hInstance, IDS_UNDEFINED_ERROR_EX, szErrorMessageTemplate, countof(szErrorMessageTemplate));
|
||||
TCHAR szErrorMessage[256];
|
||||
_stprintf_s(szErrorMessage, countof(szErrorMessage), szErrorMessageTemplate, dwErrorCode);
|
||||
pszErrorMessage = szErrorMessage;
|
||||
}
|
||||
Stream << pszErrorMessage;
|
||||
}
|
||||
|
||||
HWND hwndCtl = GetDlgItem(hwnd, IDC_STATUSMESSAGE);
|
||||
SetWindowText(hwndCtl, Stream);
|
||||
ShowWindow(hwndCtl, SW_SHOW);
|
||||
|
||||
hwndCtl = GetDlgItem(hwnd, IDC_STATUSICON);
|
||||
Static_SetIcon(hwndCtl, hIcon);
|
||||
ShowWindow(hwndCtl, SW_SHOW);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief WM_COMMAND handler of Transfer Status pane.
|
||||
* @param hwnd - window handle.
|
||||
* @param id - control ID.
|
||||
* @param hwndCtl - control handle.
|
||||
* @param codeNotify - notification code.
|
||||
*/
|
||||
static void TransferStatusPane_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
|
||||
{
|
||||
codeNotify; hwndCtl;
|
||||
switch (id)
|
||||
{
|
||||
case IDCANCEL:
|
||||
HWND hwndParent = GetParent(hwnd);
|
||||
int nResult = g_pTransferThreadParams->GetErrorCode() == ERROR_SUCCESS;
|
||||
EndDialog(hwndParent, nResult);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dialog procedure of Transfer Status pane.
|
||||
* @param hwndDlg - window handle.
|
||||
* @param uMsg - message identifier.
|
||||
* @param wParam - 1st message parameter.
|
||||
* @param lParam - 2nd message parameter.
|
||||
* @return message result.
|
||||
*/
|
||||
static INT_PTR CALLBACK TransferStatusPaneProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
HANDLE_MSG(hwndDlg, WM_INITDIALOG, TransferStatusPane_OnInitDialog);
|
||||
HANDLE_MSG(hwndDlg, WM_COMMAND, TransferStatusPane_OnCommand);
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Start progress animation.
|
||||
* @param hwnd - window handle.
|
||||
*/
|
||||
static void StartProgressAnimation(HWND hwnd)
|
||||
{
|
||||
HWND hwndCtl = GetDlgItem(hwnd, IDC_UPLOAD_ANIMATION);
|
||||
Animate_Open(hwndCtl, MAKEINTRESOURCE(IDR_UPLOAD_ANIMATION));
|
||||
Animate_Play(hwndCtl, 0, -1, -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Stop progress animation.
|
||||
* @param hwnd - window handle.
|
||||
*/
|
||||
static void StopProgressAnimation(HWND hwnd)
|
||||
{
|
||||
HWND hwndCtl = GetDlgItem(hwnd, IDC_UPLOAD_ANIMATION);
|
||||
Animate_Stop(hwndCtl);
|
||||
Animate_Close(hwndCtl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief WM_INITDIALOG handler of Transfer Progress pane.
|
||||
* @param hwnd - window handle.
|
||||
* @param hwndFocus - system-defined focus window.
|
||||
* @param lParam - user-defined parameter.
|
||||
* @return true to setup focus to system-defined control.
|
||||
*/
|
||||
static BOOL TransferProgressPane_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
|
||||
{
|
||||
lParam; hwndFocus;
|
||||
HWND hwndCtl;
|
||||
|
||||
StartProgressAnimation(hwnd);
|
||||
hwndCtl = GetDlgItem(hwnd, IDC_CONNECTINGTOSERVER_CMARK);
|
||||
SendMessage(hwndCtl, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)g_pResManager->m_hCheckMark);
|
||||
hwndCtl = GetDlgItem(hwnd, IDC_SENDINGREPORT_CMARK);
|
||||
SendMessage(hwndCtl, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)g_pResManager->m_hCheckMark);
|
||||
hwndCtl = GetDlgItem(hwnd, IDC_CHECKINGERRORSTATUS_CMARK);
|
||||
SendMessage(hwndCtl, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)g_pResManager->m_hCheckMark);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief WM_DESTROY handler of Transfer Progress pane.
|
||||
* @param hwnd - window handle.
|
||||
*/
|
||||
static inline void TransferProgressPane_OnDestroy(HWND hwnd)
|
||||
{
|
||||
StopProgressAnimation(hwnd);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief WM_COMMAND handler of Transfer Progress pane.
|
||||
* @param hwnd - window handle.
|
||||
* @param id - control ID.
|
||||
* @param hwndCtl - control handle.
|
||||
* @param codeNotify - notification code.
|
||||
*/
|
||||
static void TransferProgressPane_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
|
||||
{
|
||||
hwnd; hwndCtl; codeNotify;
|
||||
switch (id)
|
||||
{
|
||||
case IDCANCEL:
|
||||
_ASSERTE(g_hTransferThread != NULL && g_pTransferThreadParams != NULL);
|
||||
HANDLE hCancellationEvent = g_pTransferThreadParams->GetCancellationEvent();
|
||||
SetEvent(hCancellationEvent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dialog procedure of Transfer Progress pane.
|
||||
* @param hwndDlg - window handle.
|
||||
* @param uMsg - message identifier.
|
||||
* @param wParam - 1st message parameter.
|
||||
* @param lParam - 2nd message parameter.
|
||||
* @return message result.
|
||||
*/
|
||||
static INT_PTR CALLBACK TransferProgressPaneProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HWND hwndCtl;
|
||||
switch (uMsg)
|
||||
{
|
||||
HANDLE_MSG(hwndDlg, WM_INITDIALOG, TransferProgressPane_OnInitDialog);
|
||||
HANDLE_MSG(hwndDlg, WM_COMMAND, TransferProgressPane_OnCommand);
|
||||
HANDLE_MSG(hwndDlg, WM_DESTROY, TransferProgressPane_OnDestroy);
|
||||
case UM_CONNECTINGTOSERVER:
|
||||
hwndCtl = GetDlgItem(hwndDlg, IDC_CONNECTINGTOSERVER_CMARK);
|
||||
ShowWindow(hwndCtl, SW_SHOW);
|
||||
return TRUE;
|
||||
case UM_SENDINGREPORT:
|
||||
hwndCtl = GetDlgItem(hwndDlg, IDC_SENDINGREPORT_CMARK);
|
||||
ShowWindow(hwndCtl, SW_SHOW);
|
||||
return TRUE;
|
||||
case UM_CHECKINGERRORSTATUS:
|
||||
hwndCtl = GetDlgItem(hwndDlg, IDC_CHECKINGERRORSTATUS_CMARK);
|
||||
ShowWindow(hwndCtl, SW_SHOW);
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create child dialog pane.
|
||||
* @param hwndParent - parent window handle.
|
||||
* @param uDialogID - dialog ID.
|
||||
* @param pfnDlgProc - dialog procedure.
|
||||
* @param lParam - additional dialog parameter.
|
||||
*/
|
||||
static HWND CreateDialogPane(HWND hwndParent, UINT uDialogID, DLGPROC pfnDlgProc, LPARAM lParam = 0)
|
||||
{
|
||||
HWND hwndPane = CreateDialogParam(g_hInstance, MAKEINTRESOURCE(uDialogID), hwndParent, pfnDlgProc, lParam);
|
||||
if (hwndPane)
|
||||
{
|
||||
SetWindowLong(hwndPane, GWL_ID, IDC_DIALOG_PANE);
|
||||
DWORD dwStyleEx = GetWindowLong(hwndPane, GWL_EXSTYLE);
|
||||
SetWindowLong(hwndPane, GWL_EXSTYLE, dwStyleEx | WS_EX_STATICEDGE);
|
||||
RECT rcClient;
|
||||
GetClientRect(hwndParent, &rcClient);
|
||||
RECT rcPane;
|
||||
GetWindowRect(hwndPane, &rcPane);
|
||||
ScreenToClient(hwndParent, (PPOINT)&rcPane);
|
||||
ScreenToClient(hwndParent, (PPOINT)&rcPane + 1);
|
||||
int x = (rcClient.right - (rcPane.right - rcPane.left)) / 2;
|
||||
int y = (rcClient.bottom - (rcPane.bottom - rcPane.top)) / 2;
|
||||
SetWindowPos(hwndPane, NULL, x, y, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW | SWP_FRAMECHANGED);
|
||||
}
|
||||
return hwndPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief WM_INITDIALOG handler of Transfer Progress dialog.
|
||||
* @param hwnd - window handle.
|
||||
* @param hwndFocus - system-defined focus window.
|
||||
* @param lParam - user-defined parameter.
|
||||
* @return true to setup focus to system-defined control.
|
||||
*/
|
||||
static BOOL TransferProgressDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
|
||||
{
|
||||
lParam; hwndFocus;
|
||||
|
||||
CenterWindow(hwnd, GetParent(hwnd));
|
||||
|
||||
HWND hwndPane = CreateDialogPane(hwnd, IDD_TRANSFERPROGRESS_PANE, TransferProgressPaneProc);
|
||||
if (hwndPane == NULL)
|
||||
goto error;
|
||||
|
||||
_ASSERTE(g_pTransferThreadParams == NULL);
|
||||
g_pTransferThreadParams = new CTransferThreadParams;
|
||||
if (g_pTransferThreadParams == NULL)
|
||||
goto error;
|
||||
g_pTransferThreadParams->SetSinkWnd(hwnd);
|
||||
_ASSERTE(g_hTransferThread == NULL);
|
||||
g_hTransferThread = StartTransferThread(g_pTransferThreadParams);
|
||||
if (g_hTransferThread == NULL)
|
||||
goto error;
|
||||
|
||||
return TRUE;
|
||||
|
||||
error:
|
||||
EndDialog(hwnd, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief WM_DESTROY handler of Transfer Progress dialog.
|
||||
* @param hwnd - window handle.
|
||||
*/
|
||||
static void TransferProgressDlg_OnDestroy(HWND hwnd)
|
||||
{
|
||||
hwnd;
|
||||
|
||||
_ASSERTE(g_hTransferThread != NULL && g_pTransferThreadParams != NULL);
|
||||
|
||||
CloseTransferThread(g_hTransferThread);
|
||||
g_hTransferThread = NULL;
|
||||
|
||||
delete g_pTransferThreadParams;
|
||||
g_pTransferThreadParams = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dialog procedure of Transfer Progress dialog.
|
||||
* @param hwndDlg - window handle.
|
||||
* @param uMsg - message identifier.
|
||||
* @param wParam - 1st message parameter.
|
||||
* @param lParam - 2nd message parameter.
|
||||
* @return message result.
|
||||
*/
|
||||
INT_PTR CALLBACK TransferProgressDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HWND hwndPane;
|
||||
switch (uMsg)
|
||||
{
|
||||
HANDLE_MSG(hwndDlg, WM_INITDIALOG, TransferProgressDlg_OnInitDialog);
|
||||
HANDLE_MSG(hwndDlg, WM_DESTROY, TransferProgressDlg_OnDestroy);
|
||||
case WM_COMMAND:
|
||||
case UM_CONNECTINGTOSERVER:
|
||||
case UM_SENDINGREPORT:
|
||||
case UM_CHECKINGERRORSTATUS:
|
||||
hwndPane = GetDlgItem(hwndDlg, IDC_DIALOG_PANE);
|
||||
if (hwndPane)
|
||||
SendMessage(hwndPane, uMsg, wParam, lParam);
|
||||
return TRUE;
|
||||
case UM_TRANSFERCOMPLETE:
|
||||
hwndPane = GetDlgItem(hwndDlg, IDC_DIALOG_PANE);
|
||||
if (hwndPane)
|
||||
{
|
||||
// on Windows 98 this causes an access violation in user32.dll
|
||||
// why does it crash? - because this is Windows 98
|
||||
//DestroyWindow(hwndPane);
|
||||
// rather than destroying the window, let's hide it
|
||||
ShowWindow(hwndPane, SW_HIDE);
|
||||
// stop progress animation
|
||||
StopProgressAnimation(hwndPane);
|
||||
// and of course panel ID should be changed to avoid conflicts
|
||||
SetWindowLong(hwndPane, GWL_ID, -1);
|
||||
// finally we can create a new panel
|
||||
hwndPane = CreateDialogPane(hwndDlg, IDD_TRANSFERSTATUS_PANE, TransferStatusPaneProc, wParam);
|
||||
if (hwndPane)
|
||||
{
|
||||
SetFocus(hwndPane);
|
||||
SendMessage(hwndPane, DM_SETDEFID, IDCANCEL, 0);
|
||||
}
|
||||
else
|
||||
EndDialog(hwndDlg, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/** @} */
|
||||
Loading…
Add table
Add a link
Reference in a new issue