X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui.cc;h=3bfb204df49f1695ad07a0462ebeac21556ea612;hb=5fef65538040fbac1b9edd1847a269aa925a49c9;hp=3b385ef292e8b3d2aadbaf283ba9ffba28a5f567;hpb=c6a3d6bc48ea766a55d0b848d7bff16daa013b41;p=ardour.git diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 3b385ef292..3bfb204df4 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -88,6 +88,9 @@ #ifdef WINDOWS_VST_SUPPORT #include #endif +#ifdef AUDIOUNIT_SUPPORT +#include "ardour/audio_unit.h" +#endif #include "timecode/time.h" @@ -147,7 +150,6 @@ using namespace Gtk; using namespace std; ARDOUR_UI *ARDOUR_UI::theArdourUI = 0; -UIConfiguration *ARDOUR_UI::ui_config = 0; sigc::signal ARDOUR_UI::Blink; sigc::signal ARDOUR_UI::RapidScreenUpdate; @@ -159,7 +161,7 @@ sigc::signal ARDOUR_UI::CloseAllDialogs; ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) : Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp) - + , ui_config (new UIConfiguration) , gui_object_state (new GUIObjectState) , primary_clock (new MainClock (X_("primary"), false, X_("transport"), true, true, true, false, true)) @@ -200,7 +202,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) , editor_meter_peak_display() , speaker_config_window (X_("speaker-config"), _("Speaker Configuration")) - , theme_manager (X_("theme-manager"), _("Theme Manager")) , key_editor (X_("key-editor"), _("Key Bindings")) , rc_option_editor (X_("rc-options-editor"), _("Preferences")) , add_route_dialog (X_("add-routes"), _("Add Tracks/Busses")) @@ -230,8 +231,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) theArdourUI = this; } - ui_config = new UIConfiguration(); - ui_config->ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed)); boost::function pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1)); ui_config->map_parameters (pc); @@ -349,7 +348,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) const XMLNode* ui_xml = Config->extra_xml (X_("UI")); if (ui_xml) { - theme_manager.set_state (*ui_xml); key_editor.set_state (*ui_xml); rc_option_editor.set_state (*ui_xml); session_option_editor.set_state (*ui_xml); @@ -365,7 +363,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) midi_port_matrix.set_state (*ui_xml); } - 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); @@ -381,12 +378,9 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) 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 - and its functionality are separate - */ - - (void) theme_manager.get (true); + /* Trigger setting up the color scheme and loading the GTK RC file */ + + ARDOUR_UI::config()->load_rc_file (false); _process_thread = new ProcessThread (); _process_thread->init (); @@ -483,6 +477,14 @@ ARDOUR_UI::post_engine () { /* Things to be done once (and once ONLY) after we have a backend running in the AudioEngine */ +#ifdef AUDIOUNIT_SUPPORT + std::string au_msg; + if (AUPluginInfo::au_get_crashlog(au_msg)) { + popup_error(_("Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. Please see the log window for further details.")); + error << _("Audio Unit Plugin Scan Failed:") << endmsg; + info << au_msg << endmsg; + } +#endif ARDOUR::init_post_engine (); @@ -564,9 +566,7 @@ ARDOUR_UI::post_engine () ARDOUR_UI::~ARDOUR_UI () { - if (ui_config->dirty()) { - ui_config->save_state(); - } + ui_config->save_state(); stop_video_server(); @@ -1006,7 +1006,9 @@ If you still wish to quit, please use the\n\n\ second_connection.disconnect (); point_one_second_connection.disconnect (); +#ifndef PLATFORM_WINDOWS point_zero_something_second_connection.disconnect(); +#endif fps_connection.disconnect(); } @@ -1159,6 +1161,9 @@ gint ARDOUR_UI::every_fps () { FPSUpdate(); /* EMIT_SIGNAL */ +#ifdef PLATFORM_WINDOWS + every_point_zero_something_seconds(); +#endif return TRUE; } @@ -1178,7 +1183,17 @@ ARDOUR_UI::set_fps_timeout_connection () * _session->frame_rate() / _session->nominal_frame_rate() / _session->timecode_frames_per_second() ); +#ifdef PLATFORM_WINDOWS + // the smallest windows scheduler time-slice is ~15ms. + // periodic GUI timeouts shorter than that will cause + // WaitForSingleObject to spinlock (100% of one CPU Core) + // and gtk never enters idle mode. + // also changing timeBeginPeriod(1) does not affect that in + // any beneficial way, so we just limit the max rate for now. + interval = std::max(30u, interval); // at most ~33Hz. +#else interval = std::max(8u, interval); // at most 120Hz. +#endif } fps_connection.disconnect(); fps_connection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &ARDOUR_UI::every_fps), interval); @@ -1281,7 +1296,7 @@ ARDOUR_UI::update_cpu_load () should also be changed. */ - float const c = AudioEngine::instance()->get_dsp_load (); + double const c = AudioEngine::instance()->get_dsp_load (); snprintf (buf, sizeof (buf), _("DSP: %5.1f%%"), c >= 90 ? X_("red") : X_("green"), c); cpu_load_label.set_markup (buf); } @@ -2254,7 +2269,7 @@ ARDOUR_UI::map_transport_state () void ARDOUR_UI::update_clocks () { - if (!editor || !editor->dragging_playhead()) { + if (editor && !editor->dragging_playhead()) { Clock (_session->audible_frame(), false, editor->get_preferred_edit_position()); /* EMIT_SIGNAL */ } } @@ -3125,6 +3140,8 @@ ARDOUR_UI::launch_chat () { #ifdef __APPLE__ open_uri("http://webchat.freenode.net/?channels=ardour-osx"); +#elif defined PLATFORM_WINDOWS + open_uri("http://webchat.freenode.net/?channels=ardour-windows"); #else open_uri("http://webchat.freenode.net/?channels=ardour"); #endif @@ -3142,6 +3159,46 @@ ARDOUR_UI::launch_reference () PBD::open_uri (Config->get_reference_manual_url()); } +void +ARDOUR_UI::launch_tracker () +{ + PBD::open_uri ("http://tracker.ardour.org/bug_report_page.php"); +} + +void +ARDOUR_UI::launch_cheat_sheet () +{ +#ifdef __APPLE__ + PBD::open_uri ("http://manual.ardour.org/files/a3_mnemonic_cheat_sheet_osx.pdf"); +#else + PBD::open_uri ("http://manual.ardour.org/files/a3_mnemonic_cheatsheet.pdf"); +#endif +} + +void +ARDOUR_UI::launch_website () +{ + PBD::open_uri ("http://ardour.org"); +} + +void +ARDOUR_UI::launch_website_dev () +{ + PBD::open_uri ("http://ardour.org/development.html"); +} + +void +ARDOUR_UI::launch_forums () +{ + PBD::open_uri ("https://community.ardour.org/forums"); +} + +void +ARDOUR_UI::launch_howto_report () +{ + PBD::open_uri ("http://ardour.org/reporting_bugs"); +} + void ARDOUR_UI::loading_message (const std::string& msg) { @@ -3596,7 +3653,7 @@ ARDOUR_UI::start_video_server (Gtk::Window* float_window, bool popup_msg) if (icsd_docroot.empty()) {icsd_docroot = X_("/");} GStatBuf sb; - if (!g_lstat (icsd_docroot.c_str(), &sb) == 0 || !S_ISDIR(sb.st_mode)) { + if (g_lstat (icsd_docroot.c_str(), &sb) != 0 || !S_ISDIR(sb.st_mode)) { warning << _("Specified docroot is not an existing directory.") << endmsg; continue; } @@ -3874,8 +3931,8 @@ ARDOUR_UI::create_xrun_marker (framepos_t where) void ARDOUR_UI::halt_on_xrun_message () { - MessageDialog msg (*editor, - _("Recording was stopped because your system could not keep up.")); + cerr << "HALT on xrun\n"; + MessageDialog msg (*editor, _("Recording was stopped because your system could not keep up.")); msg.run (); } @@ -4001,6 +4058,8 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca scan_dlg->get_vbox()->pack_start (*scan_tbox, PACK_SHRINK, 4); } + assert(scan_dlg && scan_tbox && cancel_button); + if (type == X_("closeme")) { scan_dlg->hide(); } else {