do not reset session for MonitorSection just because monitor out was removed
[ardour.git] / gtk2_ardour / location_ui.h
index 76dca563fccad4a62f21801bcdc68f460ce34111..2cd69b834c038a89724d1c649982a33457cd44e2 100644 (file)
@@ -26,7 +26,6 @@
 #include <gtkmm/table.h>
 #include <gtkmm/entry.h>
 #include <gtkmm/label.h>
-#include <gtkmm/paned.h>
 #include <gtkmm/scrolledwindow.h>
 
 #include "pbd/signals.h"
 #include "ardour/location.h"
 #include "ardour/session_handle.h"
 
+#include "widgets/ardour_button.h"
+#include "widgets/pane.h"
+
 #include "ardour_window.h"
 #include "audio_clock.h"
 
 namespace ARDOUR {
-       class LocationStack;
        class Location;
 }
 
@@ -46,7 +47,7 @@ class ClockGroup;
 
 class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 {
-  public:
+public:
        LocationEditRow (ARDOUR::Session *sess=0, ARDOUR::Location *loc=0, int32_t num=-1);
        virtual ~LocationEditRow();
 
@@ -57,12 +58,13 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 
        void set_number (int);
        void focus_name();
-        void set_clock_group (ClockGroup&);
+       void set_clock_group (ClockGroup&);
+       void unset_clock_group () { _clock_group = 0; }
 
        sigc::signal<void,ARDOUR::Location*> remove_requested;
        sigc::signal<void> redraw_ranges;
 
-  protected:
+protected:
 
        enum LocationPart {
                LocStart,
@@ -80,11 +82,13 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 
        Gtk::HBox     start_hbox;
        AudioClock    start_clock;
-       Gtk::Button   start_to_playhead_button;
+       ArdourWidgets::ArdourButton start_to_playhead_button;
+       ArdourWidgets::ArdourButton locate_to_start_button;
 
        Gtk::HBox     end_hbox;
        AudioClock    end_clock;
-       Gtk::Button   end_to_playhead_button;
+       ArdourWidgets::ArdourButton end_to_playhead_button;
+       ArdourWidgets::ArdourButton locate_to_end_button;
 
        AudioClock    length_clock;
        Gtk::CheckButton cd_check_button;
@@ -92,7 +96,7 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        Gtk::CheckButton lock_check_button;
        Gtk::CheckButton glue_check_button;
 
-       Gtk::Button   remove_button;
+       ArdourWidgets::ArdourButton remove_button;
 
        Gtk::HBox     cd_track_details_hbox;
        Gtk::Entry    isrc_entry;
@@ -102,12 +106,12 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        Gtk::Label    performer_label;
        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;
+       ClockGroup* _clock_group;
 
        guint32 i_am_the_modifier;
        int   number;
@@ -118,6 +122,7 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        void composer_entry_changed ();
 
        void to_playhead_button_pressed (LocationPart part);
+       void locate_button_pressed (LocationPart part);
 
        void clock_changed (LocationPart part);
        bool locate_to_clock (GdkEventButton*, AudioClock*);
@@ -147,12 +152,11 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 
 class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 {
-  public:
-       LocationUI ();
+public:
+       LocationUI (std::string state_node_name = "LocationUI");
        ~LocationUI ();
 
        void set_session (ARDOUR::Session *);
-        void set_clock_mode (AudioClock::Mode);
 
        void add_new_location();
        void add_new_range();
@@ -160,9 +164,9 @@ class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        void refresh_location_list ();
 
        XMLNode & get_state () const;
+       int set_state (const XMLNode&);
 
-  private:
-       ARDOUR::LocationStack* locations;
+private:
        /** 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().
@@ -175,7 +179,7 @@ class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        LocationEditRow      punch_edit_row;
        Gtk::VBox loop_punch_box;
 
-       Gtk::VPaned loc_range_panes;
+       ArdourWidgets::VPane loc_range_panes;
 
        Gtk::VBox  loc_frame_box;
        Gtk::Button add_location_button;
@@ -204,13 +208,18 @@ class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        void location_added (ARDOUR::Location *);
        void map_locations (const ARDOUR::Locations::LocationList&);
 
-        ClockGroup* _clock_group;
-       AudioClock::Mode clock_mode_from_session_instant_xml () const;
+       ClockGroup* _clock_group;
+       AudioClock::Mode clock_mode_from_session_instant_xml ();
+
+       AudioClock::Mode _mode;
+       bool _mode_set;
+
+       std::string _state_node_name;
 };
 
 class LocationUIWindow : public ArdourWindow
 {
-  public:
+public:
        LocationUIWindow ();
        ~LocationUIWindow ();
 
@@ -219,7 +228,7 @@ class LocationUIWindow : public ArdourWindow
 
        LocationUI& ui() { return _ui; }
 
-  protected:
+protected:
        LocationUI _ui;
        bool on_delete_event (GdkEventAny*);
        void session_going_away();