X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsession_import_dialog.cc;h=61f046e4ca2a599c4d6d9dab18d5af1754007c98;hb=3b4beb03b2a92ebfd1a9610b822360135c18038d;hp=4ab06d7cc2678ff5607f90bb0db4d4c11cfe66bd;hpb=5de817c2509b3f8ab35e1aea7292e84ca51037ab;p=ardour.git diff --git a/gtk2_ardour/session_import_dialog.cc b/gtk2_ardour/session_import_dialog.cc index 4ab06d7cc2..61f046e4ca 100644 --- a/gtk2_ardour/session_import_dialog.cc +++ b/gtk2_ardour/session_import_dialog.cc @@ -20,20 +20,20 @@ #include "session_import_dialog.h" -#include +#include "pbd/failed_constructor.h" -#include -#include -#include -#include -#include +#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 -#include #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 (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 region_handler (new AudioRegionImportHandler (tree, target)); + boost::shared_ptr pl_handler (new AudioPlaylistImportHandler (tree, target, *region_handler)); + + handlers.push_back (boost::static_pointer_cast (region_handler)); + handlers.push_back (boost::static_pointer_cast (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& 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()) {