186 lines
5.2 KiB
C++
186 lines
5.2 KiB
C++
/*
|
|
* This is a part of the BugTrap package.
|
|
* Copyright (c) 2005-2009 IntelleSoft.
|
|
* All rights reserved.
|
|
*
|
|
* Description: Send Mail 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 "SendMailDlg.h"
|
|
#include "BugTrapUI.h"
|
|
#include "BugTrapUtils.h"
|
|
#include "WaitDlg.h"
|
|
#include "LayoutManager.h"
|
|
#include "Globals.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
/**
|
|
* @addtogroup BugTrapUI BugTrap Graphical User Interface
|
|
* @{
|
|
*/
|
|
|
|
/// Control layouts for Send Mail dialog.
|
|
static LAYOUT_INFO g_arrSendMailLayout[] =
|
|
{
|
|
LAYOUT_INFO(IDC_RECIPIENT, ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT, ALIGN_TOP),
|
|
LAYOUT_INFO(IDC_ATTACHMENT, ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT, ALIGN_TOP),
|
|
LAYOUT_INFO(IDC_SUBJECT, ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT, ALIGN_TOP),
|
|
LAYOUT_INFO(IDC_BODY, ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT, ALIGN_BOTTOM),
|
|
LAYOUT_INFO(IDOK, ALIGN_RIGHT, ALIGN_BOTTOM, ALIGN_RIGHT, ALIGN_BOTTOM),
|
|
LAYOUT_INFO(IDCANCEL, ALIGN_RIGHT, ALIGN_BOTTOM, ALIGN_RIGHT, ALIGN_BOTTOM)
|
|
};
|
|
|
|
/// Dialog layout manager.
|
|
static CLayoutManager g_LayoutMgr;
|
|
|
|
/**
|
|
* @brief WM_COMMAND handler of Send Mail dialog.
|
|
* @param hwnd - window handle.
|
|
* @param id - control ID.
|
|
* @param hwndCtl - control handle.
|
|
* @param codeNotify - notification code.
|
|
*/
|
|
static void SendMailDlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
|
|
{
|
|
int nTextLength;
|
|
PTSTR pszSubject, pszMessage;
|
|
switch (codeNotify)
|
|
{
|
|
case BN_CLICKED:
|
|
switch (id)
|
|
{
|
|
case IDOK:
|
|
hwndCtl = GetDlgItem(hwnd, IDC_SUBJECT);
|
|
nTextLength = GetWindowTextLength(hwndCtl) + 1;
|
|
pszSubject = new TCHAR[nTextLength];
|
|
if (! pszSubject)
|
|
return;
|
|
GetWindowText(hwndCtl, pszSubject, nTextLength);
|
|
|
|
hwndCtl = GetDlgItem(hwnd, IDC_BODY);
|
|
nTextLength = GetWindowTextLength(hwndCtl) + 1;
|
|
pszMessage = new TCHAR[nTextLength];
|
|
if (! pszMessage)
|
|
{
|
|
delete[] pszSubject;
|
|
return;
|
|
}
|
|
GetWindowText(hwndCtl, pszMessage, nTextLength);
|
|
|
|
if (! SendEMail(hwnd, pszSubject, pszMessage))
|
|
{
|
|
SetForegroundWindow(hwnd);
|
|
TCHAR szProjectName[32], szMessageText[128];
|
|
LoadString(g_hInstance, IDS_BUGTRAP_NAME, szProjectName, countof(szProjectName));
|
|
LoadString(g_hInstance, IDS_ERROR_TRANSFERFAILED, szMessageText, countof(szMessageText));
|
|
::MessageBox(hwnd, szMessageText, szProjectName, MB_ICONERROR | MB_OK);
|
|
}
|
|
else
|
|
EndDialog(hwnd, TRUE);
|
|
delete[] pszSubject;
|
|
delete[] pszMessage;
|
|
break;
|
|
case IDCANCEL:
|
|
EndDialog(hwnd, FALSE);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief WM_INITDIALOG handler of Send Mail 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 SendMailDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
|
|
{
|
|
lParam; hwndFocus;
|
|
HWND hwndCtl;
|
|
_ASSERTE(g_pResManager != NULL);
|
|
if (g_pResManager->m_hBigAppIcon)
|
|
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)g_pResManager->m_hBigAppIcon);
|
|
if (g_pResManager->m_hSmallAppIcon)
|
|
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)g_pResManager->m_hSmallAppIcon);
|
|
CenterWindow(hwnd, GetParent(hwnd));
|
|
g_LayoutMgr.InitLayout(hwnd, g_arrSendMailLayout, countof(g_arrSendMailLayout));
|
|
|
|
if (g_dwFlags & BTF_ATTACHREPORT)
|
|
{
|
|
TCHAR szFileName[MAX_PATH];
|
|
g_pSymEngine->GetReportFileName(szFileName, countof(szFileName));
|
|
hwndCtl = GetDlgItem(hwnd, IDC_ATTACHMENT);
|
|
SetWindowText(hwndCtl, szFileName);
|
|
}
|
|
|
|
hwndCtl = GetDlgItem(hwnd, IDC_RECIPIENT);
|
|
SetWindowText(hwndCtl, g_szSupportEMail);
|
|
|
|
TCHAR szSubject[MAX_PATH];
|
|
GetDefaultMailSubject(szSubject, countof(szSubject));
|
|
hwndCtl = GetDlgItem(hwnd, IDC_SUBJECT);
|
|
SetWindowText(hwndCtl, szSubject);
|
|
|
|
hwndCtl = GetDlgItem(hwnd, IDC_BODY);
|
|
SetFocus(hwndCtl);
|
|
return FALSE;
|
|
}
|
|
|
|
/**
|
|
* @brief WM_SIZE handler of Send Mail dialog.
|
|
* @param hwnd - window handle.
|
|
* @param state - window state.
|
|
* @param cx - window width.
|
|
* @param cy - window height.
|
|
*/
|
|
static void SendMailDlg_OnSize(HWND hwnd, UINT state, int cx, int cy)
|
|
{
|
|
hwnd; cx; cy; state;
|
|
g_LayoutMgr.ApplyLayout();
|
|
}
|
|
|
|
/**
|
|
* @brief WM_GETMINMAXINFO handler of Send Mail State dialog.
|
|
* @param hwnd - window handle.
|
|
* @param pMinMaxInfo - window min-max info.
|
|
*/
|
|
static void SendMailDlg_OnGetMinMaxInfo(HWND hwnd, PMINMAXINFO pMinMaxInfo)
|
|
{
|
|
hwnd;
|
|
pMinMaxInfo->ptMinTrackSize = g_LayoutMgr.GetMinTrackSize();
|
|
}
|
|
|
|
/**
|
|
* @brief Dialog procedure of Send Mail 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 SendMailDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (uMsg)
|
|
{
|
|
HANDLE_MSG(hwndDlg, WM_INITDIALOG, SendMailDlg_OnInitDialog);
|
|
HANDLE_MSG(hwndDlg, WM_COMMAND, SendMailDlg_OnCommand);
|
|
HANDLE_MSG(hwndDlg, WM_SIZE, SendMailDlg_OnSize);
|
|
HANDLE_MSG(hwndDlg, WM_GETMINMAXINFO, SendMailDlg_OnGetMinMaxInfo);
|
|
default: return FALSE;
|
|
}
|
|
}
|
|
|
|
/** @} */
|