WindowsXP-SP1/admin/burnslib/src/popup.cpp
2020-09-30 16:53:49 +02:00

290 lines
4.7 KiB
C++

// Copyright (c) 1997-1999 Microsoft Corporation
//
// Popup message box class
//
// 8-31-98 sburns
#include "headers.hxx"
Popup::Popup(UINT titleStringResID, bool systemModal_)
:
initialized(false),
systemModal(systemModal_),
title(),
titleResId(titleStringResID)
{
LOG_CTOR(Popup);
ASSERT(titleResId);
}
Popup::Popup(const String& title_, bool systemModal_)
:
initialized(true),
systemModal(systemModal_),
title(title_),
titleResId(0)
{
LOG_CTOR(Popup);
}
void
Popup::Gripe(HWND parentDialog, int editResID, UINT errStringResID)
{
Gripe(parentDialog, editResID, String::load(errStringResID));
}
void
Popup::checkInit()
{
if (!initialized)
{
ASSERT(titleResId);
title = Win::LoadString(titleResId);
if (!title.empty())
{
initialized = true;
}
}
}
void
Popup::Info(
HWND parentDialog,
UINT messageStringResID)
{
ASSERT(messageStringResID);
Info(parentDialog, String::load(messageStringResID));
}
void
Popup::Info(
HWND parentDialog,
const String& message)
{
LOG_FUNCTION(Popup::Info);
ASSERT(Win::IsWindow(parentDialog));
ASSERT(!message.empty());
checkInit();
Win::MessageBox(
parentDialog,
message,
title,
MB_OK
| MB_ICONINFORMATION
| getStyleMask());
}
void
Popup::Gripe(
HWND parentDialog,
int editResID,
const String& message)
{
LOG_FUNCTION(Popup::Gripe);
ASSERT(Win::IsWindow(parentDialog));
ASSERT(!message.empty());
ASSERT(editResID);
checkInit();
Win::MessageBox(
parentDialog,
message,
title,
MB_OK | MB_ICONERROR | getStyleMask());
HWND edit = Win::GetDlgItem(parentDialog, editResID);
Win::SendMessage(edit, EM_SETSEL, 0, -1);
Win::SetFocus(edit);
}
void
Popup::Gripe(
HWND parentDialog,
const String& message)
{
LOG_FUNCTION(Popup::Gripe);
ASSERT(Win::IsWindow(parentDialog));
ASSERT(!message.empty());
checkInit();
Win::MessageBox(
parentDialog,
message,
title,
MB_OK | MB_ICONERROR | getStyleMask());
}
void
Popup::Gripe(
HWND parentDialog,
int editResID,
HRESULT hr,
const String& message)
{
Error(parentDialog, hr, message);
HWND edit = Win::GetDlgItem(parentDialog, editResID);
Win::SendMessage(edit, EM_SETSEL, 0, -1);
Win::SetFocus(edit);
}
void
Popup::Error(
HWND parent,
HRESULT hr,
const String& message)
{
LOG_FUNCTION(Popup::Error);
ASSERT(Win::IsWindow(parent));
ASSERT(!message.empty());
checkInit();
String newMessage = message + L"\n\n";
if (FAILED(hr))
{
String errorMessage = GetErrorMessage(hr);
if (errorMessage.empty())
{
// these are error codes for which there are no descriptions
newMessage += String::format(IDS_HRESULT_SANS_MESSAGE, hr);
}
else
{
newMessage += errorMessage;
}
}
Win::MessageBox(
parent,
newMessage,
title,
MB_ICONERROR | MB_OK | getStyleMask());
}
void
Popup::Error(
HWND parent,
HRESULT hr,
UINT messageResID)
{
Error(parent, hr, String::load(messageResID));
}
void
Popup::Error(
HWND parentDialog,
UINT messageStringResID)
{
Error(parentDialog, String::load(messageStringResID));
}
void
Popup::Error(
HWND parentDialog,
const String& message)
{
LOG_FUNCTION(Popup::Error);
ASSERT(Win::IsWindow(parentDialog));
ASSERT(!message.empty());
checkInit();
Win::MessageBox(
parentDialog,
message,
title,
MB_OK
| MB_ICONERROR
| getStyleMask());
}
int
Popup::MessageBox(
HWND parentDialog,
const String& message,
UINT flags)
{
LOG_FUNCTION(Popup::MessageBox);
ASSERT(!message.empty());
// can't assert flags 'cause MB_OK is 0
checkInit();
return
Win::MessageBox(
parentDialog,
message,
title,
flags | getStyleMask());
}
int
Popup::MessageBox(
HWND parentDialog,
UINT messageStringResID,
UINT flags)
{
return MessageBox(parentDialog, String::load(messageStringResID), flags);
}
UINT
Popup::getStyleMask()
{
UINT mask = 0;
if (systemModal)
{
mask |= MB_SETFOREGROUND | MB_SYSTEMMODAL;
}
else
{
mask |= MB_APPLMODAL;
}
return mask;
}