Add a MessageDialog wrapper that handles the splash-screen
authorRobin Gareus <robin@gareus.org>
Sat, 14 Dec 2019 22:26:25 +0000 (23:26 +0100)
committerRobin Gareus <robin@gareus.org>
Sat, 14 Dec 2019 22:26:25 +0000 (23:26 +0100)
gtk2_ardour/ardour_message.cc [new file with mode: 0644]
gtk2_ardour/ardour_message.h [new file with mode: 0644]
gtk2_ardour/wscript

diff --git a/gtk2_ardour/ardour_message.cc b/gtk2_ardour/ardour_message.cc
new file mode 100644 (file)
index 0000000..d6302fb
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2019 Robin Gareus <robin@gareus.org>
+ *
+ * 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 (file)
index 0000000..d9de74b
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2019 Robin Gareus <robin@gareus.org>
+ *
+ * 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 <gtkmm/messagedialog.h>
+
+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
index fe9e618c61b9b5017450bf25eac910d977cf94c2..b6709329405d780b4c5f40ce288590951a7507d2 100644 (file)
@@ -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',