forked from alterware/iw6-mod
110 lines
2.5 KiB
C++
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())};
|
|
}
|
|
}
|