LuaProc::can_support_io_configuration: don't mix int and int32_t
[ardour.git] / gtk2_ardour / export_timespan_selector.h
index 688971554d134d68442782933b24627539f0b2db..91a53e5fb274ab6d7388c2da76559715355a810e 100644 (file)
 #ifndef __export_timespan_selector_h__
 #define __export_timespan_selector_h__
 
-#include "public_editor.h"
 #include "audio_clock.h"
 
 #include <list>
 
+#ifdef interface
+#undef interface
+#endif
+
 #include <gtkmm.h>
 #include <boost/shared_ptr.hpp>
 
+
 #include "ardour/types.h"
 #include "ardour/session_handle.h"
 #include "ardour/export_profile_manager.h"
@@ -40,6 +44,7 @@ namespace ARDOUR {
 }
 
 using ARDOUR::CDMarkerFormat;
+using ARDOUR::framecnt_t;
 
 /// Timespan Selector base
 class ExportTimespanSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
@@ -49,18 +54,18 @@ class ExportTimespanSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
        typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr;
        typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ProfileManagerPtr;
 
-       typedef boost::shared_ptr<ARDOUR::ExportTimespan> TimespanPtr;
-       typedef std::list<TimespanPtr> TimespanList;
+       typedef std::list<ARDOUR::ExportTimespanPtr> TimespanList;
        typedef boost::shared_ptr<TimespanList> TimespanListPtr;
        typedef ARDOUR::ExportProfileManager::TimespanStatePtr TimespanStatePtr;
 
   public:
 
-       ExportTimespanSelector (ARDOUR::Session * session, ProfileManagerPtr manager);
+       ExportTimespanSelector (ARDOUR::Session * session, ProfileManagerPtr manager, bool multi);
 
        virtual ~ExportTimespanSelector ();
 
        void sync_with_manager ();
+       virtual void allow_realtime_export (bool);
 
        sigc::signal<void> CriticalSelectionChanged;
 
@@ -68,11 +73,14 @@ class ExportTimespanSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
 
        ProfileManagerPtr manager;
        TimespanStatePtr  state;
+       bool _realtime_available;
 
        virtual void fill_range_list () = 0;
+       virtual void update_timespans () = 0;
 
-       void add_range_to_selection (ARDOUR::Location const * loc);
+       void add_range_to_selection (ARDOUR::Location const * loc, bool rt);
        void set_time_format_from_state ();
+       void toggle_realtime ();
 
        void change_time_format ();
 
@@ -84,10 +92,14 @@ class ExportTimespanSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
 
        void update_range_name (std::string const & path, std::string const & new_text);
 
+       void set_selection_state_of_all_timespans (bool);
+       int location_sorter(Gtk::TreeModel::iterator a, Gtk::TreeModel::iterator b);
+
        /*** GUI components ***/
 
-       Gtk::HBox      option_hbox;
-       Gtk::Label     time_format_label;
+       Gtk::HBox        option_hbox;
+       Gtk::Label       time_format_label;
+       Gtk::CheckButton realtime_checkbutton;
 
        /* Time format */
 
@@ -113,10 +125,11 @@ class ExportTimespanSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
                Gtk::TreeModelColumn<ARDOUR::Location *>  location;
                Gtk::TreeModelColumn<std::string>       label;
                Gtk::TreeModelColumn<bool>              selected;
+               Gtk::TreeModelColumn<bool>              realtime;
                Gtk::TreeModelColumn<std::string>       name;
                Gtk::TreeModelColumn<std::string>       length;
 
-               RangeCols () { add (location); add(label); add(selected); add(name); add(length); }
+               RangeCols () { add (location); add(label); add(selected); add(realtime); add(name); add(length); }
        };
        RangeCols                    range_cols;
 
@@ -126,12 +139,14 @@ class ExportTimespanSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
        Gtk::ScrolledWindow          range_scroller;
 };
 
-/// Allows seleting multiple timespans
+/// Allows selecting multiple timespans
 class ExportTimespanSelectorMultiple : public ExportTimespanSelector
 {
   public:
        ExportTimespanSelectorMultiple (ARDOUR::Session * session, ProfileManagerPtr manager);
 
+       void allow_realtime_export (bool);
+
   private:
 
        virtual void fill_range_list ();
@@ -147,9 +162,12 @@ class ExportTimespanSelectorSingle : public ExportTimespanSelector
   public:
        ExportTimespanSelectorSingle (ARDOUR::Session * session, ProfileManagerPtr manager, std::string range_id);
 
+       void allow_realtime_export (bool);
+
   private:
 
        virtual void fill_range_list ();
+       void update_timespans ();
 
        std::string range_id;