/* Copyright (C) 2018 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __ardour_gtk_transport_masters_dialog_h__ #define __ardour_gtk_transport_masters_dialog_h__ #include #include #include #include #include #include #include #include #include "ardour_window.h" namespace Gtk { class Menu; } namespace ARDOUR { class TransportMaster; } class FloatingTextEntry; class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr { public: TransportMastersWidget (); ~TransportMastersWidget (); void update (ARDOUR::samplepos_t); protected: void on_map (); void on_unmap (); private: struct Row : sigc::trackable, PBD::ScopedConnectionList { Gtk::EventBox label_box; Gtk::Label label; Gtk::Label type; Gtk::Label format; Gtk::Label current; Gtk::Label last; Gtk::Label timestamp; Gtk::Label delta; Gtk::CheckButton collect_button; Gtk::RadioButton use_button; Gtk::ComboBoxText port_combo; Gtk::CheckButton sclock_synced_button; Gtk::CheckButton fr2997_button; Gtk::Button request_options; Gtk::Menu* request_option_menu; FloatingTextEntry* name_editor; samplepos_t save_when; void build_request_options(); boost::shared_ptr tm; void update (ARDOUR::Session*, ARDOUR::samplepos_t); Row (); struct PortColumns : public Gtk::TreeModel::ColumnRecord { PortColumns() { add (short_name); add (full_name); } Gtk::TreeModelColumn short_name; Gtk::TreeModelColumn full_name; }; PortColumns port_columns; void populate_port_combo (); Glib::RefPtr build_port_list (std::vector const & ports); void use_button_toggled (); void collect_button_toggled (); void sync_button_toggled (); void fr2997_button_toggled (); void port_choice_changed (); void connection_handler (); bool request_option_press (GdkEventButton*); void prop_change (PBD::PropertyChange); bool name_press (GdkEventButton*); void name_edited (std::string, int); PBD::ScopedConnection property_change_connection; bool ignore_active_change; }; std::vector rows; Gtk::RadioButtonGroup use_button_group; Gtk::Table table; Gtk::Label col_title[13]; sigc::connection update_connection; PBD::ScopedConnection current_connection; void rebuild (); void current_changed (boost::shared_ptr old_master, boost::shared_ptr new_master); }; class TransportMastersWindow : public ArdourWindow { public: TransportMastersWindow (); void set_session (ARDOUR::Session*); protected: void on_realize (); private: TransportMastersWidget w; }; #endif /* __ardour_gtk_transport_masters_dialog_h__ */