diff --git a/Makefile.common b/Makefile.common index dcb13933a4..4b0b631674 100644 --- a/Makefile.common +++ b/Makefile.common @@ -250,7 +250,9 @@ ifeq ($(HAVE_QT), 1) HAVE_QT_WRAPPER=0 OBJ += ui/drivers/ui_qt.o \ ui/drivers/qt/ui_qt_application.o \ - ui/drivers/qt/ui_qt_window.o + ui/drivers/qt/ui_qt_window.o \ + ui/drivers/qt/ui_qt_browser_window.o \ + ui/drivers/qt/ui_qt_msg_window.o ifneq ($(findstring Linux,$(OS)),) DEFINES += -I/usr/include/qt -fPIC diff --git a/ui/drivers/qt/ui_qt_browser_window.cpp b/ui/drivers/qt/ui_qt_browser_window.cpp new file mode 100644 index 0000000000..ed6e7bfe30 --- /dev/null +++ b/ui/drivers/qt/ui_qt_browser_window.cpp @@ -0,0 +1,38 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2011-2016 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include + +#include "../../ui_companion_driver.h" + +static bool ui_browser_window_qt_open(ui_browser_window_state_t *state) +{ + return true; +} + +static bool ui_browser_window_qt_save(ui_browser_window_state_t *state) +{ + return false; +} + +const ui_browser_window_t ui_browser_window_qt = { + ui_browser_window_qt_open, + ui_browser_window_qt_save, + "qt" +}; diff --git a/ui/drivers/qt/ui_qt_msg_window.cpp b/ui/drivers/qt/ui_qt_msg_window.cpp new file mode 100644 index 0000000000..a37a939b3b --- /dev/null +++ b/ui/drivers/qt/ui_qt_msg_window.cpp @@ -0,0 +1,106 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2011-2016 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include + +#include + +#include "../../ui_companion_driver.h" + +static enum ui_msg_window_response ui_msg_window_qt_response(ui_msg_window_state *state, QMessageBox::StandardButtons response) +{ + switch (response) + { + case QMessageBox::Ok: + return UI_MSG_RESPONSE_OK; + case QMessageBox::Cancel: + return UI_MSG_RESPONSE_CANCEL; + case QMessageBox::Yes: + return UI_MSG_RESPONSE_YES; + case QMessageBox::No: + return UI_MSG_RESPONSE_NO; + default: + break; + } + + switch (state->buttons) + { + case UI_MSG_WINDOW_OK: + return UI_MSG_RESPONSE_OK; + case UI_MSG_WINDOW_OKCANCEL: + return UI_MSG_RESPONSE_CANCEL; + case UI_MSG_WINDOW_YESNO: + return UI_MSG_RESPONSE_NO; + case UI_MSG_WINDOW_YESNOCANCEL: + return UI_MSG_RESPONSE_CANCEL; + default: + break; + } + + return UI_MSG_RESPONSE_NA; +} + +static QFlags ui_msg_window_qt_buttons(ui_msg_window_state *state) +{ + switch (state->buttons) + { + case UI_MSG_WINDOW_OK: + return QMessageBox::Ok; + case UI_MSG_WINDOW_OKCANCEL: + return QMessageBox::Cancel; + case UI_MSG_WINDOW_YESNO: + return (QMessageBox::Yes | QMessageBox::No); + case UI_MSG_WINDOW_YESNOCANCEL: + return (QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); + } + + return QMessageBox::NoButton; +} + +static enum ui_msg_window_response ui_msg_window_qt_error(ui_msg_window_state *state) +{ + QFlags flags = ui_msg_window_qt_buttons(state); + return ui_msg_window_qt_response(state, QMessageBox::critical((QWidget*)state->window, state->title, state->text, flags)); +} + +static enum ui_msg_window_response ui_msg_window_qt_information(ui_msg_window_state *state) +{ + QFlags flags = ui_msg_window_qt_buttons(state); + return ui_msg_window_qt_response(state, QMessageBox::information((QWidget*)state->window, state->title, state->text, flags)); +} + +static enum ui_msg_window_response ui_msg_window_qt_question(ui_msg_window_state *state) +{ + QFlags flags = ui_msg_window_qt_buttons(state); + return ui_msg_window_qt_response(state, QMessageBox::question((QWidget*)state->window, state->title, state->text, flags)); +} + +static enum ui_msg_window_response ui_msg_window_qt_warning(ui_msg_window_state *state) +{ + QFlags flags = ui_msg_window_qt_buttons(state); + return ui_msg_window_qt_response(state, QMessageBox::warning((QWidget*)state->window, state->title, state->text, flags)); +} + +const ui_msg_window_t ui_msg_window_qt = { + ui_msg_window_qt_error, + ui_msg_window_qt_information, + ui_msg_window_qt_question, + ui_msg_window_qt_warning, + "qt" +}; diff --git a/ui/drivers/ui_qt.c b/ui/drivers/ui_qt.c index 8bdf23a3cc..14d9d58dd7 100644 --- a/ui/drivers/ui_qt.c +++ b/ui/drivers/ui_qt.c @@ -143,8 +143,8 @@ const ui_companion_driver_t ui_companion_qt = { NULL, NULL, NULL, - &ui_browser_window_null, - &ui_msg_window_null, + &ui_browser_window_qt, + &ui_msg_window_qt, &ui_window_qt, &ui_application_qt, "qt", diff --git a/ui/ui_companion_driver.h b/ui/ui_companion_driver.h index 9708cee775..52cfbdab7b 100644 --- a/ui/ui_companion_driver.h +++ b/ui/ui_companion_driver.h @@ -61,6 +61,7 @@ typedef struct ui_msg_window_state enum ui_msg_window_buttons buttons; char *text; char *title; + void *window; } ui_msg_window_state; typedef struct ui_browser_window_state @@ -141,6 +142,7 @@ typedef struct ui_companion_driver extern const ui_browser_window_t ui_browser_window_null; extern const ui_browser_window_t ui_browser_window_cocoa; +extern const ui_browser_window_t ui_browser_window_qt; extern const ui_browser_window_t ui_browser_window_win32; extern const ui_window_t ui_window_null; @@ -150,6 +152,7 @@ extern const ui_window_t ui_window_win32; extern const ui_msg_window_t ui_msg_window_null; extern const ui_msg_window_t ui_msg_window_win32; +extern const ui_msg_window_t ui_msg_window_qt; extern const ui_msg_window_t ui_msg_window_cocoa; extern const ui_application_t ui_application_null;