#include <list>
#include "pbd/xml++.h"
+#include "pbd/signals.h"
+
#include "ardour/ardour.h"
#include "ardour/mute_master.h"
+#include "ardour/session_event.h"
+#include "ardour/session.h"
#include "ardour/route.h"
+#include "ardour/route_group.h"
#include "ardour/track.h"
#include "axis_view.h"
class RouteUI : public virtual AxisView
{
public:
- RouteUI(ARDOUR::Session&);
- RouteUI(boost::shared_ptr<ARDOUR::Route>, ARDOUR::Session&);
+ RouteUI(ARDOUR::Session*);
+ RouteUI(boost::shared_ptr<ARDOUR::Route>, ARDOUR::Session*);
virtual ~RouteUI();
bool multiple_mute_change;
bool multiple_solo_change;
+ BindableToggleButton* invert_button;
BindableToggleButton* mute_button;
BindableToggleButton* solo_button;
BindableToggleButton* rec_enable_button; /* audio tracks */
Gtk::Label solo_button_label;
Gtk::Label mute_button_label;
+ Gtk::Label invert_button_label;
Gtk::Label rec_enable_button_label;
void send_blink (bool);
Gtk::Menu* solo_menu;
Gtk::Menu* sends_menu;
-
XMLNode *xml_node;
void ensure_xml_node ();
virtual XMLNode* get_automation_child_xml_node (Evoral::Parameter param);
+ void invert_toggled();
bool mute_press(GdkEventButton*);
bool mute_release(GdkEventButton*);
bool solo_press(GdkEventButton*);
void solo_changed_so_update_mute ();
void mute_changed(void*);
void listen_changed(void*);
- virtual void processors_changed () {}
+ virtual void processors_changed (ARDOUR::RouteProcessorChange) {}
void route_rec_enable_changed();
void session_rec_enable_changed();
void build_mute_menu(void);
void init_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem*);
- void set_route_group_solo (boost::shared_ptr<ARDOUR::Route>, bool);
- void set_route_group_mute (boost::shared_ptr<ARDOUR::Route>, bool);
- void set_route_group_rec_enable (boost::shared_ptr<ARDOUR::Route>, bool);
-
int set_color_from_route ();
void remove_this_route ();
void route_rename();
- virtual void name_changed ();
+ virtual void property_changed (const PBD::PropertyChange&);
void route_removed ();
Gtk::CheckMenuItem *route_active_menu_item;
void toggle_route_active ();
virtual void route_active_changed ();
- Gtk::CheckMenuItem *polarity_menu_item;
- void toggle_polarity ();
virtual void polarity_changed ();
Gtk::CheckMenuItem *denormal_menu_item;
virtual void map_frozen ();
- void reversibly_apply_route_boolean (std::string name, void (ARDOUR::Route::*func)(bool, void*), bool, void *);
- void reversibly_apply_track_boolean (std::string name, void (ARDOUR::Track::*func)(bool, void*), bool, void *);
-
void adjust_latency ();
void save_as_template ();
void open_remote_control_id_dialog ();
+ static int solo_visual_state (boost::shared_ptr<ARDOUR::Route>);
+ static int solo_visual_state_with_isolate (boost::shared_ptr<ARDOUR::Route>);
+ static int solo_isolate_visual_state (boost::shared_ptr<ARDOUR::Route>);
+ static int solo_safe_visual_state (boost::shared_ptr<ARDOUR::Route>);
+ static int mute_visual_state (ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>);
+
protected:
- std::vector<sigc::connection> connections;
+ PBD::ScopedConnectionList route_connections;
bool self_destruct;
void init ();
void reset ();
+ void self_delete ();
+
private:
void check_rec_enable_sensitivity ();
void parameter_changed (std::string const &);
void relabel_solo_button ();
+
+ struct SoloMuteRelease {
+ SoloMuteRelease (bool was_active)
+ : active (was_active)
+ , exclusive (false) {}
+
+ boost::shared_ptr<ARDOUR::RouteList> routes;
+ boost::shared_ptr<ARDOUR::RouteList> routes_on;
+ boost::shared_ptr<ARDOUR::RouteList> routes_off;
+ boost::shared_ptr<ARDOUR::Route> route;
+ bool active;
+ bool exclusive;
+ };
+
+ SoloMuteRelease* _solo_release;
+ SoloMuteRelease* _mute_release;
+
};
#endif /* __ardour_route_ui__ */