#include "pbd/enumwriter.h"
#include "pbd/memento_command.h"
#include "pbd/openuri.h"
+#include "pbd/stl_delete.h"
#include "pbd/file_utils.h"
#include "pbd/localtime_r.h"
#include "i18n.h"
using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
using namespace PBD;
using namespace Gtkmm2ext;
using namespace Gtk;
try {
audio_midi_setup.get (true);
} catch (...) {
+ std::cerr << "audio-midi engine setup failed."<< std::endl;
return -1;
}
const bool new_session_required = (ARDOUR_COMMAND_LINE::new_session || brand_new_user);
if (get_session_parameters (false, new_session_required, ARDOUR_COMMAND_LINE::load_template)) {
+ std::cerr << "Cannot get session parameters."<< std::endl;
return -1;
}
}
get_state_files_in_directory (*i, state_file_paths);
- vector<string*>* states;
+ vector<string> states;
vector<const gchar*> item;
string fullpath = *i;
}
/* now get available states for this session */
+ states = Session::possible_states (fullpath);
- if ((states = Session::possible_states (fullpath)) == 0) {
+ if (states.empty()) {
/* no state file? */
continue;
}
Gtk::TreeModel::Row row = *(recent_session_model->append());
- row[recent_session_columns.visible_name] = Glib::path_get_basename (fullpath);
row[recent_session_columns.fullpath] = fullpath;
row[recent_session_columns.tip] = Glib::Markup::escape_text (fullpath);
if (state_file_names.size() > 1) {
+ // multiple session files in the session directory - show the directory name.
+ row[recent_session_columns.visible_name] = Glib::path_get_basename (fullpath);
// add the children
-
for (std::vector<std::string>::iterator i2 = state_file_names.begin();
i2 != state_file_names.end(); ++i2)
{
child_row[recent_session_columns.fullpath] = fullpath;
child_row[recent_session_columns.tip] = Glib::Markup::escape_text (fullpath);
}
+ } else {
+ // only a single session file in the directory - show its actual name.
+ row[recent_session_columns.visible_name] = state_file_names.front ();
}
}
bool rolling = _session->transport_rolling();
if (_session->get_play_loop()) {
- /* XXX it is not possible to just leave seamless loop and keep
- playing at present (nov 4th 2009)
+
+ /* If loop playback is not a mode, then we should cancel
+ it when this action is requested. If it is a mode
+ we just leave it in place.
*/
- if (!Config->get_seamless_loop()) {
- _session->request_play_loop (false, true);
- }
+
+ if (!Config->get_loop_is_mode()) {
+ /* XXX it is not possible to just leave seamless loop and keep
+ playing at present (nov 4th 2009)
+ */
+ if (!Config->get_seamless_loop()) {
+ /* stop loop playback and stop rolling */
+ _session->request_play_loop (false, true);
+ } else if (rolling) {
+ /* stop loop playback but keep rolling */
+ _session->request_play_loop (false, false);
+ }
+ }
+
} else if (_session->get_play_range () && !Config->get_always_play_range()) {
/* stop playing a range if we currently are */
_session->request_play_range (0, true);
/* disk buffers are normal, so we can keep playing */
affect_transport = false;
}
- _session->request_play_loop (false, true);
+ _session->request_play_loop (false, affect_transport);
} else if (_session->get_play_range ()) {
affect_transport = false;
_session->request_play_range (0, true);
if (_session->get_play_loop()) {
- if (_session->transport_rolling()) {
+ /* looping enabled, our job is to disable it */
+
+ _session->request_play_loop (false);
- _session->request_locate (looploc->start(), true);
- _session->request_play_loop (false);
+ } else {
+
+ /* looping not enabled, our job is to enable it.
+ loop-is-NOT-mode: this action always starts the transport rolling.
+ loop-IS-mode: this action simply sets the loop play mechanism, but
+ does not start transport.
+ */
+ if (Config->get_loop_is_mode()) {
+ _session->request_play_loop (true, false);
} else {
- _session->request_play_loop (false);
+ _session->request_play_loop (true, true);
}
- } else {
- _session->request_play_loop (true);
}
//show the loop markers
auto_loop_button.set_active (true);
play_selection_button.set_active (false);
- roll_button.set_active (false);
+ if (Config->get_loop_is_mode()) {
+ roll_button.set_active (true);
+ } else {
+ roll_button.set_active (false);
+ }
} else {
stop_button.set_active (true);
roll_button.set_active (false);
play_selection_button.set_active (false);
- auto_loop_button.set_active (false);
+ if (Config->get_loop_is_mode ()) {
+ auto_loop_button.set_active (_session->get_play_loop());
+ } else {
+ auto_loop_button.set_active (false);
+ }
update_disk_space ();
}
}
#ifdef WINDOWS_VST_SUPPORT
fst_stop_threading();
#endif
+
flush_pending ();
+
#ifdef WINDOWS_VST_SUPPORT
fst_start_threading();
#endif
setup_order_hint();
- PBD::ScopedConnection idle_connection;
-
string template_path = add_route_dialog->track_template();
+ DisplaySuspender ds;
if (!template_path.empty()) {
if (add_route_dialog->name_template_is_default()) {
session_add_audio_bus (input_chan.n_audio(), output_chan.n_audio(), route_group, count, name_template);
break;
}
-
- /* idle connection will end at scope end */
}
void
int timeout = 120; // 6 sec
while (!ARDOUR_UI::instance()->video_timeline->check_server()) {
Glib::usleep (50000);
+ gui_idle_handler();
if (--timeout <= 0 || !video_server_process->is_running()) break;
}
if (timeout <= 0) {