// // Created by selim on 17.05.2022. // #include "Dialog.h" namespace gtkpp { void responseCallback(GtkDialog*, GtkResponseType responseId, void* data) { auto dialog = reinterpret_cast(data); dialog->_response = responseId; dialog->_signalResponse.emit(responseId); } Dialog::Dialog(Window* parent) { auto flags = static_cast(GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL | GTK_DIALOG_USE_HEADER_BAR); auto dialog = gtk_dialog_new_with_buttons("Add plate number", parent->gobj(), flags, "OK", GTK_RESPONSE_OK, "Cancel", GTK_RESPONSE_CANCEL, nullptr); _window = GTK_WINDOW(dialog); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); _responseHandlerId = g_signal_connect (dialog, "response", G_CALLBACK(responseCallback), this); } void Dialog::onResponse(const std::function &callback) { _signalResponse.connect(callback); } cc::result Dialog::responseAsync() { auto promise = std::make_shared>(); auto result = promise->get_result(); _signalResponse.connect([promise](GtkResponseType response){ promise->set_result(response); }); return result; } Dialog::~Dialog() { g_signal_handler_disconnect(_window, _responseHandlerId); } GtkResponseType Dialog::currentResponse() const { return _response; } Box Dialog::contentWidget() const { auto contentArea = gtk_dialog_get_content_area (GTK_DIALOG(_window)); return {contentArea}; } }