X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmeter_strip.h;h=a877ab998c31a25619f1d8ef626d79d99ae7be6c;hb=0e9dab6aabc2efddc957c7c71bc55354c16626ed;hp=653e045a7378f823413ba8f49e6174d05bd0ab2e;hpb=a4373a99c6b5869fa66244d1b72a08a34b62a87f;p=ardour.git diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h index 653e045a73..a877ab998c 100644 --- a/gtk2_ardour/meter_strip.h +++ b/gtk2_ardour/meter_strip.h @@ -21,67 +21,150 @@ #define __ardour_meter_strip__ #include - #include +#include +#include +#include +#include +#include + #include "pbd/stateful.h" #include "ardour/types.h" #include "ardour/ardour.h" +#include "widgets/ardour_button.h" + #include "level_meter.h" +#include "route_ui.h" namespace ARDOUR { class Route; + class RouteGroup; class Session; } -namespace Gtk { - class Window; - class Style; -} - -class Meterbridge; -class MeterStrip : public Gtk::VBox +class MeterStrip : public Gtk::VBox, public AxisView, public RouteUI { - public: - MeterStrip (Meterbridge&, ARDOUR::Session*, boost::shared_ptr); +public: + MeterStrip (ARDOUR::Session*, boost::shared_ptr); + MeterStrip (int, ARDOUR::MeterType); ~MeterStrip (); + std::string name() const; + Gdk::Color color () const; + + boost::shared_ptr stripable() const { return RouteUI::stripable(); } + + void set_session (ARDOUR::Session* s); void fast_update (); boost::shared_ptr route() { return _route; } static PBD::Signal1 CatchDeletion; + static PBD::Signal0 MetricChanged; + static PBD::Signal0 ConfigurationChanged; + + void reset_peak_display (); + void reset_route_peak_display (ARDOUR::Route*); + void reset_group_peak_display (ARDOUR::RouteGroup*); + + void set_meter_type_multi (int, ARDOUR::RouteGroup*, ARDOUR::MeterType); + + void set_metric_mode (int, ARDOUR::MeterType); + int get_metric_mode() { return _metricmode; } + void set_tick_bar (int); + int get_tick_bar() { return _tick_bar; } + bool has_midi() { return _has_midi; } + bool is_metric_display() { return _strip_type == 0; } + ARDOUR::MeterType meter_type(); + + bool selected() const { return false; } - protected: +protected: boost::shared_ptr _route; - PBD::ScopedConnectionList route_connections; + PBD::ScopedConnectionList meter_route_connections; + PBD::ScopedConnectionList level_meter_connection; void self_delete (); gint meter_metrics_expose (GdkEventExpose *); - - typedef std::map MetricPatterns; - static MetricPatterns metric_patterns; - static cairo_pattern_t* render_metrics (Gtk::Widget &, std::vector); + gint meter_ticks1_expose (GdkEventExpose *); + gint meter_ticks2_expose (GdkEventExpose *); void on_theme_changed (); - bool style_changed; void on_size_allocate (Gtk::Allocation&); void on_size_request (Gtk::Requisition*); - private: - Gtk::Label label; + /* route UI */ + void blink_rec_display (bool onoff); + std::string state_id() const; + void set_button_names (); + +private: + Gtk::VBox mtr_vbox; + Gtk::VBox nfo_vbox; + Gtk::EventBox mtr_container; + Gtk::HSeparator mtr_hsep; + Gtk::HBox meterbox; + Gtk::HBox spacer; + Gtk::HBox namebx; + Gtk::VBox namenumberbx; + ArdourWidgets::ArdourButton name_label; + ArdourWidgets::ArdourButton number_label; Gtk::DrawingArea meter_metric_area; + 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; + ArdourWidgets::ArdourButton peak_display; + std::vector _types; + ARDOUR::MeterType metric_type; + + float max_peak; + bool _has_midi; + int _tick_bar; + int _strip_type; + int _metricmode; - LevelMeter *level_meter; - void meter_changed (); + LevelMeterHBox *level_meter; - PBD::ScopedConnection _config_connection; - void strip_property_changed (const PBD::PropertyChange&); + void route_property_changed (const PBD::PropertyChange&); void meter_configuration_changed (ARDOUR::ChanCount); + void meter_type_changed (ARDOUR::MeterType); + void update_background (ARDOUR::MeterType); + + bool peak_button_release (GdkEventButton*); + + void parameter_changed (std::string const & p); + void redraw_metrics (); + void update_button_box (); + void update_name_box (); + void name_changed (); + + void route_color_changed (); + + bool _suspend_menu_callbacks; + bool level_meter_button_press (GdkEventButton* ev); + void popup_level_meter_menu (GdkEventButton* ev); + void add_level_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType); + + bool name_label_button_release (GdkEventButton* ev); + void popup_name_label_menu (GdkEventButton* ev); + void add_label_height_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, uint32_t); + void set_meter_type (ARDOUR::MeterType mode); + void set_label_height (uint32_t); }; #endif /* __ardour_mixer_strip__ */