#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) :
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
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();
}
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");
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();
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) {
child[sb_cols.name] = (*element)->get_name();
child[sb_cols.queued] = false;
child[sb_cols.element] = *element;
+ child[sb_cols.info] = (*element)->get_info();
}
}
}
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);
void
SessionImportDialog::do_merge ()
{
-
+
// element types
Gtk::TreeModel::Children types = session_browser.get_model()->children();
Gtk::TreeModel::Children::iterator ti;
}
}
}
-
+
end_dialog();
-
+
if (ElementImportHandler::errors()) {
// Warn user
string txt = _("Some elements had errors in them. Please see the log for details");
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) {
{
return;
}
}
-
+
Gtk::TreeModel::Children elements = cell->children();
Gtk::TreeModel::Children::iterator ei;
for (ei = elements.begin(); ei != elements.end(); ++ei) {
}
return;
}
-
+
ElementPtr element = (*cell)[sb_cols.element];
if ((*cell)[sb_cols.queued]) {
if (!element->prepare_move()) {
}
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 ()
{
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()) {