From 5beeca2e95a7ea70a4225eaca979179649cb2e90 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 23 Sep 2019 14:49:06 -0600 Subject: split apart ardour_ui.cc into a series of distinct source modules. Should be a 100% no-op - no code was altered, just moved --- gtk2_ardour/ardour_ui_engine.cc | 197 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 gtk2_ardour/ardour_ui_engine.cc (limited to 'gtk2_ardour/ardour_ui_engine.cc') diff --git a/gtk2_ardour/ardour_ui_engine.cc b/gtk2_ardour/ardour_ui_engine.cc new file mode 100644 index 0000000000..2ee03c13c0 --- /dev/null +++ b/gtk2_ardour/ardour_ui_engine.cc @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2005-2007 Doug McLain + * Copyright (C) 2005-2017 Tim Mayberry + * Copyright (C) 2005-2019 Paul Davis + * Copyright (C) 2005 Karsten Wiese + * Copyright (C) 2005 Taybin Rutkin + * Copyright (C) 2006-2015 David Robillard + * Copyright (C) 2007-2012 Carl Hetherington + * Copyright (C) 2008-2010 Sakari Bergen + * Copyright (C) 2012-2019 Robin Gareus + * Copyright (C) 2013-2015 Colin Fletcher + * Copyright (C) 2013-2016 John Emmas + * Copyright (C) 2013-2016 Nick Mainsbridge + * Copyright (C) 2014-2018 Ben Loftis + * Copyright (C) 2015 André Nusser + * Copyright (C) 2016-2018 Len Ovens + * Copyright (C) 2017 Johannes Mueller + * + * 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. + */ + +#ifdef WAF_BUILD +#include "gtk2ardour-config.h" +#include "gtk2ardour-version.h" +#endif + +#include "pbd/i18n.h" +#include "pbd/openuri.h" + +#include "ardour/audioengine.h" + +#include "ardour_ui.h" +#include "engine_dialog.h" +#include "gui_thread.h" + +using namespace ARDOUR; +using namespace PBD; +using namespace Gtkmm2ext; +using namespace ArdourWidgets; +using namespace Gtk; +using namespace std; + +int +ARDOUR_UI::do_audio_midi_setup (uint32_t desired_sample_rate) +{ + audio_midi_setup->set_desired_sample_rate (desired_sample_rate); + audio_midi_setup->set_position (WIN_POS_CENTER); + + if (desired_sample_rate != 0) { + if (Config->get_try_autostart_engine () || g_getenv ("ARDOUR_TRY_AUTOSTART_ENGINE")) { + audio_midi_setup->try_autostart (); + if (ARDOUR::AudioEngine::instance()->running()) { + return 0; + } + } + } + + while (true) { + int response = audio_midi_setup->run(); + switch (response) { + case Gtk::RESPONSE_DELETE_EVENT: + // after latency callibration engine may run, + // Running() signal was emitted, but dialog will not + // have emitted a response. The user needs to close + // the dialog -> Gtk::RESPONSE_DELETE_EVENT + if (!AudioEngine::instance()->running()) { + return -1; + } + /* fallthrough */ + default: + if (!AudioEngine::instance()->running()) { + continue; + } + audio_midi_setup->hide (); + return 0; + } + } +} + +void +ARDOUR_UI::audioengine_became_silent () +{ + MessageDialog msg (string_compose (_("This is a free/demo copy of %1. It has just switched to silent mode."), PROGRAM_NAME), + true, + Gtk::MESSAGE_WARNING, + Gtk::BUTTONS_NONE, + true); + + msg.set_title (string_compose (_("%1 is now silent"), PROGRAM_NAME)); + + Gtk::Label pay_label (string_compose (_("Please consider paying for a copy of %1 - you can pay whatever you want."), PROGRAM_NAME)); + Gtk::Label subscribe_label (_("Better yet become a subscriber - subscriptions start at US$1 per month.")); + Gtk::Button pay_button (_("Pay for a copy (via the web)")); + Gtk::Button subscribe_button (_("Become a subscriber (via the web)")); + Gtk::HBox pay_button_box; + Gtk::HBox subscribe_button_box; + + pay_button_box.pack_start (pay_button, true, false); + subscribe_button_box.pack_start (subscribe_button, true, false); + + bool (*openuri)(const char*) = PBD::open_uri; /* this forces selection of the const char* variant of PBD::open_uri(), which we need to avoid ambiguity below */ + + pay_button.signal_clicked().connect (sigc::hide_return (sigc::bind (sigc::ptr_fun (openuri), (const char*) "https://ardour.org/download"))); + subscribe_button.signal_clicked().connect (sigc::hide_return (sigc::bind (sigc::ptr_fun (openuri), (const char*) "https://community.ardour.org/s/subscribe"))); + + msg.get_vbox()->pack_start (pay_label); + msg.get_vbox()->pack_start (pay_button_box); + msg.get_vbox()->pack_start (subscribe_label); + msg.get_vbox()->pack_start (subscribe_button_box); + + msg.get_vbox()->show_all (); + + msg.add_button (_("Remain silent"), Gtk::RESPONSE_CANCEL); + msg.add_button (_("Save and quit"), Gtk::RESPONSE_NO); + msg.add_button (_("Give me more time"), Gtk::RESPONSE_YES); + + int r = msg.run (); + + switch (r) { + case Gtk::RESPONSE_YES: + AudioEngine::instance()->reset_silence_countdown (); + break; + + case Gtk::RESPONSE_NO: + /* save and quit */ + save_state_canfail (""); + exit (EXIT_SUCCESS); + break; + + case Gtk::RESPONSE_CANCEL: + default: + /* don't reset, save session and exit */ + break; + } +} + +void +ARDOUR_UI::create_xrun_marker (samplepos_t where) +{ + if (_session) { + Location *location = new Location (*_session, where, where, _("xrun"), Location::IsMark, 0); + _session->locations()->add (location); + } +} + +void +ARDOUR_UI::halt_on_xrun_message () +{ + cerr << "HALT on xrun\n"; + MessageDialog msg (_main_window, _("Recording was stopped because your system could not keep up.")); + msg.run (); +} + +void +ARDOUR_UI::xrun_handler (samplepos_t where) +{ + if (!_session) { + return; + } + + ENSURE_GUI_THREAD (*this, &ARDOUR_UI::xrun_handler, where) + + if (_session && Config->get_create_xrun_marker() && _session->actively_recording()) { + create_xrun_marker(where); + } + + if (_session && Config->get_stop_recording_on_xrun() && _session->actively_recording()) { + halt_on_xrun_message (); + } +} + +bool +ARDOUR_UI::check_audioengine (Gtk::Window& parent) +{ + if (!AudioEngine::instance()->running()) { + MessageDialog msg (parent, string_compose ( + _("%1 is not connected to any audio backend.\n" + "You cannot open or close sessions in this condition"), + PROGRAM_NAME)); + pop_back_splash (msg); + msg.run (); + return false; + } + return true; +} -- cgit v1.2.3