iw6-mod/src/common/utils/toast.cpp
2024-01-24 10:45:25 +01:00

110 lines
2.5 KiB
C++

#include "toast.hpp"
#include "string.hpp"
#pragma warning(push)
#pragma warning(disable: 6387)
#include <wintoastlib.h>
#pragma warning(pop)
namespace utils
{
namespace
{
bool initialize()
{
static bool initialized = false;
static bool success = false;
if (initialized)
{
return success;
}
initialized = true;
auto* instance = WinToastLib::WinToast::instance();
if (!instance)
{
success = false;
return success;
}
instance->setAppName(L"iw6-mod");
instance->setAppUserModelId(
WinToastLib::WinToast::configureAUMI(L"AlterWare", L"iw6-mod", L"", L"20201212"));
WinToastLib::WinToast::WinToastError error;
success = instance->initialize(&error);
return success;
}
class toast_handler : public WinToastLib::IWinToastHandler
{
public:
void toastActivated() const override
{
}
void toastActivated(const int /*actionIndex*/) const override
{
}
void toastFailed() const override
{
}
void toastDismissed(WinToastDismissalReason /*state*/) const override
{
}
};
}
toast::toast(const int64_t id)
: id_(id)
{
}
toast::operator bool() const
{
return this->id_ >= 0;
}
void toast::hide() const
{
if (this->operator bool())
{
WinToastLib::WinToast::instance()->hideToast(this->id_);
}
}
toast toast::show(const std::string& title, const std::string& text)
{
if (!initialize())
{
return toast{-1};
}
WinToastLib::WinToastTemplate toast_template(WinToastLib::WinToastTemplate::Text02);
toast_template.setTextField(string::convert(title), WinToastLib::WinToastTemplate::FirstLine);
toast_template.setTextField(string::convert(text), WinToastLib::WinToastTemplate::SecondLine);
toast_template.setDuration(WinToastLib::WinToastTemplate::Long);
return toast{WinToastLib::WinToast::instance()->showToast(toast_template, new toast_handler())};
}
toast toast::show(const std::string& title, const std::string& text, const std::string& image)
{
if (!initialize())
{
return {-1};
}
WinToastLib::WinToastTemplate toast_template(WinToastLib::WinToastTemplate::ImageAndText02);
toast_template.setTextField(string::convert(title), WinToastLib::WinToastTemplate::FirstLine);
toast_template.setTextField(string::convert(text), WinToastLib::WinToastTemplate::SecondLine);
toast_template.setDuration(WinToastLib::WinToastTemplate::Long);
toast_template.setImagePath(string::convert(image));
return {WinToastLib::WinToast::instance()->showToast(toast_template, new toast_handler())};
}
}