peak-indicator threshold configuration
[ardour.git] / gtk2_ardour / location_ui.h
index 56401f61399b515e575a0026b72bc54a82f25399..395464e0492f11cdc275c7f89d2187fed545c469 100644 (file)
 #include <gtkmm/paned.h>
 #include <gtkmm/scrolledwindow.h>
 
+#include "pbd/signals.h"
+
 #include "ardour/location.h"
+#include "ardour/session_handle.h"
 
-#include "ardour_dialog.h"
+#include "ardour_window.h"
 #include "audio_clock.h"
 
 namespace ARDOUR {
        class LocationStack;
-       class Session;
        class Location;
 }
 
-class LocationEditRow  : public Gtk::HBox
+class ClockGroup;
+
+class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 {
   public:
        LocationEditRow (ARDOUR::Session *sess=0, ARDOUR::Location *loc=0, int32_t num=-1);
@@ -53,6 +57,7 @@ class LocationEditRow  : public Gtk::HBox
 
        void set_number (int);
        void focus_name();
+        void set_clock_group (ClockGroup&);
 
        sigc::signal<void,ARDOUR::Location*> remove_requested;
        sigc::signal<void> redraw_ranges;
@@ -66,9 +71,6 @@ class LocationEditRow  : public Gtk::HBox
        };
 
        ARDOUR::Location *location;
-       ARDOUR::Session  *session;
-
-
 
        Gtk::Table    item_table;
 
@@ -77,16 +79,18 @@ class LocationEditRow  : public Gtk::HBox
        Gtk::Label    number_label;
 
        Gtk::HBox     start_hbox;
-       Gtk::Button   start_go_button;
        AudioClock    start_clock;
+       Gtk::Button   start_to_playhead_button;
 
        Gtk::HBox     end_hbox;
-       Gtk::Button   end_go_button;
        AudioClock    end_clock;
+       Gtk::Button   end_to_playhead_button;
 
        AudioClock    length_clock;
        Gtk::CheckButton cd_check_button;
        Gtk::CheckButton hide_check_button;
+       Gtk::CheckButton lock_check_button;
+       Gtk::CheckButton glue_check_button;
 
        Gtk::Button   remove_button;
 
@@ -96,12 +100,14 @@ class LocationEditRow  : public Gtk::HBox
 
 
        Gtk::Label    performer_label;
-       Gtk::Entry  performer_entry;
+       Gtk::Entry    performer_entry;
        Gtk::Label    composer_label;
-       Gtk::Entry  composer_entry;
+       Gtk::Entry    composer_entry;
        Gtk::CheckButton   scms_check_button;
+       Gtk::Label         scms_label;
        Gtk::CheckButton   preemph_check_button;
-
+       Gtk::Label         preemph_label;
+        ClockGroup* _clock_group;
 
        guint32 i_am_the_modifier;
        int   number;
@@ -111,14 +117,15 @@ class LocationEditRow  : public Gtk::HBox
        void performer_entry_changed ();
        void composer_entry_changed ();
 
-       void set_button_pressed (LocationPart part);
-       void go_button_pressed (LocationPart part);
+       void to_playhead_button_pressed (LocationPart part);
 
        void clock_changed (LocationPart part);
-       void change_aborted (LocationPart part);
+       bool locate_to_clock (GdkEventButton*, AudioClock*);
 
        void cd_toggled ();
        void hide_toggled ();
+       void lock_toggled ();
+       void glue_toggled ();
        void remove_button_pressed ();
 
        void scms_toggled ();
@@ -129,52 +136,52 @@ class LocationEditRow  : public Gtk::HBox
        void name_changed (ARDOUR::Location *);
        void location_changed (ARDOUR::Location *);
        void flags_changed (ARDOUR::Location *, void *src);
+       void lock_changed (ARDOUR::Location *);
+       void position_lock_style_changed (ARDOUR::Location *);
 
-       sigc::connection start_changed_connection;
-       sigc::connection end_changed_connection;
-       sigc::connection name_changed_connection;
-       sigc::connection changed_connection;
-       sigc::connection flags_changed_connection;
+       void set_clock_editable_status ();
+       void show_cd_track_details ();
 
+       PBD::ScopedConnectionList connections;
 };
 
-class LocationUI : public Gtk::HBox
+class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 {
   public:
        LocationUI ();
        ~LocationUI ();
-       
-       virtual void set_session (ARDOUR::Session *);
+
+       void set_session (ARDOUR::Session *);
+        void set_clock_mode (AudioClock::Mode);
 
        void add_new_location();
        void add_new_range();
 
        void refresh_location_list ();
-       void refresh_location_list_s (ARDOUR::Change);
+
+       XMLNode & get_state () const;
 
   private:
-       ARDOUR::Session* session;
        ARDOUR::LocationStack* locations;
+       /** set to the location that has just been created with the LocationUI `add' button
+           (if Config->get_name_new_markers() is true); if it is non-0, the name entry of
+           the location is given the focus by location_added().
+       */
        ARDOUR::Location *newest_location;
 
-       void session_gone();
-
-       Gtk::VBox  location_vpacker;
+       void session_going_away ();
 
        LocationEditRow      loop_edit_row;
        LocationEditRow      punch_edit_row;
        Gtk::VBox loop_punch_box;
-       Gtk::ScrolledWindow loop_punch_scroller;
 
        Gtk::VPaned loc_range_panes;
 
-       Gtk::Frame loc_frame;
        Gtk::VBox  loc_frame_box;
        Gtk::Button add_location_button;
        Gtk::ScrolledWindow  location_rows_scroller;
        Gtk::VBox            location_rows;
 
-       Gtk::Frame range_frame;
        Gtk::VBox  range_frame_box;
        Gtk::Button add_range_button;
        Gtk::ScrolledWindow  range_rows_scroller;
@@ -195,16 +202,20 @@ class LocationUI : public Gtk::HBox
 
        void location_removed (ARDOUR::Location *);
        void location_added (ARDOUR::Location *);
+       void locations_changed (ARDOUR::Locations::Change);
        void map_locations (ARDOUR::Locations::LocationList&);
+
+        ClockGroup* _clock_group;
+       AudioClock::Mode clock_mode_from_session_instant_xml () const;
 };
 
-class LocationUIWindow : public ArdourDialog
+class LocationUIWindow : public ArdourWindow
 {
   public:
        LocationUIWindow ();
        ~LocationUIWindow ();
 
-       void on_show();
+       void on_map ();
        void set_session (ARDOUR::Session *);
 
        LocationUI& ui() { return _ui; }
@@ -212,7 +223,7 @@ class LocationUIWindow : public ArdourDialog
   protected:
        LocationUI _ui;
        bool on_delete_event (GdkEventAny*);
-       void session_gone();
+       void session_going_away();
 };
 
 #endif // __ardour_location_ui_h__