138 lines
4.1 KiB
C++
138 lines
4.1 KiB
C++
#include "foobar2000.h"
|
|
|
|
void popup_message::g_show_ex(const char * p_msg,unsigned p_msg_length,const char * p_title,unsigned p_title_length,t_icon p_icon)
|
|
{
|
|
// Do not force instantiate, not all platforms have this
|
|
service_enum_t< popup_message > e;
|
|
service_ptr_t< popup_message > m;
|
|
if (e.first( m ) ) {
|
|
m->show_ex( p_msg, p_msg_length, p_title, p_title_length, p_icon );
|
|
}
|
|
}
|
|
|
|
|
|
void popup_message::g_complain(const char * what) {
|
|
g_show(what, "Information", icon_error);
|
|
}
|
|
|
|
void popup_message::g_complain(const char * p_whatFailed, const std::exception & p_exception) {
|
|
g_complain(p_whatFailed,p_exception.what());
|
|
}
|
|
void popup_message::g_complain(const char * p_whatFailed, const char * msg) {
|
|
g_complain( PFC_string_formatter() << p_whatFailed << ": " << msg );
|
|
}
|
|
|
|
#if FOOBAR2000_TARGET_VERSION >= 80
|
|
void popup_message_v3::show_query( const char * title, const char * msg, unsigned buttons, completion_notify::ptr reply) {
|
|
query_t q;
|
|
q.title = title; q.msg = msg; q.buttons = buttons; q.reply = reply;
|
|
this->show_query( q );
|
|
}
|
|
#endif
|
|
|
|
|
|
#ifdef FOOBAR2000_DESKTOP_WINDOWS
|
|
void popup_message_v2::g_show(HWND parent, const char * msg, const char * title) {
|
|
service_enum_t< popup_message_v2 > e;
|
|
service_ptr_t< popup_message_v2 > m;
|
|
if (e.first( m )) {
|
|
m->show(parent, msg, title);
|
|
} else {
|
|
popup_message::g_show( msg, title );
|
|
}
|
|
}
|
|
void popup_message_v2::g_complain(HWND parent, const char * whatFailed, const char * msg) {
|
|
g_show(parent, PFC_string_formatter() << whatFailed << ": " << msg);
|
|
}
|
|
void popup_message_v2::g_complain(HWND parent, const char * whatFailed, const std::exception & e) {
|
|
g_complain(parent, whatFailed, e.what());
|
|
}
|
|
#endif // FOOBAR2000_DESKTOP_WINDOWS
|
|
|
|
#ifdef FOOBAR2000_MODERN
|
|
void fb2k::showToast( const char * msg ) {
|
|
fb2k::popup_toast::arg_t arg;
|
|
fb2k::popup_toast::get()->show_toast(msg, arg);
|
|
}
|
|
|
|
void fb2k::showToastLongDuration( const char * msg ) {
|
|
fb2k::popup_toast::arg_t arg;
|
|
arg.longDuration = true;
|
|
fb2k::popup_toast::get()->show_toast(msg, arg);
|
|
}
|
|
void popup_message::g_showToast(const char * msg) {
|
|
fb2k::showToast( msg );
|
|
}
|
|
void popup_message::g_showToastLongDuration(const char * msg) {
|
|
fb2k::showToastLongDuration( msg );
|
|
}
|
|
|
|
#endif // FOOBAR2000_MODERN
|
|
|
|
#if defined(FOOBAR2000_DESKTOP_WINDOWS) && FOOBAR2000_TARGET_VERSION >= 80
|
|
int popup_message_v3::messageBox(HWND parent, const char* msg, const char* title, UINT flags) {
|
|
query_t q = {};
|
|
q.title = title;
|
|
q.msg = msg;
|
|
q.wndParent = parent;
|
|
|
|
switch (flags & 0xF) {
|
|
default:
|
|
case MB_OK:
|
|
q.buttons = buttonOK;
|
|
q.defButton = buttonOK;
|
|
break;
|
|
case MB_OKCANCEL:
|
|
q.buttons = buttonOK | buttonCancel;
|
|
q.defButton = (flags & MB_DEFBUTTON2) ? buttonCancel : buttonOK;
|
|
break;
|
|
case MB_ABORTRETRYIGNORE:
|
|
q.buttons = buttonAbort | buttonRetry | buttonIgnore;
|
|
if (flags & MB_DEFBUTTON3) q.defButton = buttonIgnore;
|
|
else if (flags & MB_DEFBUTTON2) q.defButton = buttonRetry;
|
|
else q.defButton = buttonAbort;
|
|
break;
|
|
case MB_YESNOCANCEL:
|
|
q.buttons = buttonYes | buttonNo | buttonCancel;
|
|
if (flags & MB_DEFBUTTON3) q.defButton = buttonCancel;
|
|
else if (flags & MB_DEFBUTTON2) q.defButton = buttonNo;
|
|
else q.defButton = buttonYes;
|
|
break;
|
|
case MB_YESNO:
|
|
q.buttons = buttonYes | buttonNo;
|
|
q.defButton = (flags & MB_DEFBUTTON2) ? buttonNo : buttonYes;
|
|
break;
|
|
case MB_RETRYCANCEL:
|
|
q.buttons = buttonRetry | buttonCancel;
|
|
q.defButton = (flags & MB_DEFBUTTON2) ? buttonCancel : buttonRetry;
|
|
break;
|
|
}
|
|
switch (flags & 0xF0) {
|
|
case MB_ICONHAND:
|
|
q.icon = iconWarning;
|
|
break;
|
|
case MB_ICONQUESTION:
|
|
q.icon = iconQuestion;
|
|
break;
|
|
case MB_ICONEXCLAMATION:
|
|
q.icon = iconError;
|
|
break;
|
|
case MB_ICONASTERISK:
|
|
q.icon = iconInformation;
|
|
break;
|
|
}
|
|
|
|
uint32_t status = this->show_query_modal(q);
|
|
|
|
if (status & buttonOK) return IDOK;
|
|
if (status & buttonCancel) return IDCANCEL;
|
|
if (status & buttonYes) return IDYES;
|
|
if (status & buttonNo) return IDNO;
|
|
if (status & buttonRetry) return IDRETRY;
|
|
if (status & buttonAbort) return IDABORT;
|
|
if (status & buttonIgnore) return IDIGNORE;
|
|
|
|
return -1;
|
|
}
|
|
#endif
|