#include <cerrno>
#include <fstream>
+#ifndef PLATFORM_WINDOWS
+#include <sys/resource.h>
+#endif
+
#include <stdint.h>
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>
#include <time.h>
-#include <sys/resource.h>
-#include <sys/types.h>
-#include <sys/sysctl.h>
+#include <glib.h>
+#include <glib/gstdio.h>
#include <gtkmm/messagedialog.h>
#include <gtkmm/accelmap.h>
#include "pbd/memento_command.h"
#include "pbd/openuri.h"
#include "pbd/file_utils.h"
+#include "pbd/localtime_r.h"
+#include "pbd/system_exec.h"
#include "gtkmm2ext/application.h"
#include "gtkmm2ext/bindings.h"
#include "ardour/filename_extensions.h"
#include "ardour/filesystem_paths.h"
#include "ardour/port.h"
+#include "ardour/plugin_manager.h"
#include "ardour/process_thread.h"
#include "ardour/profile.h"
#include "ardour/recent_sessions.h"
#include "ardour/session_utils.h"
#include "ardour/slave.h"
+#ifdef WINDOWS_VST_SUPPORT
+#include <fst.h>
+#endif
+
#include "timecode/time.h"
typedef uint64_t microseconds_t;
#include "video_server_dialog.h"
#include "add_video_dialog.h"
#include "transcode_video_dialog.h"
-#include "system_exec.h"
#include "i18n.h"
ui_config = new UIConfiguration();
+ ui_config->ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
+ boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
+ ui_config->map_parameters (pc);
+
editor = 0;
mixer = 0;
meterbridge = 0;
/* and ambiguous files */
- ARDOUR::FileSource::AmbiguousFileName.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::ambiguous_file, this, _1, _2, _3));
+ ARDOUR::FileSource::AmbiguousFileName.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::ambiguous_file, this, _1, _2));
+
+ /* also plugin scan messages */
+ ARDOUR::PluginScanMessage.connect (forever_connections, MISSING_INVALIDATOR, boost::bind(&ARDOUR_UI::plugin_scan_dialog, this, _1, _2), gui_context());
/* lets get this party started */
// wait for announce reply from nsm server
for ( i = 0; i < 5000; ++i) {
nsm->check ();
- usleep (i);
+
+ Glib::usleep (i);
if (nsm->is_active()) {
break;
}
// wait for open command from nsm server
for ( i = 0; i < 5000; ++i) {
nsm->check ();
- usleep (1000);
+ Glib::usleep (1000);
if (nsm->client_id ()) {
break;
}
void
ARDOUR_UI::check_memory_locking ()
{
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(PLATFORM_WINDOWS)
/* OS X doesn't support mlockall(2), and so testing for memory locking capability there is pointless */
return;
#else // !__APPLE__
halt_connection.disconnect ();
AudioEngine::instance()->stop ();
+#ifdef WINDOWS_VST_SUPPORT
+ fst_stop_threading();
+#endif
quit ();
}
_session->set_clean ();
}
+#ifdef WINDOWS_VST_SUPPORT
+ fst_stop_threading();
+#endif
flush_pending ();
+#ifdef WINDOWS_VST_SUPPORT
+ fst_start_threading();
+#endif
retval = 0;
out:
space_adjusted = rep.space;
} else if (rep.space < 1000000) {
bprefix = _("kilo");
- space_adjusted = truncf((float)rep.space / 1000.0);
+ space_adjusted = floorf((float)rep.space / 1000.0);
} else if (rep.space < 1000000 * 1000) {
bprefix = _("mega");
- space_adjusted = truncf((float)rep.space / (1000.0 * 1000.0));
+ space_adjusted = floorf((float)rep.space / (1000.0 * 1000.0));
} else {
bprefix = _("giga");
- space_adjusted = truncf((float)rep.space / (1000.0 * 1000 * 1000.0));
+ space_adjusted = floorf((float)rep.space / (1000.0 * 1000 * 1000.0));
}
if (msg_delete) {
PBD::ScopedConnection idle_connection;
- if (count > 8) {
- ARDOUR::GUIIdle.connect (idle_connection, MISSING_INVALIDATOR, boost::bind (&Gtkmm2ext::UI::flush_pending, this), gui_context());
- }
-
string template_path = add_route_dialog->track_template();
if (!template_path.empty()) {
ARDOUR_UI::stop_video_server (bool ask_confirm)
{
if (!video_server_process && ask_confirm) {
- warning << _("Video-Server was not launched by Ardour. The request to stop it is ignored.") << endmsg;
+ warning << string_compose (_("Video-Server was not launched by %1. The request to stop it is ignored."), PROGRAM_NAME) << endmsg;
}
if (video_server_process) {
if(ask_confirm) {
std::string icsd_docroot = video_server_dialog->get_docroot();
if (icsd_docroot.empty()) {icsd_docroot = X_("/");}
- struct stat sb;
- if (!lstat (icsd_docroot.c_str(), &sb) == 0 || !S_ISDIR(sb.st_mode)) {
+ GStatBuf sb;
+ if (!g_lstat (icsd_docroot.c_str(), &sb) == 0 || !S_ISDIR(sb.st_mode)) {
warning << _("Specified docroot is not an existing directory.") << endmsg;
continue;
}
- if ( (!lstat (icsd_exec.c_str(), &sb) == 0)
+#ifndef PLATFORM_WINDOWS
+ if ( (!g_lstat (icsd_exec.c_str(), &sb) == 0)
|| (sb.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)) == 0 ) {
warning << _("Given Video Server is not an executable file.") << endmsg;
continue;
}
+#else
+ if ( (!g_lstat (icsd_exec.c_str(), &sb) == 0)
+ || (sb.st_mode & (S_IXUSR)) == 0 ) {
+ warning << _("Given Video Server is not an executable file.") << endmsg;
+ continue;
+ }
+#endif
char **argp;
argp=(char**) calloc(9,sizeof(char*));
}
int timeout = 120; // 6 sec
while (!ARDOUR_UI::instance()->video_timeline->check_server()) {
- usleep (50000);
+ Glib::usleep (50000);
if (--timeout <= 0 || !video_server_process->is_running()) break;
}
if (timeout <= 0) {
}
}
+void
+ARDOUR_UI::cancel_plugin_scan ()
+{
+ PluginManager::instance().cancel_plugin_scan();
+}
+
+static MessageDialog *scan_dlg = NULL;
+
+void
+ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin)
+{
+ if (!Config->get_show_plugin_scan_window()) { return; }
+ if (!scan_dlg) {
+ scan_dlg = new MessageDialog("", false, MESSAGE_INFO, BUTTONS_NONE);
+ VBox* vbox = scan_dlg->get_vbox();
+ vbox->set_size_request(400,-1);
+ scan_dlg->set_title (_("Scanning for plugins"));
+
+ Gtk::Button *cancel_button = manage(new Gtk::Button(_("Cancel plugin scan")));
+ cancel_button->set_name ("EditorGTKButton");
+ cancel_button->signal_clicked().connect ( mem_fun (*this, &ARDOUR_UI::cancel_plugin_scan) );
+
+ scan_dlg->get_vbox()->pack_start ( *cancel_button, PACK_SHRINK);
+ }
+
+ if (type == X_("closeme")) {
+ scan_dlg->hide();
+ } else {
+ scan_dlg->set_message(type + ": " + Glib::path_get_basename(plugin));
+ scan_dlg->show_all();
+ }
+
+ gtk_main_iteration ();
+}
+
void
ARDOUR_UI::disk_underrun_handler ()
{
}
int
-ARDOUR_UI::ambiguous_file (std::string file, std::string /*path*/, std::vector<std::string> hits)
+ARDOUR_UI::ambiguous_file (std::string file, std::vector<std::string> hits)
{
AmbiguousFileDialog dialog (file, hits);