From 596e3b91403a5d6d94e98b9bf4e55b1f4e79927b Mon Sep 17 00:00:00 2001 From: VKamyshniy Date: Wed, 16 Jul 2014 00:11:50 +0300 Subject: [PATCH] [Summary] Progressing MASTER UI and occasional cleanup --- gtk2_ardour/audio_time_axis.cc | 1 - gtk2_ardour/editor.cc | 5 ++ gtk2_ardour/editor.h | 17 +++--- gtk2_ardour/editor_mixer.cc | 5 +- gtk2_ardour/editor_routes.cc | 19 +++--- gtk2_ardour/editor_routes.h | 44 ++++++++------ gtk2_ardour/gain_meter.h | 2 + gtk2_ardour/level_meter.cc | 6 +- gtk2_ardour/master_bus_ui.cc | 54 +++++++++++++---- gtk2_ardour/master_bus_ui.h | 8 ++- gtk2_ardour/meter_strip.cc | 71 ++-------------------- gtk2_ardour/meter_strip.h | 10 ---- gtk2_ardour/route_ui.cc | 1 - gtk2_ardour/time_axis_view.cc | 1 - gtk2_ardour/ui/editor_window.xml | 2 +- gtk2_ardour/ui/master_ui.xml | 80 ++++++++++++++----------- gtk2_ardour/ui/master_ui_gain_meter.xml | 6 +- gtk2_ardour/waves_ui.cc | 1 - 18 files changed, 158 insertions(+), 175 deletions(-) diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 734160e888..6519254a17 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -69,7 +69,6 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session* sess, ArdourCan : AxisView(sess) , RouteTimeAxisView(ed, sess, canvas, "audio_time_axis.xml") { - std::cout << "AudioTimeAxisView::AudioTimeAxisView ()" << std::endl; } void diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 0c2cd24d3b..4aade1eba6 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -117,6 +117,7 @@ #include "sfdb_ui.h" #include "tempo_lines.h" #include "time_axis_view.h" +#include "master_bus_ui.h" #include "utils.h" #include "i18n.h" @@ -5494,6 +5495,10 @@ Editor::super_rapid_screen_update () if (current_mixer_strip) { current_mixer_strip->fast_update (); } + + if (_master_bus_ui) { + _master_bus_ui->fast_update (); + } /* PLAYHEAD AND VIEWPORT */ diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 107621e3d0..cd4171abf6 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -124,6 +124,7 @@ class TimeFXDialog; class TimeSelection; class RegionLayeringOrderEditor; class VerboseCursor; +class MasterBusUI; class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr { @@ -303,13 +304,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void get_onscreen_tracks (TrackViewList&); -// Width editor_mixer_strip_width; -// void maybe_add_mixer_strip_width (XMLNode&); void show_editor_mixer (bool yn); void create_editor_mixer (); void show_editor_list (bool yn); void set_selected_mixer_strip (TimeAxisView&); -// void mixer_strip_width_changed (); void hide_track_in_display (TimeAxisView* tv, bool apply_to_selection = false); /* nudge is initiated by transport controls owned by ARDOUR_UI */ @@ -461,8 +459,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD protected: void map_transport_state (); void map_position_change (framepos_t); - void on_realize(); + MasterBusUI* master_bus_ui () { return _master_bus_ui; } private: @@ -688,11 +686,12 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void add_routes (ARDOUR::RouteList&); void timeaxisview_deleted (TimeAxisView *); - Gtk::HBox& global_hpacker; - Gtk::VBox& global_vpacker; - Gtk::Container& inspector_home; - Gtk::Container& master_bus_ui_home; - Gtk::VBox& vpacker; + Gtk::HBox& global_hpacker; + Gtk::VBox& global_vpacker; + Gtk::Container& inspector_home; + Gtk::Container& master_bus_ui_home; + Gtk::VBox& vpacker; + MasterBusUI* _master_bus_ui; Gdk::Cursor* current_canvas_cursor; Gdk::Cursor* which_grabber_cursor (); diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index eede62939d..9ea70ea11a 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -178,8 +178,8 @@ Editor::create_editor_mixer () "editor_mixer.xml"); current_mixer_strip->Hiding.connect (sigc::mem_fun(*this, &Editor::current_mixer_strip_hidden)); current_mixer_strip->set_embedded (true); - MasterBusUI* mbu = new MasterBusUI (*this, _session); - master_bus_ui_home.add (*mbu); + _master_bus_ui = new MasterBusUI (*this, _session); + master_bus_ui_home.add (*_master_bus_ui); } void @@ -238,7 +238,6 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) if (route) { current_mixer_strip->set_route (route); - //current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); } } diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index 354797642a..db9db74cab 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -42,6 +42,7 @@ #include "audio_time_axis.h" #include "midi_time_axis.h" #include "mixer_strip.h" +#include "master_bus_ui.h" #include "gui_thread.h" #include "actions.h" #include "utils.h" @@ -50,6 +51,7 @@ #include "editor_routes.h" #include "i18n.h" +#include "dbg_msg.h" using namespace std; using namespace ARDOUR; @@ -67,13 +69,13 @@ struct ColumnInfo { EditorRoutes::EditorRoutes (Editor* e) : EditorComponent (e) - , _ignore_reorder (false) - , _no_redisplay (false) - , _adding_routes (false) - , _menu (0) - , old_focus (0) - , selection_countdown (0) - , name_editable (0) + , _ignore_reorder (false) + , _no_redisplay (false) + , _adding_routes (false) + , _menu (0) + , old_focus (0) + , selection_countdown (0) + , name_editable (0) { static const int column_width = 22; @@ -515,6 +517,9 @@ EditorRoutes::redisplay () } if (route->is_master()) { + if (_editor->master_bus_ui ()) { + _editor->master_bus_ui ()->set_route (route); + } continue; } diff --git a/gtk2_ardour/editor_routes.h b/gtk2_ardour/editor_routes.h index 9780307435..54560137d3 100644 --- a/gtk2_ardour/editor_routes.h +++ b/gtk2_ardour/editor_routes.h @@ -59,8 +59,8 @@ public: std::list views () const; void hide_all_tracks (bool); void clear (); - void sync_order_keys_from_treeview (); - void reset_remote_control_ids (); + void sync_order_keys_from_treeview (); + void reset_remote_control_ids (); private: void initial_display (); @@ -98,14 +98,20 @@ private: void show_all_miditracks (); void hide_all_miditracks (); void show_tracks_with_regions_at_playhead (); - void selection_changed (); + void selection_changed (); - void display_drag_data_received ( - Glib::RefPtr const &, gint, gint, Gtk::SelectionData const &, guint, guint - ); + void display_drag_data_received (Glib::RefPtr const &, + gint, + gint, + Gtk::SelectionData const &, + guint, + guint); - bool selection_filter (Glib::RefPtr const &, Gtk::TreeModel::Path const &, bool); - void name_edit (std::string const &, std::string const &); + bool selection_filter (Glib::RefPtr const &, + Gtk::TreeModel::Path const &, + bool); + void name_edit (std::string const &, + std::string const &); void solo_changed_so_update_mute (); struct ModelColumns : public Gtk::TreeModel::ColumnRecord { @@ -155,21 +161,21 @@ private: bool _ignore_reorder; bool _no_redisplay; - bool _adding_routes; + bool _adding_routes; Gtk::Menu* _menu; - Gtk::Widget* old_focus; - uint32_t selection_countdown; - Gtk::CellEditable* name_editable; + Gtk::Widget* old_focus; + uint32_t selection_countdown; + Gtk::CellEditable* name_editable; - bool key_press (GdkEventKey* ev); - bool focus_in (GdkEventFocus*); - bool focus_out (GdkEventFocus*); - bool enter_notify (GdkEventCrossing*); - bool leave_notify (GdkEventCrossing*); - void name_edit_started (Gtk::CellEditable*, const Glib::ustring&); + bool key_press (GdkEventKey* ev); + bool focus_in (GdkEventFocus*); + bool focus_out (GdkEventFocus*); + bool enter_notify (GdkEventCrossing*); + bool leave_notify (GdkEventCrossing*); + void name_edit_started (Gtk::CellEditable*, const Glib::ustring&); - bool get_relevant_routes (boost::shared_ptr rl); + bool get_relevant_routes (boost::shared_ptr rl); }; #endif /* __ardour_gtk_editor_route_h__ */ diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index 29442c44ed..f29bdb346d 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -91,6 +91,8 @@ class GainMeter : virtual public sigc::trackable, ARDOUR::SessionHandlePtr, publ LevelMeterHBox& get_level_meter() { return level_meter; } Gtkmm2ext::Fader& get_gain_slider() { return gain_slider; } + WavesButton& get_gain_display_button () { return gain_display_button; } + WavesButton& get_peak_display_button () { return peak_display_button; } /** Emitted in the GUI thread when a button is pressed over the level meter; * return true if the event is handled. diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc index b3dae8287b..634a100cfb 100644 --- a/gtk2_ardour/level_meter.cc +++ b/gtk2_ardour/level_meter.cc @@ -124,13 +124,13 @@ static float vu_standard() { float LevelMeterBase::update_meters () { - vector::iterator i; - uint32_t n; - if (!_meter) { return 0.0f; } + vector::iterator i; + uint32_t n; + uint32_t nmidi = _meter->input_streams().n_midi(); for (n = 0, i = meters.begin(); i != meters.end(); ++i, ++n) { diff --git a/gtk2_ardour/master_bus_ui.cc b/gtk2_ardour/master_bus_ui.cc index 6b83797ea7..fd4d5325ac 100644 --- a/gtk2_ardour/master_bus_ui.cc +++ b/gtk2_ardour/master_bus_ui.cc @@ -88,35 +88,65 @@ using namespace Editing; using namespace std; using std::list; +PBD::Signal1 MasterBusUI::CatchDeletion; + MasterBusUI::MasterBusUI (PublicEditor& ed, Session* sess) : AxisView (sess) , RouteUI (sess, "master_ui.xml") - , gain_meter_home (get_box ("gain_meter_home")) - , gm (sess, "master_ui_gain_meter.xml") + , peak_display_button (get_waves_button ("peak_display_button")) + , level_meter_home (get_box ("level_meter_home")) { - LevelMeterHBox& level_meter = gm.get_level_meter(); - if (level_meter.get_parent ()) { - level_meter.get_parent ()->remove (level_meter); - } + level_meter = new LevelMeterHBox(sess); + //level_meter->ButtonRelease.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::level_meter_button_release, this, _1)); + //level_meter->MeterTypeChanged.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::meter_type_changed, this, _1)); + level_meter_home.pack_start (*level_meter, true, true); + peak_display_button.unset_flags (Gtk::CAN_FOCUS); +} - gain_meter_home.pack_start(level_meter, true, true); +MasterBusUI::~MasterBusUI () +{ + if (level_meter) { + delete level_meter; + CatchDeletion (this); + } } void MasterBusUI::set_route (boost::shared_ptr rt) { - RouteUI::set_route (rt); -} - -MasterBusUI::~MasterBusUI () -{ + level_meter->set_meter (rt->shared_peak_meter().get()); + level_meter->clear_meters(); + level_meter->set_type (rt->meter_type()); + level_meter->setup_meters (6, 6); + RouteUI::set_route(rt); } void MasterBusUI::set_button_names () { } +void +MasterBusUI::fast_update () +{ + if (_route) { + Gtk::Requisition sz; + size_request (sz); + if (sz.height == 0) { + return; + } + float mpeak = level_meter->update_meters(); +/* + if (mpeak > max_peak) { + max_peak = mpeak; + if (mpeak >= Config->get_meter_peak()) { + peak_display.set_name ("meterbridge peakindicator on"); + } + } + */ + } +} + std::string MasterBusUI::state_id () const { diff --git a/gtk2_ardour/master_bus_ui.h b/gtk2_ardour/master_bus_ui.h index 903cfafe90..4f57030731 100644 --- a/gtk2_ardour/master_bus_ui.h +++ b/gtk2_ardour/master_bus_ui.h @@ -72,13 +72,17 @@ public: ARDOUR::Session*); virtual ~MasterBusUI (); + void fast_update (); void set_route (boost::shared_ptr); virtual void set_button_names (); virtual std::string state_id () const; + static PBD::Signal1 CatchDeletion; + private: - Gtk::Box& gain_meter_home; - GainMeter gm; + Gtk::Box& level_meter_home; + LevelMeterHBox* level_meter; + WavesButton& peak_display_button; }; #endif /* __tracks_master_bus_ui_h__ */ diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index 75d5bef2f8..bda4af47e6 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -66,53 +66,14 @@ MeterStrip::MeterStrip (int metricmode, MeterType mt) , name_label (get_waves_button ("name_label")) , peak_display (get_waves_button ("peak_display")) , level_meter_home (get_box ("level_meter_home")) + , level_meter (0) + , _strip_type (0) + , _tick_bar (0) + , _metricmode (-1) + , metric_type (MeterPeak) { - std::cout << "a) MeterStrip::MeterStrip ()" << std::endl; - level_meter = 0; - _strip_type = 0; - _tick_bar = 0; - _metricmode = -1; - metric_type = MeterPeak; -// mtr_vbox.set_spacing(2); -// nfo_vbox.set_spacing(2); -// peakbx.set_size_request(-1, 14); -// namebx.set_size_request(18, 52); -// spacer.set_size_request(-1,0); - set_metric_mode(metricmode, mt); -// meter_metric_area.set_size_request(25, 10); -// meter_metric_area.signal_expose_event().connect ( -// sigc::mem_fun(*this, &MeterStrip::meter_metrics_expose)); -// RedrawMetrics.connect (sigc::mem_fun(*this, &MeterStrip::redraw_metrics)); - -// meterbox.pack_start(meter_metric_area, true, false); - -// mtr_vbox.pack_start (peakbx, false, false); -// mtr_vbox.pack_start (meterbox, true, true); -// mtr_vbox.pack_start (spacer, false, false); -// mtr_container.add(mtr_vbox); - -// mtr_hsep.set_size_request(-1,1); -// mtr_hsep.set_name("BlackSeparator"); - -// nfo_vbox.pack_start (mtr_hsep, false, false); -// nfo_vbox.pack_start (btnbox, false, false); -// nfo_vbox.pack_start (namebx, false, false); - -// pack_start (mtr_container, true, true); -// pack_start (nfo_vbox, false, false); - -// peakbx.show(); -// btnbox.show(); -// meter_metric_area.show(); -// meterbox.show(); -// spacer.show(); -// mtr_vbox.show(); -// mtr_container.show(); -// mtr_hsep.show(); -// nfo_vbox.show(); - UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &MeterStrip::on_theme_changed)); ColorsChanged.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed)); DPIReset.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed)); @@ -127,9 +88,6 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr rt) , peak_display (get_waves_button ("peak_display")) , level_meter_home (get_box ("level_meter_home")) { - std::cout << "b) MeterStrip::MeterStrip ()" << std::endl; -// mtr_vbox.set_spacing(2); -// nfo_vbox.set_spacing(2); RouteUI::set_route (rt); SessionHandlePtr::set_session (sess); @@ -153,25 +111,9 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr rt) level_meter->MeterTypeChanged.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::meter_type_changed, this, _1)); level_meter_home.add (*level_meter); -// meter_align.set(0.5, 0.5, 0.0, 1.0); -// meter_align.add(*level_meter); - -// meterbox.pack_start(meter_ticks1_area, true, false); -// meterbox.pack_start(meter_align, true, true); -// meterbox.pack_start(meter_ticks2_area, true, false); - // peak display -// peak_display.set_name ("meterbridge peakindicator"); -// peak_display.set_elements((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body)); max_peak = minus_infinity(); peak_display.unset_flags (Gtk::CAN_FOCUS); -// peak_display.set_size_request(12, 8); -// peak_display.set_corner_radius(2); - -// peak_align.set(0.5, 1.0, 1.0, 0.8); -// peak_align.add(peak_display); -// peakbx.pack_start(peak_align, true, true, 3); -// peakbx.set_size_request(-1, 14); // add track-name label name_label.set_text(_route->name()); @@ -292,7 +234,6 @@ MeterStrip::fast_update () max_peak = mpeak; if (mpeak >= Config->get_meter_peak()) { peak_display.set_name ("meterbridge peakindicator on"); -// peak_display.set_elements((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body)); } } } @@ -480,8 +421,6 @@ MeterStrip::reset_peak_display () _route->shared_peak_meter()->reset_max(); level_meter->clear_meters(); max_peak = -INFINITY; -// peak_display.set_name ("meterbridge peakindicator"); -// peak_display.set_elements((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body)); } bool diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h index 8bfaacbe49..415b03809b 100644 --- a/gtk2_ardour/meter_strip.h +++ b/gtk2_ardour/meter_strip.h @@ -105,16 +105,6 @@ class MeterStrip :public RouteUI // Gtk::DrawingArea meter_ticks1_area; // Gtk::DrawingArea meter_ticks2_area; -// Gtk::HBox mutebox; -// Gtk::HBox solobox; -// Gtk::HBox recbox; -// Gtk::HBox mon_in_box; -// Gtk::HBox mon_disk_box; - -// Gtk::Alignment meter_align; -// Gtk::Alignment peak_align; -// Gtk::HBox peakbx; -// Gtk::VBox btnbox; WavesButton& peak_display; std::vector _types; diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index ae0c46e87f..1d47c843ce 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -84,7 +84,6 @@ RouteUI::RouteUI (ARDOUR::Session* sess, const std::string& layout_script_file) , monitor_disk_button (get_waves_button ("monitor_disk_button")) { set_attributes (*this, *xml_tree ()->root (), XMLNodeMap ()); - std::cout << "RouteUI::RouteUI (" << layout_script_file << ")" << std::endl; if (sess) init (); } diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 41296f366e..d6fb47cefd 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -102,7 +102,6 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, , name_label (ui.get_label ("name_label")) , number_label (ui.get_label ("number_label")) { - std::cout << "TimeAxisView::TimeAxisView ()" << std::endl; if (extra_height == 0) { compute_heights (); } diff --git a/gtk2_ardour/ui/editor_window.xml b/gtk2_ardour/ui/editor_window.xml index b4d55631a9..3df1426fd8 100644 --- a/gtk2_ardour/ui/editor_window.xml +++ b/gtk2_ardour/ui/editor_window.xml @@ -173,7 +173,7 @@ box.fill="true" box.expand="true"> - + diff --git a/gtk2_ardour/ui/master_ui.xml b/gtk2_ardour/ui/master_ui.xml index 77e7c1e98a..4357229709 100644 --- a/gtk2_ardour/ui/master_ui.xml +++ b/gtk2_ardour/ui/master_ui.xml @@ -1,42 +1,52 @@ - - - - + + +