patch from lincoln to make MIDI track height changes no longer just grow note height...
[ardour.git] / gtk2_ardour / export_timespan_selector.h
index 757b2caad222f9797cb860091791873f8815c792..5d299e1e52cd25a4eb1f93bc4a02159b5f5fbc67 100644 (file)
 #include <gtkmm.h>
 #include <boost/shared_ptr.hpp>
 
-#include <ardour/types.h>
-#include <ardour/export_profile_manager.h>
+#include "ardour/types.h"
+#include "ardour/session_handle.h"
+#include "ardour/export_profile_manager.h"
 
 namespace ARDOUR {
        class Location;
        class ExportTimespan;
        class ExportHandler;
-       class Session;
 }
 
 using ARDOUR::CDMarkerFormat;
 
-/// 
-class ExportTimespanSelector : public Gtk::VBox {
-  private:
-
+/// Timespan Selector base
+class ExportTimespanSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
+{
+  protected:
        typedef std::list<ARDOUR::Location *> LocationList;
        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 boost::shared_ptr<TimespanList> TimespanListPtr;
+       typedef ARDOUR::ExportProfileManager::TimespanStatePtr TimespanStatePtr;
 
   public:
 
-       ExportTimespanSelector ();
-       ~ExportTimespanSelector ();
+       ExportTimespanSelector (ARDOUR::Session * session, ProfileManagerPtr manager);
+
+       virtual ~ExportTimespanSelector ();
+
+       void sync_with_manager ();
 
-       void set_state (ARDOUR::ExportProfileManager::TimespanStatePtr const state_, ARDOUR::Session * session_);
-       
-       void select_one_range (Glib::ustring id);
-       
-       /* Compatibility with other elements */
-       
        sigc::signal<void> CriticalSelectionChanged;
 
-  private:
+  protected:
 
-       void fill_range_list ();
-       void set_selection_from_state ();
+       ProfileManagerPtr manager;
+       TimespanStatePtr  state;
+
+       virtual void fill_range_list () = 0;
+
+       void add_range_to_selection (ARDOUR::Location const * loc);
+       void set_time_format_from_state ();
 
-       void update_selection ();
-       void update_timespans ();
-       
        void change_time_format ();
-       
-       Glib::ustring construct_label (ARDOUR::Location const * location);
-       
-       Glib::ustring bbt_str (nframes_t frames);
-       Glib::ustring smpte_str (nframes_t frames);
-       Glib::ustring ms_str (nframes_t frames);
 
-       void update_range_name (Glib::ustring const & path, Glib::ustring const & new_text);
+       Glib::ustring construct_label (ARDOUR::Location const * location) const;
+       Glib::ustring bbt_str (nframes_t frames) const;
+       Glib::ustring timecode_str (nframes_t frames) const;
+       Glib::ustring ms_str (nframes_t frames) const;
 
-       ARDOUR::Session * session;
-       
-       ARDOUR::ExportProfileManager::TimespanStatePtr state;
+       void update_range_name (Glib::ustring const & path, Glib::ustring const & new_text);
 
        /*** GUI components ***/
-       
+
        Gtk::HBox      option_hbox;
        Gtk::Label     time_format_label;
-       
+
        /* Time format */
-       
+
        typedef ARDOUR::ExportProfileManager::TimeFormat TimeFormat;
-       
+
        struct TimeFormatCols : public Gtk::TreeModelColumnRecord
        {
          public:
                Gtk::TreeModelColumn<TimeFormat>      format;
                Gtk::TreeModelColumn<Glib::ustring>   label;
-       
+
                TimeFormatCols () { add(format); add(label); }
        };
        TimeFormatCols               time_format_cols;
        Glib::RefPtr<Gtk::ListStore> time_format_list;
        Gtk::ComboBox                time_format_combo;
-       
+
        /* View */
-       
+
        struct RangeCols : public Gtk::TreeModelColumnRecord
        {
          public:
@@ -117,15 +113,43 @@ class ExportTimespanSelector : public Gtk::VBox {
                Gtk::TreeModelColumn<Glib::ustring>       label;
                Gtk::TreeModelColumn<bool>                selected;
                Gtk::TreeModelColumn<Glib::ustring>       name;
-       
+
                RangeCols () { add (location); add(label); add(selected); add(name); }
        };
        RangeCols                    range_cols;
-       
+
        Glib::RefPtr<Gtk::ListStore> range_list;
        Gtk::TreeView                range_view;
-       
+
        Gtk::ScrolledWindow          range_scroller;
+};
+
+/// Allows seleting multiple timespans
+class ExportTimespanSelectorMultiple : public ExportTimespanSelector
+{
+  public:
+       ExportTimespanSelectorMultiple (ARDOUR::Session * session, ProfileManagerPtr manager);
+
+  private:
+
+       virtual void fill_range_list ();
+
+       void set_selection_from_state ();
+       void update_selection ();
+       void update_timespans ();
+};
+
+/// Displays one timespan
+class ExportTimespanSelectorSingle : public ExportTimespanSelector
+{
+  public:
+       ExportTimespanSelectorSingle (ARDOUR::Session * session, ProfileManagerPtr manager, Glib::ustring range_id);
+
+  private:
+
+       virtual void fill_range_list ();
+
+       Glib::ustring range_id;
 
 };