181 lines
5.4 KiB
C++
181 lines
5.4 KiB
C++
|
/*
|
||
|
* Reporting.cpp
|
||
|
* -------------
|
||
|
* Purpose: A class for showing notifications, prompts, etc...
|
||
|
* Notes : (currently none)
|
||
|
* Authors: OpenMPT Devs
|
||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "Reporting.h"
|
||
|
#include "../mptrack/Mainfrm.h"
|
||
|
#include "../mptrack/InputHandler.h"
|
||
|
|
||
|
|
||
|
OPENMPT_NAMESPACE_BEGIN
|
||
|
|
||
|
|
||
|
static inline UINT LogLevelToFlags(LogLevel level)
|
||
|
{
|
||
|
switch(level)
|
||
|
{
|
||
|
case LogDebug: return MB_OK; break;
|
||
|
case LogNotification: return MB_OK; break;
|
||
|
case LogInformation: return MB_OK | MB_ICONINFORMATION; break;
|
||
|
case LogWarning: return MB_OK | MB_ICONWARNING; break;
|
||
|
case LogError: return MB_OK | MB_ICONERROR; break;
|
||
|
}
|
||
|
return MB_OK;
|
||
|
}
|
||
|
|
||
|
|
||
|
static CString GetTitle()
|
||
|
{
|
||
|
return MAINFRAME_TITLE;
|
||
|
}
|
||
|
|
||
|
|
||
|
static CString FillEmptyCaption(const CString &caption, LogLevel level)
|
||
|
{
|
||
|
CString result = caption;
|
||
|
if(result.IsEmpty())
|
||
|
{
|
||
|
result = GetTitle() + _T(" - ");
|
||
|
switch(level)
|
||
|
{
|
||
|
case LogDebug: result += _T("Debug"); break;
|
||
|
case LogNotification: result += _T("Notification"); break;
|
||
|
case LogInformation: result += _T("Information"); break;
|
||
|
case LogWarning: result += _T("Warning"); break;
|
||
|
case LogError: result += _T("Error"); break;
|
||
|
}
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
|
||
|
static CString FillEmptyCaption(const CString &caption)
|
||
|
{
|
||
|
CString result = caption;
|
||
|
if(result.IsEmpty())
|
||
|
{
|
||
|
result = GetTitle();
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
|
||
|
static UINT ShowNotificationImpl(const CString &text, const CString &caption, UINT flags, const CWnd *parent)
|
||
|
{
|
||
|
if(parent == nullptr)
|
||
|
{
|
||
|
parent = CMainFrame::GetActiveWindow();
|
||
|
}
|
||
|
BypassInputHandler bih;
|
||
|
UINT result = ::MessageBox(parent->GetSafeHwnd(), text, caption.IsEmpty() ? CString(MAINFRAME_TITLE) : caption, flags);
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
|
||
|
UINT Reporting::CustomNotification(const AnyStringLocale &text, const AnyStringLocale &caption, UINT flags, const CWnd *parent)
|
||
|
{
|
||
|
return ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(mpt::ToCString(caption)), flags, parent);
|
||
|
}
|
||
|
|
||
|
|
||
|
void Reporting::Notification(const AnyStringLocale &text, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(CString(), LogNotification), LogLevelToFlags(LogNotification), parent);
|
||
|
}
|
||
|
void Reporting::Notification(const AnyStringLocale &text, const AnyStringLocale &caption, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(mpt::ToCString(caption), LogNotification), LogLevelToFlags(LogNotification), parent);
|
||
|
}
|
||
|
|
||
|
|
||
|
void Reporting::Information(const AnyStringLocale &text, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(CString(), LogInformation), LogLevelToFlags(LogInformation), parent);
|
||
|
}
|
||
|
void Reporting::Information(const AnyStringLocale &text, const AnyStringLocale &caption, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(mpt::ToCString(caption), LogInformation), LogLevelToFlags(LogInformation), parent);
|
||
|
}
|
||
|
|
||
|
|
||
|
void Reporting::Warning(const AnyStringLocale &text, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(CString(), LogWarning), LogLevelToFlags(LogWarning), parent);
|
||
|
}
|
||
|
void Reporting::Warning(const AnyStringLocale &text, const AnyStringLocale &caption, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(mpt::ToCString(caption), LogWarning), LogLevelToFlags(LogWarning), parent);
|
||
|
}
|
||
|
|
||
|
|
||
|
void Reporting::Error(const AnyStringLocale &text, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(CString(), LogError), LogLevelToFlags(LogError), parent);
|
||
|
}
|
||
|
void Reporting::Error(const AnyStringLocale &text, const AnyStringLocale &caption, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(mpt::ToCString(caption), LogError), LogLevelToFlags(LogError), parent);
|
||
|
}
|
||
|
|
||
|
|
||
|
void Reporting::Message(LogLevel level, const AnyStringLocale &text, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(CString(), level), LogLevelToFlags(level), parent);
|
||
|
}
|
||
|
void Reporting::Message(LogLevel level, const AnyStringLocale &text, const AnyStringLocale &caption, const CWnd *parent)
|
||
|
{
|
||
|
ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(mpt::ToCString(caption), level), LogLevelToFlags(level), parent);
|
||
|
}
|
||
|
|
||
|
|
||
|
ConfirmAnswer Reporting::Confirm(const AnyStringLocale &text, bool showCancel, bool defaultNo, const CWnd *parent)
|
||
|
{
|
||
|
return Confirm(mpt::ToCString(text), GetTitle() + _T(" - Confirmation"), showCancel, defaultNo, parent);
|
||
|
}
|
||
|
|
||
|
|
||
|
ConfirmAnswer Reporting::Confirm(const AnyStringLocale &text, const AnyStringLocale &caption, bool showCancel, bool defaultNo, const CWnd *parent)
|
||
|
{
|
||
|
UINT result = ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(mpt::ToCString(caption)), (showCancel ? MB_YESNOCANCEL : MB_YESNO) | MB_ICONQUESTION | (defaultNo ? MB_DEFBUTTON2 : 0), parent);
|
||
|
switch(result)
|
||
|
{
|
||
|
case IDYES:
|
||
|
return cnfYes;
|
||
|
case IDNO:
|
||
|
return cnfNo;
|
||
|
default:
|
||
|
case IDCANCEL:
|
||
|
return cnfCancel;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
RetryAnswer Reporting::RetryCancel(const AnyStringLocale &text, const CWnd *parent)
|
||
|
{
|
||
|
return RetryCancel(mpt::ToCString(text), GetTitle(), parent);
|
||
|
}
|
||
|
|
||
|
|
||
|
RetryAnswer Reporting::RetryCancel(const AnyStringLocale &text, const AnyStringLocale &caption, const CWnd *parent)
|
||
|
{
|
||
|
UINT result = ShowNotificationImpl(mpt::ToCString(text), FillEmptyCaption(mpt::ToCString(caption)), MB_RETRYCANCEL, parent);
|
||
|
switch(result)
|
||
|
{
|
||
|
case IDRETRY:
|
||
|
return rtyRetry;
|
||
|
default:
|
||
|
case IDCANCEL:
|
||
|
return rtyCancel;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
OPENMPT_NAMESPACE_END
|