another TLSF vs realloc-pool shootout
[ardour.git] / gtk2_ardour / location_ui.h
index 325ab96bd74defb4fcf34c735cee2ab05a737958..cdbc952e6c11821cbf6bacb727d0a112b3367363 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 "ardour_dialog.h"
+#include <gtkmm2ext/pane.h>
+
+#include "ardour_button.h"
+#include "ardour_window.h"
 #include "audio_clock.h"
 
 namespace ARDOUR {
-       class LocationStack;
        class Location;
 }
 
@@ -58,7 +59,8 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        void set_number (int);
        void focus_name();
         void set_clock_group (ClockGroup&);
-        
+        void unset_clock_group () { _clock_group = 0; }
+
        sigc::signal<void,ARDOUR::Location*> remove_requested;
        sigc::signal<void> redraw_ranges;
 
@@ -79,12 +81,14 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        Gtk::Label    number_label;
 
        Gtk::HBox     start_hbox;
-       Gtk::Button   start_go_button;
        AudioClock    start_clock;
+       ArdourButton  start_to_playhead_button;
+       ArdourButton  locate_to_start_button;
 
        Gtk::HBox     end_hbox;
-       Gtk::Button   end_go_button;
        AudioClock    end_clock;
+       ArdourButton  end_to_playhead_button;
+       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;
+       ArdourButton   remove_button;
 
        Gtk::HBox     cd_track_details_hbox;
        Gtk::Entry    isrc_entry;
@@ -104,7 +108,9 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        Gtk::Label    composer_label;
        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;
@@ -116,10 +122,10 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        void composer_entry_changed ();
 
        void to_playhead_button_pressed (LocationPart part);
-       void go_button_pressed (LocationPart part);
+       void locate_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 ();
@@ -130,15 +136,16 @@ class LocationEditRow  : public Gtk::HBox, public ARDOUR::SessionHandlePtr
        void scms_toggled ();
        void preemph_toggled ();
 
-       void end_changed (ARDOUR::Location *);
-       void start_changed (ARDOUR::Location *);
-       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 *);
+       void end_changed ();
+       void start_changed ();
+       void name_changed ();
+       void location_changed ();
+       void flags_changed ();
+       void lock_changed ();
+       void position_lock_style_changed ();
 
-       void set_clock_sensitivity ();
+       void set_clock_editable_status ();
+       void show_cd_track_details ();
 
        PBD::ScopedConnectionList connections;
 };
@@ -148,7 +155,7 @@ class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
   public:
        LocationUI ();
        ~LocationUI ();
-       
+
        void set_session (ARDOUR::Session *);
         void set_clock_mode (AudioClock::Mode);
 
@@ -157,8 +164,13 @@ class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 
        void refresh_location_list ();
 
+       XMLNode & get_state () const;
+
   private:
-       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_going_away ();
@@ -167,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;
+       Gtkmm2ext::VPane loc_range_panes;
 
        Gtk::VBox  loc_frame_box;
        Gtk::Button add_location_button;
@@ -194,13 +206,13 @@ class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 
        void location_removed (ARDOUR::Location *);
        void location_added (ARDOUR::Location *);
-       void locations_changed (ARDOUR::Locations::Change);
-       void map_locations (ARDOUR::Locations::LocationList&);
+       void map_locations (const 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 ();