From 901bf1ab80d7b7a74f7e703c205a34c6528f4c28 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 14 Dec 2019 23:26:25 +0100 Subject: Add a MessageDialog wrapper that handles the splash-screen --- gtk2_ardour/ardour_message.cc | 98 +++++++++++++++++++++++++++++++++++++++++++ gtk2_ardour/ardour_message.h | 53 +++++++++++++++++++++++ gtk2_ardour/wscript | 1 + 3 files changed, 152 insertions(+) create mode 100644 gtk2_ardour/ardour_message.cc create mode 100644 gtk2_ardour/ardour_message.h diff --git a/gtk2_ardour/ardour_message.cc b/gtk2_ardour/ardour_message.cc new file mode 100644 index 0000000000..d6302fb2c6 --- /dev/null +++ b/gtk2_ardour/ardour_message.cc @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2019 Robin Gareus + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "ardour_message.h" +#include "splash.h" + +using namespace Gtk; + +ArdourMessageDialog::ArdourMessageDialog (const Glib::ustring& message, + bool use_markup, + Gtk::MessageType type, + Gtk::ButtonsType buttons, + bool modal) + : Gtk::MessageDialog (message, use_markup, type, buttons, modal) + , _splash_pushed (false) +{ + set_position (WIN_POS_MOUSE); +} + +ArdourMessageDialog::ArdourMessageDialog (Gtk::Window& parent, + const Glib::ustring& message, + bool use_markup, + Gtk::MessageType type, + Gtk::ButtonsType buttons, + bool modal) + : Gtk::MessageDialog (parent, message, use_markup, type, buttons, modal) + , _splash_pushed (false) +{ + set_transient_for (parent); + set_position (WIN_POS_MOUSE); +} + +ArdourMessageDialog::~ArdourMessageDialog () +{ + pop_splash (); +} + +int +ArdourMessageDialog::run () +{ + push_splash (); + int rv = Gtk::MessageDialog::run (); + pop_splash (); + return rv; +} + +void +ArdourMessageDialog::show () +{ + push_splash (); + Gtk::MessageDialog::show (); +} + +void +ArdourMessageDialog::hide () +{ + Gtk::MessageDialog::hide (); + pop_splash (); +} + +void +ArdourMessageDialog::pop_splash () +{ + if (_splash_pushed) { + Splash* spl = Splash::instance(); + if (spl) { + spl->pop_front(); + } + _splash_pushed = false; + } +} + +void +ArdourMessageDialog::push_splash () +{ + if (Splash::exists()) { + Splash* spl = Splash::instance(); + if (spl->is_visible()) { + spl->pop_back_for (*this); + _splash_pushed = true; + } + } +} diff --git a/gtk2_ardour/ardour_message.h b/gtk2_ardour/ardour_message.h new file mode 100644 index 0000000000..d9de74b0df --- /dev/null +++ b/gtk2_ardour/ardour_message.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 Robin Gareus + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _ardour_message_h_ +#define _ardour_message_h_ + +#include + +class ArdourMessageDialog : public Gtk::MessageDialog +{ +public: + ArdourMessageDialog (const Glib::ustring& message, + bool use_markup = false, + Gtk::MessageType type = Gtk::MESSAGE_INFO, + Gtk::ButtonsType buttons = Gtk::BUTTONS_OK, + bool modal = false); + + ArdourMessageDialog (Gtk::Window& parent, + const Glib::ustring& message, + bool use_markup = false, + Gtk::MessageType type = Gtk::MESSAGE_INFO, + Gtk::ButtonsType buttons = Gtk::BUTTONS_OK, + bool modal = false); + + virtual ~ArdourMessageDialog (); + + int run (); + void show (); + void hide (); + +protected: + void pop_splash (); + void push_splash (); + + bool _splash_pushed; +}; + +#endif diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index fe9e618c61..b670932940 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -33,6 +33,7 @@ gtk2_ardour_sources = [ 'analysis_window.cc', 'ardour_dialog.cc', 'ardour_http.cc', + 'ardour_message.cc', 'ardour_ui.cc', 'ardour_ui2.cc', 'ardour_ui3.cc', -- cgit v1.2.3