set midi-metric ticks depending on meter-type
[ardour.git] / gtk2_ardour / ardour_ui.cc
index 3432a3ccbf491d373a70b9cac1a6aefd43ddd276..6a000d298190820f2e2464540748b7826b89ac11 100644 (file)
@@ -181,6 +181,8 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        , solo_alert_button (_("solo"))
        , feedback_alert_button (_("feedback"))
 
+       , editor_meter(0)
+
        , speaker_config_window (X_("speaker-config"), _("Speaker Configuration"))
        , theme_manager (X_("theme-manager"), _("Theme Manager"))
        , key_editor (X_("key-editor"), _("Key Bindings"))
@@ -188,13 +190,13 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        , add_route_dialog (X_("add-routes"), _("Add Tracks/Busses"))
        , about (X_("about"), _("About"))
        , location_ui (X_("locations"), _("Locations"))
+       , route_params (X_("inspector"), _("Tracks and Busses"))
        , session_option_editor (X_("session-options-editor"), _("Properties"), boost::bind (&ARDOUR_UI::create_session_option_editor, this))
        , add_video_dialog (X_("add-video"), _("Add Tracks/Busses"), boost::bind (&ARDOUR_UI::create_add_video_dialog, this))
        , bundle_manager (X_("bundle-manager"), _("Bundle Manager"), boost::bind (&ARDOUR_UI::create_bundle_manager, this))
        , big_clock_window (X_("big-clock"), _("Big Clock"), boost::bind (&ARDOUR_UI::create_big_clock_window, this))
        , audio_port_matrix (X_("audio-connection-manager"), _("Audio Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::AUDIO))
        , midi_port_matrix (X_("midi-connection-manager"), _("MIDI Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::MIDI))
-       , route_params (X_("inspector"), _("Tracks and Busses"), boost::bind (&ARDOUR_UI::create_route_params_window, this))
 
        , error_log_button (_("Errors"))
 
@@ -214,6 +216,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
 
        editor = 0;
        mixer = 0;
+       meterbridge = 0;
        editor = 0;
        engine = 0;
        _session_is_new = false;
@@ -363,18 +366,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
           and its functionality are separate 
        */
        
-       if (audio_port_matrix) {
-               audio_port_matrix->set_session (_session);
-       }
-
-       if (midi_port_matrix) {
-               midi_port_matrix->set_session (_session);
-       }
-
-       if (route_params) {
-               route_params->set_session (_session);
-       }
-
        (void) theme_manager.get (true);
        
        starting.connect (sigc::mem_fun(*this, &ARDOUR_UI::startup));
@@ -522,6 +513,7 @@ ARDOUR_UI::~ARDOUR_UI ()
        delete keyboard;
        delete editor;
        delete mixer;
+       delete meterbridge;
 
        stop_video_server();
 }
@@ -908,8 +900,7 @@ If you still wish to quit, please use the\n\n\
 
                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;
@@ -1039,11 +1030,14 @@ ARDOUR_UI::every_point_one_seconds ()
 }
 
 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 */
+       if (editor_meter) {
+               editor_meter->update_meters();
+       }
        return TRUE;
 }
 
@@ -1499,7 +1493,14 @@ ARDOUR_UI::open_session ()
                        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");
@@ -4118,3 +4119,29 @@ ARDOUR_UI::session_format_mismatch (std::string xml_path, std::string backup_pat
 
        msg.run ();
 }
+
+
+void
+ARDOUR_UI::reset_peak_display ()
+{
+       if (!_session || !_session->master_out() || !editor_meter) return;
+       editor_meter->clear_meters();
+}
+
+void
+ARDOUR_UI::reset_group_peak_display (RouteGroup* group)
+{
+       if (!_session || !_session->master_out()) return;
+       if (group == _session->master_out()->route_group()) {
+               reset_peak_display ();
+       }
+}
+
+void
+ARDOUR_UI::reset_route_peak_display (Route* route)
+{
+       if (!_session || !_session->master_out()) return;
+       if (_session->master_out().get() == route) {
+               reset_peak_display ();
+       }
+}