21#include "sdl_connection_dialog_wrapper.hpp"
22#include "sdl_connection_dialog.hpp"
23#include "../sdl_utils.hpp"
27SdlConnectionDialogWrapper::~SdlConnectionDialogWrapper() =
default;
29void SdlConnectionDialogWrapper::create(rdpContext* context)
31 std::unique_lock lock(_mux);
32 _connection_dialog = std::make_unique<SDLConnectionDialog>(context);
33 sdl_push_user_event(SDL_EVENT_USER_UPDATE_CONNECT_DIALOG);
36void SdlConnectionDialogWrapper::destroy()
38 std::unique_lock lock(_mux);
39 _connection_dialog.reset();
40 sdl_push_user_event(SDL_EVENT_USER_UPDATE_CONNECT_DIALOG);
43bool SdlConnectionDialogWrapper::isRunning()
const
45 std::unique_lock lock(_mux);
46 if (!_connection_dialog)
48 return _connection_dialog->running();
51bool SdlConnectionDialogWrapper::isVisible()
const
53 std::unique_lock lock(_mux);
54 if (!_connection_dialog)
56 return _connection_dialog->visible();
59bool SdlConnectionDialogWrapper::handleEvent(
const SDL_Event& event)
61 std::unique_lock lock(_mux);
62 if (!_connection_dialog)
64 return _connection_dialog->handle(event);
67WINPR_ATTR_FORMAT_ARG(1, 0)
68static std::
string format(WINPR_FORMAT_ARG const
char* fmt, va_list ap)
72 const int size = vsnprintf(
nullptr, 0, fmt, ap1);
79 msg.resize(
static_cast<size_t>(size) + 1);
83 (void)vsnprintf(msg.data(), msg.size(), fmt, ap2);
88void SdlConnectionDialogWrapper::setTitle(
const char* fmt, ...)
92 setTitle(format(fmt, ap));
96void SdlConnectionDialogWrapper::setTitle(
const std::string& title)
98 std::unique_lock lock(_mux);
100 sdl_push_user_event(SDL_EVENT_USER_UPDATE_CONNECT_DIALOG);
103void SdlConnectionDialogWrapper::showInfo(
const char* fmt, ...)
107 showInfo(format(fmt, ap));
111void SdlConnectionDialogWrapper::showInfo(
const std::string& info)
113 show(MSG_INFO, info);
116void SdlConnectionDialogWrapper::showWarn(
const char* fmt, ...)
120 showWarn(format(fmt, ap));
124void SdlConnectionDialogWrapper::showWarn(
const std::string& info)
126 show(MSG_WARN, info);
129void SdlConnectionDialogWrapper::showError(
const char* fmt, ...)
133 showError(format(fmt, ap));
137void SdlConnectionDialogWrapper::showError(
const std::string& error)
139 show(MSG_ERROR, error);
142void SdlConnectionDialogWrapper::show(SdlConnectionDialogWrapper::MsgType type,
143 const std::string& msg)
145 std::unique_lock lock(_mux);
149 sdl_push_user_event(SDL_EVENT_USER_UPDATE_CONNECT_DIALOG);
152void SdlConnectionDialogWrapper::show(
bool visible)
154 std::unique_lock lock(_mux);
156 sdl_push_user_event(SDL_EVENT_USER_UPDATE_CONNECT_DIALOG);
159void SdlConnectionDialogWrapper::handleShow()
161 std::unique_lock lock(_mux);
162 if (!_connection_dialog)
165 _connection_dialog->setTitle(_title.c_str());
168 _connection_dialog->hide();
174 case SdlConnectionDialogWrapper::MSG_INFO:
175 _connection_dialog->showInfo(_message.c_str());
177 case SdlConnectionDialogWrapper::MSG_WARN:
178 _connection_dialog->showWarn(_message.c_str());
180 case SdlConnectionDialogWrapper::MSG_ERROR:
181 _connection_dialog->showError(_message.c_str());
187 _connection_dialog->show();
SdlConnectionDialogWrapper()