remove "New Return" menu option from processor box; make return toggle processor...
[ardour.git] / gtk2_ardour / session_import_dialog.cc
index 4ab06d7cc2678ff5607f90bb0db4d4c11cfe66bd..61f046e4ca2a599c4d6d9dab18d5af1754007c98 100644 (file)
 
 #include "session_import_dialog.h"
 
-#include <pbd/failed_constructor.h>
+#include "pbd/failed_constructor.h"
 
-#include <ardour/audio_region_importer.h>
-#include <ardour/audio_playlist_importer.h>
-#include <ardour/audio_track_importer.h>
-#include <ardour/location_importer.h>
-#include <ardour/tempo_map_importer.h>
+#include "ardour/audio_region_importer.h"
+#include "ardour/audio_playlist_importer.h"
+#include "ardour/audio_track_importer.h"
+#include "ardour/location_importer.h"
+#include "ardour/tempo_map_importer.h"
 
 #include <gtkmm2ext/utils.h>
-#include <gtkmm2ext/window_title.h>
 
 #include "prompter.h"
 #include "i18n.h"
 
+using namespace std;
 using namespace ARDOUR;
 
 SessionImportDialog::SessionImportDialog (ARDOUR::Session & target) :
@@ -45,20 +45,20 @@ SessionImportDialog::SessionImportDialog (ARDOUR::Session & target) :
        file_entry.set_name ("ImportFileNameEntry");
        file_entry.set_text ("/");
        Gtkmm2ext::set_size_request_to_display_given_text (file_entry, X_("Kg/quite/a/reasonable/size/for/files/i/think"), 5, 8);
-       
+
        file_browse_button.set_name ("EditorGTKButton");
        file_browse_button.signal_clicked().connect (mem_fun(*this, &SessionImportDialog::browse));
-       
+
        file_hbox.set_spacing (5);
        file_hbox.set_border_width (5);
        file_hbox.pack_start (file_entry, true, true);
        file_hbox.pack_start (file_browse_button, false, false);
-       
+
        file_frame.add (file_hbox);
        file_frame.set_border_width (5);
        file_frame.set_name ("ImportFrom");
        file_frame.set_label (_("Import from Session"));
-       
+
        get_vbox()->pack_start (file_frame, false, false);
 
        // Session browser
@@ -68,35 +68,32 @@ SessionImportDialog::SessionImportDialog (ARDOUR::Session & target) :
        session_browser.set_name ("SessionBrowser");
        session_browser.append_column (_("Elements"), sb_cols.name);
        session_browser.append_column_editable (_("Import"), sb_cols.queued);
+       session_browser.set_tooltip_column (3);
        session_browser.get_column(0)->set_min_width (180);
        session_browser.get_column(1)->set_min_width (40);
        session_browser.get_column(1)->set_sizing (Gtk::TREE_VIEW_COLUMN_AUTOSIZE);
-       
+
        session_scroll.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
        session_scroll.add (session_browser);
        session_scroll.set_size_request (220, 400);
-       
+
        // Connect signals
        Gtk::CellRendererToggle *toggle = dynamic_cast<Gtk::CellRendererToggle *> (session_browser.get_column_cell_renderer (1));
        toggle->signal_toggled().connect(mem_fun (*this, &SessionImportDialog::update));
        session_browser.signal_row_activated().connect(mem_fun (*this, &SessionImportDialog::show_info));
-       
+
        get_vbox()->pack_start (session_scroll, false, false);
-       
-       // Tooltips
-       session_browser.set_has_tooltip();
-       session_browser.signal_query_tooltip().connect(mem_fun(*this, &SessionImportDialog::query_tooltip));
-       
+
        // Buttons
        cancel_button = add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
        cancel_button->signal_clicked().connect (mem_fun (*this, &SessionImportDialog::end_dialog));
        ok_button = add_button (_("Import"), Gtk::RESPONSE_ACCEPT);
        ok_button->signal_clicked().connect (mem_fun (*this, &SessionImportDialog::do_merge));
-       
+
        // prompt signals
        ElementImporter::Rename.connect (mem_fun (*this, &SessionImportDialog::open_rename_dialog));
        ElementImporter::Prompt.connect (mem_fun (*this, &SessionImportDialog::open_prompt_dialog));
-       
+
        // Finalize
        show_all();
 }
@@ -105,18 +102,18 @@ void
 SessionImportDialog::load_session (const string& filename)
 {
        tree.read (filename);
-       AudioRegionImportHandler *region_handler;
-       
-       region_handler = new AudioRegionImportHandler (tree, target);
-       handlers.push_back (HandlerPtr(region_handler));
-       handlers.push_back (HandlerPtr(new AudioPlaylistImportHandler (tree, target, *region_handler)));
+       boost::shared_ptr<AudioRegionImportHandler> region_handler (new AudioRegionImportHandler (tree, target));
+       boost::shared_ptr<AudioPlaylistImportHandler> pl_handler (new AudioPlaylistImportHandler (tree, target, *region_handler));
+
+       handlers.push_back (boost::static_pointer_cast<ElementImportHandler> (region_handler));
+       handlers.push_back (boost::static_pointer_cast<ElementImportHandler> (pl_handler));
        handlers.push_back (HandlerPtr(new UnusedAudioPlaylistImportHandler (tree, target, *region_handler)));
-       handlers.push_back (HandlerPtr(new AudioTrackImportHandler (tree, target)));
+       handlers.push_back (HandlerPtr(new AudioTrackImportHandler (tree, target, *pl_handler)));
        handlers.push_back (HandlerPtr(new LocationImportHandler (tree, target)));
        handlers.push_back (HandlerPtr(new TempoMapImportHandler (tree, target)));
-       
+
        fill_list();
-       
+
        if (ElementImportHandler::dirty()) {
                // Warn user
                string txt = _("Some elements had errors in them. Please see the log for details");
@@ -129,7 +126,7 @@ void
 SessionImportDialog::fill_list ()
 {
        session_tree->clear();
-       
+
        // Loop through element types
        for (HandlerList::iterator handler = handlers.begin(); handler != handlers.end(); ++handler) {
                Gtk::TreeModel::iterator iter = session_tree->append();
@@ -137,7 +134,7 @@ SessionImportDialog::fill_list ()
                row[sb_cols.name] = (*handler)->get_info();
                row[sb_cols.queued] = false;
                row[sb_cols.element] = ElementPtr(); // "Null" pointer
-               
+
                // Loop through elements
                ElementList &elements = (*handler)->elements;
                for (ElementList::iterator element = elements.begin(); element != elements.end(); ++element) {
@@ -146,6 +143,7 @@ SessionImportDialog::fill_list ()
                        child[sb_cols.name] = (*element)->get_name();
                        child[sb_cols.queued] = false;
                        child[sb_cols.element] = *element;
+                       child[sb_cols.info] = (*element)->get_info();
                }
        }
 }
@@ -159,12 +157,12 @@ SessionImportDialog::browse ()
 
        dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
        dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
-  
+
        int result = dialog.run();
 
        if (result == Gtk::RESPONSE_OK) {
                string filename = dialog.get_filename();
-       
+
                if (filename.length()) {
                        file_entry.set_text (filename);
                        load_session (filename);
@@ -175,7 +173,7 @@ SessionImportDialog::browse ()
 void
 SessionImportDialog::do_merge ()
 {
-       
+
        // element types
        Gtk::TreeModel::Children types = session_browser.get_model()->children();
        Gtk::TreeModel::Children::iterator ti;
@@ -190,9 +188,9 @@ SessionImportDialog::do_merge ()
                        }
                }
        }
-       
+
        end_dialog();
-       
+
        if (ElementImportHandler::errors()) {
                // Warn user
                string txt = _("Some elements had errors in them. Please see the log for details");
@@ -206,7 +204,7 @@ void
 SessionImportDialog::update (string path)
 {
        Gtk::TreeModel::iterator cell = session_browser.get_model()->get_iter (path);
-       
+
        // Select all elements if element type is selected
        if (path.size() == 1) {
                {
@@ -218,7 +216,7 @@ SessionImportDialog::update (string path)
                                return;
                        }
                }
-               
+
                Gtk::TreeModel::Children elements = cell->children();
                Gtk::TreeModel::Children::iterator ei;
                for (ei = elements.begin(); ei != elements.end(); ++ei) {
@@ -231,7 +229,7 @@ SessionImportDialog::update (string path)
                }
                return;
        }
-       
+
        ElementPtr element = (*cell)[sb_cols.element];
        if ((*cell)[sb_cols.queued]) {
                if (!element->prepare_move()) {
@@ -243,45 +241,19 @@ SessionImportDialog::update (string path)
 }
 
 void
-SessionImportDialog::show_info(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column)
+SessionImportDialog::show_info(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn*)
 {
        if (path.size() == 1) {
                return;
        }
-       
+
        Gtk::TreeModel::iterator cell = session_browser.get_model()->get_iter (path);
-       ElementPtr element = (*cell)[sb_cols.element];
-       string info = element->get_info();
-       
+       string info = (*cell)[sb_cols.info];
+
        Gtk::MessageDialog msg (info, false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, true);
        msg.run();
 }
 
-bool
-SessionImportDialog::query_tooltip(int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip)
-{
-       Gtk::TreeModel::Path path;
-       Gtk::TreeViewColumn* column;
-       int cell_x, cell_y;
-       
-       // Get element
-       session_browser.get_path_at_pos (x, y, path, column, cell_x, cell_y);
-       if (path.gobj() == 0) {
-               return false;
-       }
-       Gtk::TreeModel::iterator row = session_browser.get_model()->get_iter (path);
-       //--row; // FIXME Strange offset in rows, if someone figures this out, please fix
-       ElementPtr element = (*row)[sb_cols.element];
-       if (element.get() == 0) {
-               return false;
-       }
-       
-       // Prepare tooltip
-       tooltip->set_text(element->get_info());
-       
-       return true;
-}
-
 void
 SessionImportDialog::end_dialog ()
 {
@@ -301,7 +273,7 @@ SessionImportDialog::open_rename_dialog (string text, string name)
        prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
        prompter.set_prompt (text);
        prompter.set_initial_text (name);
-       
+
        if (prompter.run() == Gtk::RESPONSE_ACCEPT) {
                prompter.get_result (new_name);
                if (new_name.length()) {