reman3/Rayman_X/cpa/tempgrp/ERO/Src/ErO_DgIf.cpp

530 lines
17 KiB
C++

// ErO_DgIf.cpp : implementation file
/////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "ErO_DgIf.hpp"
#include "ErO_Stat.hpp"
#include "ErOTeam.hpp"
#include "ErO_Op.hpp"
#include "ErO_Priv.hpp"
#include "ErOReprt.hpp"
/////////////////////////////////////////////////////////
//Array of ID
UINT g_a_uiID[ERO_STATIC_TYPE__NUMBER_OF_TYPES - 1]=
{
IDD_DIALOG_MORE_INFO1,
IDD_DIALOG_MORE_INFO2,
IDD_DIALOG_MORE_INFO3,
IDD_DIALOG_MORE_INFO4,
IDD_DIALOG_MORE_INFO5,
};
/////////////////////////////////////////////////////////
#define ERO_C_SPACING_WITH_BORDER 14
#define ERO_C_NUMBER_OF_BACKGROUND_BITMAPS 2
extern HMODULE g_hModule;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// ErO_MoreInfoDialog dialog
BEGIN_MESSAGE_MAP(ErO_MoreInfoDialog, CDialog)
//{{AFX_MSG_MAP(ErO_MoreInfoDialog)
ON_WM_MOUSEMOVE()
// ON_BN_CLICKED(IDC_BUTTON_SEND_MESSAGE, OnButtonSendMessage)
ON_BN_CLICKED(IDC_BUTTON_MAKE_REPORT, OnButtonMakeReport)
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDOWN()
#ifdef ERO_BITMAP_AS_BACKGROUND
ON_WM_PAINT()
#endif //ERO_BITMAP_AS_BACKGROUND
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//***************************************************************************
ErO_MoreInfoDialog::ErO_MoreInfoDialog(CWnd* pParent,
CPoint cpPoint,
enum ErO_eStaticType _tdeType)
: CDialog(g_a_uiID[_tdeType - 1], pParent)
{
//{{AFX_DATA_INIT(ErO_MoreInfoDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pri_cpPoint = cpPoint;
m_pri_eType = _tdeType;
m_pri_bHasCapturedMouse= FALSE;
}
//***************************************************************************
ErO_MoreInfoDialog::~ErO_MoreInfoDialog()
{
POSITION pos = m_pri_clListOfID.GetHeadPosition();
while ( pos != NULL )
delete m_pri_clListOfID.GetNext(pos);
}
//***************************************************************************
void ErO_MoreInfoDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(ErO_MoreInfoDialog)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// ErO_MoreInfoDialog message handlers
//***************************************************************************
BOOL ErO_MoreInfoDialog::OnInitDialog()
{
CDialog::OnInitDialog();
long lMaxLength = m_pri_fn_l_ComputeLongestString();
m_pri_BuilListOfID();
m_pri_MoveControls(lMaxLength);
CRect crWindowRect;
GetWindowRect(crWindowRect);
//Moves Rect to right position
crWindowRect.OffsetRect(m_pri_cpPoint.x - crWindowRect.left,
m_pri_cpPoint.y - crWindowRect.top);
//Adjusts Rect's size
crWindowRect.right = crWindowRect.left + lMaxLength + 2*ERO_C_SPACING_WITH_BORDER;
if ( m_pri_eType == ERO_STATIC_TYPE__MODULE )
{
//Gets Team
ErrorOperator_Team *pclTeam = g_clListOfTeams.m_pub_fn_pclGetTeamFromModuleName(g_csModuleName);
if ( pclTeam != NULL )
{
CString csProgName = pclTeam->m_csMainProgrammerName;
csProgName.MakeLower();
HICON hIcon;
if ( csProgName.Find("babitch") != -1 )
{
hIcon = ::LoadIcon(g_hModule, MAKEINTRESOURCE(IDI_ICON_PROG_YB));
((CStatic *)GetDlgItem(IDC_IMAGE))->SetIcon(hIcon);
}
else if ( csProgName.Find("billault") != -1 )
{
hIcon = ::LoadIcon(g_hModule, MAKEINTRESOURCE(IDI_ICON_PROG_XB));
((CStatic *)GetDlgItem(IDC_IMAGE))->SetIcon(hIcon);
}
else if ( csProgName.Find("reizer") != -1 )
{
hIcon = ::LoadIcon(g_hModule, MAKEINTRESOURCE(IDI_ICON_PROG_DR));
((CStatic *)GetDlgItem(IDC_IMAGE))->SetIcon(hIcon);
}
else
GetDlgItem(IDC_IMAGE)->ShowWindow(SW_HIDE);
}
else
{
GetDlgItem(IDC_IMAGE)->ShowWindow(SW_HIDE);
//Cannot send a message
// GetDlgItem(IDC_BUTTON_SEND_MESSAGE)->ShowWindow(SW_HIDE);
}
}
else if ( m_pri_eType == ERO_STATIC_TYPE__ACTION )
{
//Resizes window to show all lines of ListBox
/* CListBox *pclListBox = (CListBox *)GetDlgItem(IDC_LIST_ADD_INFO);
short wListBoxHeight = pclListBox->GetCount() * pclListBox->GetItemHeight(0) + 2;
CRect crLBRect;
pclListBox->GetWindowRect(crLBRect);
crLBRect.bottom = crLBRect.top + wListBoxHeight;
crWindowRect.bottom = crLBRect.bottom + ERO_C_SPACING_WITH_BORDER;
ScreenToClient(&crLBRect);
pclListBox->MoveWindow(crLBRect);*/
}
//Moves Window
MoveWindow(crWindowRect);
SetCapture();
#ifdef ERO_BITMAP_AS_BACKGROUND
//Selects a bitmap
/* srand((unsigned)time( NULL ));
int iRandomNumber = rand();
iRandomNumber = (iRandomNumber * ERO_C_NUMBER_OF_BACKGROUND_BITMAPS) / RAND_MAX + 1;
CString csResourceName;
csResourceName.Format("IDB_BITMAP_BACKGROUND_%i", iRandomNumber);
m_pri_cBackgroundBitmap.LoadBitmap(csResourceName);*/
m_pri_cBackgroundBitmap.LoadBitmap(IDB_BITMAP_BACKGROUND_1);
#endif //ERO_BITMAP_AS_BACKGROUND
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//***************************************************************************
void ErO_MoreInfoDialog::OnMouseMove(UINT nFlags, CPoint point)
{
if ( !m_pri_bHasCapturedMouse )
{
SetCapture();
GetWindowRect(m_pri_crWindowRect);
m_pri_bHasCapturedMouse = TRUE;
}
if ( m_pri_bHasCapturedMouse )
{
CPoint cpTempPoint(point);
ClientToScreen(&cpTempPoint);
if ( !m_pri_crWindowRect.PtInRect(cpTempPoint) )
{
ReleaseCapture();
m_pri_bHasCapturedMouse = FALSE;
EndDialog(IDOK);
}
}
//For buttons response
if ( m_pri_eType == ERO_STATIC_TYPE__MODULE )
{
WPARAM wParam = nFlags;
LPARAM lParam = point.x << (sizeof(LPARAM) / 2) + point.y;
// GetDlgItem(IDC_BUTTON_SEND_MESSAGE)->SendMessage(WM_MOUSEMOVE, wParam, lParam);
}
CDialog::OnMouseMove(nFlags, point);
}
//***************************************************************************
void ErO_MoreInfoDialog::OnLButtonUp(UINT nFlags, CPoint point)
{
//For buttons response
if ( m_pri_eType == ERO_STATIC_TYPE__MODULE )
{
WPARAM wParam = nFlags;
LPARAM lParam = point.x << (sizeof(LPARAM) / 2) + point.y;
// GetDlgItem(IDC_BUTTON_SEND_MESSAGE)->SendMessage(WM_LBUTTONUP, wParam, lParam);
}
CDialog::OnLButtonUp(nFlags, point);
}
//***************************************************************************
void ErO_MoreInfoDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
//For buttons response
if ( m_pri_eType == ERO_STATIC_TYPE__MODULE )
{
WPARAM wParam = nFlags;
LPARAM lParam = point.x << (sizeof(LPARAM) / 2) + point.y;
// GetDlgItem(IDC_BUTTON_SEND_MESSAGE)->SendMessage(WM_LBUTTONDOWN, wParam, lParam);
}
CDialog::OnLButtonDown(nFlags, point);
}
//***************************************************************************
/*void ErO_MoreInfoDialog::OnButtonSendMessage()
{
//Gets Team
ErrorOperator_Team *pclTeam = g_clListOfTeams.m_pub_fn_pclGetTeamFromModuleName(g_csModuleName);
if ( pclTeam != NULL )
{
CString csProgName = pclTeam->m_csMainProgrammerName;
//Builds a name with first name first letter and name
short wIndex = csProgName.Find(" ");
if ( wIndex != -1 )
{
CString csNetSendName = csProgName.Left(1) + csProgName.Right(csProgName.GetLength() - wIndex - 1);
CString csNetSendMessage = CString('"') + "Your module '" + g_csModuleName
+ "' has crashed while : " + g_csCurrentAction + '"';
CString csCommanLine = "net send " + csNetSendName + " " + csNetSendMessage;
WinExec(csCommanLine, SW_HIDE);
}
}
} */
//***************************************************************************
void ErO_MoreInfoDialog::OnButtonMakeReport()
{
ErrorOperator_DialogReport ReportDial(this);
ReportDial.DoModal();
SetCapture();
}
//***************************************************************************
#define ERO_M_ADD_ID(ID) \
pclUI = new UINT; \
*pclUI = ID; \
m_pri_clListOfID.AddTail(pclUI);
//***************************************************************************
void ErO_MoreInfoDialog::m_pri_BuilListOfID()
{
UINT *pclUI;
switch ( m_pri_eType )
{
case ERO_STATIC_TYPE__MODULE:
ERO_M_ADD_ID(IDC_TEXT_TITLE);
ERO_M_ADD_ID(IDC_MODULE_NAME);
ERO_M_ADD_ID(IDC_MODULE_VERSION);
ERO_M_ADD_ID(IDC_MODULE_MAIN_NAME);
ERO_M_ADD_ID(IDC_MODULE_MAIN_PHONE);
ERO_M_ADD_ID(IDC_MODULE_MAIN_MAIL);
ERO_M_ADD_ID(IDC_MODULE_SECOND_NAME);
ERO_M_ADD_ID(IDC_MODULE_SECOND_PHONE);
ERO_M_ADD_ID(IDC_MODULE_SECOND_MAIL);
ERO_M_ADD_ID(IDC_MODULE_RESPONSIBLE_NAME);
ERO_M_ADD_ID(IDC_MODULE_RESPONSIBLE_PHONE);
ERO_M_ADD_ID(IDC_MODULE_RESPONSIBLE_MAIL);
break;
case ERO_STATIC_TYPE__ACTION:
ERO_M_ADD_ID(IDC_TEXT_TITLE);
ERO_M_ADD_ID(IDC_CURRENT_ACTION);
ERO_M_ADD_ID(IDC_LIST_ADD_INFO);
break;
case ERO_STATIC_TYPE__DEBUG:
ERO_M_ADD_ID(IDC_TEXT_TITLE);
ERO_M_ADD_ID(IDC_FILE_NAME);
ERO_M_ADD_ID(IDC_LINE_NUMBER);
ERO_M_ADD_ID(IDC_FILE_DATE);
ERO_M_ADD_ID(IDC_FUNCTION);
break;
case ERO_STATIC_TYPE__SCRIPT:
ERO_M_ADD_ID(IDC_TEXT_TITLE);
ERO_M_ADD_ID(IDC_FILE_NAME);
ERO_M_ADD_ID(IDC_LINE_NUMBER);
break;
case ERO_STATIC_TYPE__ADDITIONNAL:
ERO_M_ADD_ID(IDC_TEXT_TITLE);
ERO_M_ADD_ID(IDC_ERROR_TYPE);
ERO_M_ADD_ID(IDC_EXPLANATION);
break;
};
}
//***************************************************************************
void ErO_MoreInfoDialog::m_pri_MoveControls(long _lWidth)
{
CWnd *pclWnd;
CRect crControlRect;
POSITION pos = m_pri_clListOfID.GetHeadPosition();
while ( pos != NULL )
{
pclWnd = GetDlgItem(*m_pri_clListOfID.GetNext(pos));
if ( pclWnd != NULL )
{
pclWnd->GetWindowRect(crControlRect);
ScreenToClient(crControlRect);
crControlRect.right = crControlRect.left + _lWidth;
pclWnd->MoveWindow(crControlRect);
}
}
}
//***************************************************************************
long ErO_MoreInfoDialog::m_pri_fn_l_ComputeLongestString()
{
CClientDC dc(this);
dc.SelectObject(GetFont());
long lMaxLength = 0;
CString csTempString;
//Gets Team
ErrorOperator_Team *pclTeam = g_clListOfTeams.m_pub_fn_pclGetTeamFromModuleName(g_csModuleName);
switch ( m_pri_eType )
{
case ERO_STATIC_TYPE__MODULE:
csTempString = "Module additionnal informations";
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
csTempString = g_csModuleName.IsEmpty() ? ERO_C_szUnknown : g_csModuleName;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_NAME)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csModuleVersion;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_VERSION)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csMainProgrammerName;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_MAIN_NAME)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csMainProgrammerPhoneNumber;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_MAIN_PHONE)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csMainProgrammerEMailAddress;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_MAIN_MAIL)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csResponsibleName;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_RESPONSIBLE_NAME)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csResponsiblePhoneNumber;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_RESPONSIBLE_PHONE)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csResponsibleEMailAddress;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_RESPONSIBLE_MAIL)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csSecondProgrammerName;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_SECOND_NAME)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csSecondProgrammerPhoneNumber;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_SECOND_PHONE)->SetWindowText(csTempString);
csTempString = (pclTeam == NULL) ? ERO_C_szUnknown : pclTeam->m_csSecondProgrammerEMailAddress;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_MODULE_SECOND_MAIL)->SetWindowText(csTempString);
break;
case ERO_STATIC_TYPE__ACTION:
{
csTempString = "Current action additionnal informations";
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
csTempString = g_csCurrentAction.IsEmpty() ? ERO_C_szUnknown : g_csCurrentAction;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_CURRENT_ACTION)->SetWindowText(csTempString);
//Fills list box with strings
CStringList clStringList;
ErO_fn_vBuildStringListForInfos(g_csAddedInfo, &clStringList);
POSITION pos = clStringList.GetHeadPosition();
while (pos != NULL )
{
csTempString = clStringList.GetNext(pos);
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
((CListBox *)GetDlgItem(IDC_LIST_ADD_INFO))->AddString(csTempString);
}
}
break;
case ERO_STATIC_TYPE__DEBUG:
csTempString = "Debug additionnal informations";
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
csTempString = g_csCurrentFileName;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_FILE_NAME)->SetWindowText(csTempString);
csTempString.Format("%i", g_wCurrentFileLine);
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_LINE_NUMBER)->SetWindowText(csTempString);
csTempString = g_csLastModif;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_FILE_DATE)->SetWindowText(csTempString);
csTempString = g_csCurrentFunction.IsEmpty() ? ERO_C_szUnknown : g_csCurrentFunction;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_FUNCTION)->SetWindowText(csTempString);
break;
case ERO_STATIC_TYPE__SCRIPT:
csTempString = "Script additionnal informations";
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
csTempString = g_csCurrentScriptFileName.IsEmpty() ? ERO_C_szUnknown : g_csCurrentScriptFileName;
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_FILE_NAME)->SetWindowText(csTempString);
if ( !g_csCurrentScriptFileName.IsEmpty() )
csTempString.Format("%i", g_wCurrentScriptLine);
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_LINE_NUMBER)->SetWindowText(csTempString);
break;
case ERO_STATIC_TYPE__ADDITIONNAL:
csTempString = "Global informations";
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
csTempString = g_cslGravityMessages.GetAt(g_cslGravityMessages.FindIndex(g_eErrorGravity));
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_ERROR_TYPE)->SetWindowText(csTempString);
csTempString = g_cslGravityExplanations.GetAt(g_cslGravityExplanations.FindIndex(g_eErrorGravity));
lMaxLength = max(dc.GetTextExtent(csTempString).cx, lMaxLength);
GetDlgItem(IDC_EXPLANATION)->SetWindowText(csTempString);
break;
};
return lMaxLength + 10;
}
#ifdef ERO_BITMAP_AS_BACKGROUND
//***************************************************************************
void ErO_MoreInfoDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
//Displays BackGround bitmap
CDC pdc;
pdc.CreateCompatibleDC(&dc);
pdc.SelectObject(m_pri_cBackgroundBitmap);
//Gets Bitmap Size
short wBitmapHeight, wBitmapWidth;
wBitmapHeight = wBitmapWidth = 160;
CRect crClientRect;
GetClientRect(crClientRect);
char cXTileNumber = crClientRect.Width() / wBitmapWidth + 1;
char cYTileNumber = crClientRect.Height() / wBitmapHeight + 1;
char cXC, cYC;
for (cXC = 0; cXC < cXTileNumber; cXC ++)
{
for (cYC = 0; cYC < cYTileNumber; cYC ++)
{
//Tiles Bitmap
dc.BitBlt(cXC * wBitmapWidth,
cYC * wBitmapHeight,
wBitmapHeight, wBitmapWidth,
&pdc,
0, 0,
SRCCOPY);
}
}
// Do not call CDialog::OnPaint() for painting messages
}
#endif //ERO_BITMAP_AS_BACKGROUND