#include <cerrno>
#include <fstream>
-#include <boost/locale.hpp>
-
#include <stdint.h>
#include <fcntl.h>
#include <signal.h>
ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
: Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp)
-
+
, gui_object_state (new GUIObjectState)
+
, primary_clock (new MainClock (X_("primary"), false, X_("transport"), true, true, true, false, true))
, secondary_clock (new MainClock (X_("secondary"), false, X_("secondary"), true, true, false, false, true))
/* big clock */
, big_clock (new AudioClock (X_("bigclock"), false, "big", true, true, false, false))
+ , video_timeline(0)
+
+ /* start of private members */
+
+ , _startup (0)
+ , engine (0)
+ , nsm (0)
+ , _was_dirty (false)
+ , _mixer_on_top (false)
/* transport */
Gtkmm2ext::init(localedir);
splash = 0;
- _startup = 0;
if (theArdourUI == 0) {
theArdourUI = this;
editor = 0;
mixer = 0;
+ meterbridge = 0;
editor = 0;
engine = 0;
_session_is_new = false;
TimeAxisViewItem::set_constant_heights ();
- /* load up the UI manager */
+ /* Set this up so that our window proxies can register actions */
ActionManager::init ();
midi_port_matrix.set_state (*ui_xml);
}
- WindowManager::instance().register_window (&theme_manager);
- WindowManager::instance().register_window (&key_editor);
- WindowManager::instance().register_window (&rc_option_editor);
- WindowManager::instance().register_window (&session_option_editor);
- WindowManager::instance().register_window (&speaker_config_window);
- WindowManager::instance().register_window (&about);
- WindowManager::instance().register_window (&add_route_dialog);
- WindowManager::instance().register_window (&add_video_dialog);
- WindowManager::instance().register_window (&route_params);
- WindowManager::instance().register_window (&bundle_manager);
- WindowManager::instance().register_window (&location_ui);
- WindowManager::instance().register_window (&big_clock_window);
- WindowManager::instance().register_window (&audio_port_matrix);
- WindowManager::instance().register_window (&midi_port_matrix);
+ WM::Manager::instance().register_window (&theme_manager);
+ WM::Manager::instance().register_window (&key_editor);
+ WM::Manager::instance().register_window (&rc_option_editor);
+ WM::Manager::instance().register_window (&session_option_editor);
+ WM::Manager::instance().register_window (&speaker_config_window);
+ WM::Manager::instance().register_window (&about);
+ WM::Manager::instance().register_window (&add_route_dialog);
+ WM::Manager::instance().register_window (&add_video_dialog);
+ WM::Manager::instance().register_window (&route_params);
+ WM::Manager::instance().register_window (&bundle_manager);
+ WM::Manager::instance().register_window (&location_ui);
+ WM::Manager::instance().register_window (&big_clock_window);
+ WM::Manager::instance().register_window (&audio_port_matrix);
+ WM::Manager::instance().register_window (&midi_port_matrix);
/* We need to instantiate the theme manager because it loads our
theme files. This should really change so that its window
_tooltips.enable();
+ ActionManager::load_menus ();
+
if (setup_windows ()) {
throw failed_constructor ();
}
delete keyboard;
delete editor;
delete mixer;
+ delete meterbridge;
stop_video_server();
}
app->ready ();
nsm_url = getenv ("NSM_URL");
- nsm = 0;
if (nsm_url) {
nsm = new NSM_Client;
goto_editor_window ();
- WindowManager::instance().show_visible ();
+ WM::Manager::instance().show_visible ();
/* We have to do this here since goto_editor_window() ends up calling show_all() on the
* editor window, and we may want stuff to be hidden.
"runs out of memory. \n\n"
"You can view the memory limit with 'ulimit -l', "
"and it is normally controlled by %2"),
- PROGRAM_NAME).c_str(),
+ PROGRAM_NAME,
#ifdef __FreeBSD__
- X_("/etc/login.conf")
+ X_("/etc/login.conf")
#else
- X_(" /etc/security/limits.conf")
+ X_(" /etc/security/limits.conf")
#endif
- );
+ ).c_str());
msg.set_default_response (RESPONSE_OK);
second_connection.disconnect ();
point_one_second_connection.disconnect ();
- point_oh_five_second_connection.disconnect ();
- point_zero_one_second_connection.disconnect();
+ point_zero_something_second_connection.disconnect();
}
delete ARDOUR_UI::instance()->video_timeline;
+ ARDOUR_UI::instance()->video_timeline = NULL;
stop_video_server();
/* Save state before deleting the session, as that causes some
}
gint
-ARDOUR_UI::every_point_zero_one_seconds ()
+ARDOUR_UI::every_point_zero_something_seconds ()
{
- // august 2007: actual update frequency: 40Hz, not 100Hz
+ // august 2007: actual update frequency: 25Hz (40ms), not 100Hz
SuperRapidScreenUpdate(); /* EMIT_SIGNAL */
return TRUE;
open_session_selector->set_current_folder(Config->get_default_session_parent_dir());
}
- open_session_selector->add_shortcut_folder (Config->get_default_session_parent_dir());
+ string default_session_folder = Config->get_default_session_parent_dir();
+ try {
+ /* add_shortcut_folder throws an exception if the folder being added already has a shortcut */
+ open_session_selector->add_shortcut_folder (default_session_folder);
+ }
+ catch (Glib::Error & e) {
+ std::cerr << "open_session_selector->add_shortcut_folder (" << default_session_folder << ") threw Glib::Error " << e.what() << std::endl;
+ }
FileFilter session_filter;
session_filter.add_pattern ("*.ardour");
{
XMLNode* node = new XMLNode (X_("UI"));
- WindowManager::instance().add_state (*node);
+ WM::Manager::instance().add_state (*node);
node->add_child_nocopy (gui_object_state->get_state());
Config->set_video_advanced_setup(true);
}
+ if (video_server_process) {
+ delete video_server_process;
+ }
+
video_server_process = new SystemExec(icsd_exec, argp);
- video_server_process->start();
- sleep(1);
+ if (video_server_process->start()) {
+ warning << _("Cannot launch the video-server") << endmsg;
+ continue;
+ }
+ int timeout = 120; // 6 sec
+ while (!ARDOUR_UI::instance()->video_timeline->check_server()) {
+ usleep (50000);
+ if (--timeout <= 0 || !video_server_process->is_running()) break;
+ }
+ if (timeout <= 0) {
+ warning << _("Video-server was started but does not respond to requests...") << endmsg;
+ } else {
+ if (!ARDOUR_UI::instance()->video_timeline->check_server_docroot()) {
+ delete video_server_process;
+ video_server_process = 0;
+ }
+ }
}
return true;
}
add_video_dialog->hide();
if (r != RESPONSE_ACCEPT) { return; }
- bool local_file;
+ bool local_file, orig_local_file;
std::string path = add_video_dialog->file_name(local_file);
+
+ std::string orig_path = path;
+ orig_local_file = local_file;
+
bool auto_set_session_fps = add_video_dialog->auto_set_session_fps();
if (local_file && !Glib::file_test(path, Glib::FILE_TEST_EXISTS)) {
node->add_property (X_("Filename"), path);
node->add_property (X_("AutoFPS"), auto_set_session_fps?X_("1"):X_("0"));
node->add_property (X_("LocalFile"), local_file?X_("1"):X_("0"));
+ if (orig_local_file) {
+ node->add_property (X_("OriginalVideoFile"), orig_path);
+ } else {
+ node->remove_property (X_("OriginalVideoFile"));
+ }
_session->add_extra_xml (*node);
_session->set_dirty ();