fix default output map display for no plugin processors
[ardour.git] / gtk2_ardour / export_channel_selector.h
index 56ce5c95019ddf3c2a6e26c7bc1275acfad31d39..d5607ef30b6567ac8904c8a2ac8e3b8258021f48 100644 (file)
 #include <list>
 
 #include "ardour/export_profile_manager.h"
-#include "ardour/export_channel.h"
+
+#ifdef interface
+#undef interface
+#endif
 
 #include <gtkmm.h>
 #include <sigc++/signal.h>
@@ -43,19 +46,19 @@ namespace ARDOUR {
 
 class XMLNode;
 
-class ExportChannelSelector : public Gtk::HBox
+class ExportChannelSelector : public Gtk::HBox, public ARDOUR::SessionHandlePtr
 {
   protected:
        typedef boost::shared_ptr<ARDOUR::ExportChannelConfiguration> ChannelConfigPtr;
+       typedef std::list<ChannelConfigPtr> ChannelConfigList;
        typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ProfileManagerPtr;
 
-       ARDOUR::Session * session;
        ProfileManagerPtr manager;
 
   public:
        ExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager)
-         : session (session)
-         , manager (manager)
+               : SessionHandlePtr (session)
+               , manager (manager)
        {}
 
        virtual ~ExportChannelSelector () {}
@@ -115,7 +118,7 @@ class PortExportChannelSelector : public ExportChannelSelector
                /* Static columns */
 
                Gtk::TreeModelColumn<bool>           selected;
-               Gtk::TreeModelColumn<Glib::ustring>  name;
+               Gtk::TreeModelColumn<std::string>  name;
                Gtk::TreeModelColumn<ARDOUR::IO *>   io;
 
                /* Combo list column (shared by all channels) */
@@ -123,14 +126,14 @@ class PortExportChannelSelector : public ExportChannelSelector
                typedef Gtk::TreeModelColumn<Glib::RefPtr<Gtk::ListStore> > ComboCol;
                ComboCol                             port_list_col;
 
-               /* Channel struct, that represents the selected port and it's name */
+               /* Channel struct, that represents the selected port and its name */
 
                struct Channel {
                  public:
                        Channel (RouteCols & cols) { cols.add (port); cols.add (label); }
 
-                       Gtk::TreeModelColumn<ARDOUR::AudioPort *>  port;
-                       Gtk::TreeModelColumn<Glib::ustring>        label;
+                       Gtk::TreeModelColumn<boost::weak_ptr<ARDOUR::AudioPort> > port;
+                       Gtk::TreeModelColumn<std::string> label;
                };
                std::list<Channel> channels;
 
@@ -144,11 +147,11 @@ class PortExportChannelSelector : public ExportChannelSelector
                class PortCols : public Gtk::TreeModel::ColumnRecord
                {
                  public:
-                       PortCols () { add (selected); add(port); add(label); }
+                       PortCols () { add(selected); add(port); add(label); }
 
-                       Gtk::TreeModelColumn<bool>                  selected;  // not used ATM
-                       Gtk::TreeModelColumn<ARDOUR::AudioPort *>   port;
-                       Gtk::TreeModelColumn<Glib::ustring>         label;
+                       Gtk::TreeModelColumn<bool> selected;  // not used ATM
+                       Gtk::TreeModelColumn<boost::weak_ptr<ARDOUR::AudioPort> > port;
+                       Gtk::TreeModelColumn<std::string> label;
                };
                PortCols port_cols;
        };
@@ -176,8 +179,8 @@ class PortExportChannelSelector : public ExportChannelSelector
 
                /* Signal handlers for selections changes in the view */
 
-               void update_toggle_selection (Glib::ustring const & path);
-               void update_selection_text (Glib::ustring const & path, Glib::ustring const & new_text, uint32_t channel);
+               void update_toggle_selection (std::string const & path);
+               void update_selection_text (std::string const & path, std::string const & new_text, uint32_t channel);
 
                RouteCols                     route_cols;
                Glib::RefPtr<Gtk::ListStore>  route_list;
@@ -226,4 +229,51 @@ class RegionExportChannelSelector : public ExportChannelSelector
        Gtk::RadioButton      processed_button;
 };
 
+class TrackExportChannelSelector : public ExportChannelSelector
+{
+  public:
+       TrackExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager);
+
+       virtual void sync_with_manager ();
+
+       bool track_output () const { return track_output_button.get_active(); }
+
+  private:
+
+       void fill_list();
+       void add_track (boost::shared_ptr<ARDOUR::Route> route);
+       void update_config();
+       ChannelConfigList configs;
+
+       Gtk::VBox main_layout;
+
+       struct TrackCols : public Gtk::TreeModelColumnRecord
+       {
+         public:
+               Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Route> > route;
+               Gtk::TreeModelColumn<std::string>     label;
+               Gtk::TreeModelColumn<bool>            selected;
+               Gtk::TreeModelColumn<uint32_t>        order_key;
+
+               TrackCols () { add (route); add(label); add(selected); add(order_key); }
+       };
+       TrackCols                    track_cols;
+
+       Glib::RefPtr<Gtk::ListStore> track_list;
+       Gtk::TreeView                track_view;
+
+       Gtk::ScrolledWindow          track_scroller;
+
+       Gtk::HBox                    options_box;
+       Gtk::CheckButton             track_output_button;
+       Gtk::Button                  select_tracks_button;
+       Gtk::Button                  select_busses_button;
+       Gtk::Button                  select_none_button;
+       void select_tracks ();
+       void select_busses ();
+       void select_none ();
+
+       void track_outputs_selected ();
+};
+
 #endif /* __export_channel_selector_h__ */