summaryrefslogtreecommitdiff
path: root/gtk2_ardour/sfdb_ui.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-12-23 18:25:26 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-12-23 18:25:26 +0000
commitbe4337689ef37d5739ff54ab127d7c73e31be6b0 (patch)
tree5098618403509ec3097c6307e5649874e2fbc70a /gtk2_ardour/sfdb_ui.cc
parent348db7bae56212a24aaa3bc4f8c209eef4c86f3f (diff)
make import dialog non-modal
git-svn-id: svn://localhost/ardour2/branches/3.0@13717 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/sfdb_ui.cc')
-rw-r--r--gtk2_ardour/sfdb_ui.cc406
1 files changed, 240 insertions, 166 deletions
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index 3ac1dff2ab..ee6a86290f 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -62,6 +62,7 @@
#include "utils.h"
#include "gain_meter.h"
#include "main_clock.h"
+#include "public_editor.h"
#ifdef FREESOUND
#include "sfdb_freesound_mootcher.h"
@@ -414,192 +415,197 @@ SoundFileBox::save_tags (const vector<string>& tags)
}
SoundFileBrowser::SoundFileBrowser (Gtk::Window& parent, string title, ARDOUR::Session* s, bool persistent)
- : ArdourDialog (parent, title, false, false),
- found_list (ListStore::create(found_list_columns)),
- freesound_list (ListStore::create(freesound_list_columns)),
- chooser (FILE_CHOOSER_ACTION_OPEN),
- preview (persistent),
- found_search_btn (_("Search")),
- found_list_view (found_list),
- freesound_search_btn (_("Search")),
- freesound_list_view (freesound_list)
+ : ArdourWindow (parent, title)
+ , found_list (ListStore::create(found_list_columns))
+ , freesound_list (ListStore::create(freesound_list_columns))
+ , chooser (FILE_CHOOSER_ACTION_OPEN)
+ , preview (persistent)
+ , found_search_btn (_("Search"))
+ , found_list_view (found_list)
+ , freesound_search_btn (_("Search"))
+ , freesound_list_view (freesound_list)
+ , resetting_ourselves (false)
+ , matches (0)
+ , _status (0)
+ , _done (false)
+ , ok_button (Stock::OK)
+ , cancel_button (Stock::CANCEL)
+ , apply_button (Stock::APPLY)
+ , gm (0)
{
- resetting_ourselves = false;
- gm = 0;
-
- resetting_ourselves = false;
- gm = 0;
#ifdef GTKOSX
chooser.add_shortcut_folder_uri("file:///Library/GarageBand/Apple Loops");
chooser.add_shortcut_folder_uri("file:///Library/Audio/Apple Loops");
chooser.add_shortcut_folder_uri("file:///Library/Application Support/GarageBand/Instrument Library/Sampler/Sampler Files");
-
chooser.add_shortcut_folder_uri("file:///Volumes");
#endif
-#ifdef FREESOUND
- mootcher = new Mootcher();
-#endif
-
//add the file chooser
- {
- chooser.set_border_width (12);
-
- audio_and_midi_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun (*this, &SoundFileBrowser::on_audio_and_midi_filter));
- audio_and_midi_filter.set_name (_("Audio and MIDI files"));
- audio_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun(*this, &SoundFileBrowser::on_audio_filter));
- audio_filter.set_name (_("Audio files"));
-
- midi_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun(*this, &SoundFileBrowser::on_midi_filter));
- midi_filter.set_name (_("MIDI files"));
-
- matchall_filter.add_pattern ("*.*");
- matchall_filter.set_name (_("All files"));
+ chooser.set_border_width (12);
+
+ audio_and_midi_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun (*this, &SoundFileBrowser::on_audio_and_midi_filter));
+ audio_and_midi_filter.set_name (_("Audio and MIDI files"));
+
+ audio_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun(*this, &SoundFileBrowser::on_audio_filter));
+ audio_filter.set_name (_("Audio files"));
+
+ midi_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun(*this, &SoundFileBrowser::on_midi_filter));
+ midi_filter.set_name (_("MIDI files"));
+
+ matchall_filter.add_pattern ("*.*");
+ matchall_filter.set_name (_("All files"));
+
+ chooser.add_filter (audio_and_midi_filter);
+ chooser.add_filter (audio_filter);
+ chooser.add_filter (midi_filter);
+ chooser.add_filter (matchall_filter);
+ chooser.set_select_multiple (true);
+ chooser.signal_update_preview().connect(sigc::mem_fun(*this, &SoundFileBrowser::update_preview));
+ chooser.signal_file_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::chooser_file_activated));
- chooser.add_filter (audio_and_midi_filter);
- chooser.add_filter (audio_filter);
- chooser.add_filter (midi_filter);
- chooser.add_filter (matchall_filter);
- chooser.set_select_multiple (true);
- chooser.signal_update_preview().connect(sigc::mem_fun(*this, &SoundFileBrowser::update_preview));
- chooser.signal_file_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::chooser_file_activated));
#ifdef GTKOSX
- /* some broken redraw behaviour - this is a bandaid */
- chooser.signal_selection_changed().connect (mem_fun (chooser, &Widget::queue_draw));
+ /* some broken redraw behaviour - this is a bandaid */
+ chooser.signal_selection_changed().connect (mem_fun (chooser, &Widget::queue_draw));
#endif
-
- if (!persistent_folder.empty()) {
- chooser.set_current_folder (persistent_folder);
- }
- notebook.append_page (chooser, _("Browse Files"));
+
+ if (!persistent_folder.empty()) {
+ chooser.set_current_folder (persistent_folder);
}
+ notebook.append_page (chooser, _("Browse Files"));
+
hpacker.set_spacing (6);
hpacker.pack_start (notebook, true, true);
hpacker.pack_start (preview, false, false);
- get_vbox()->pack_start (hpacker, true, true);
-
- //add tag search
- {
- VBox* vbox;
- HBox* hbox;
-
+ vpacker.set_spacing (6);
+ vpacker.pack_start (hpacker, true, true);
- hbox = manage(new HBox);
- hbox->pack_start (found_entry);
- hbox->pack_start (found_search_btn);
+ add (vpacker);
- Gtk::ScrolledWindow *scroll = manage(new ScrolledWindow);
- scroll->add(found_list_view);
- scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-
- vbox = manage(new VBox);
- vbox->pack_start (*hbox, PACK_SHRINK);
- vbox->pack_start (*scroll);
-
- found_list_view.append_column(_("Paths"), found_list_columns.pathname);
-
- found_list_view.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_list_view_selected));
-
- found_list_view.signal_row_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::found_list_view_activated));
-
- found_search_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_search_clicked));
- found_entry.signal_activate().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_search_clicked));
+ //add tag search
- freesound_stop_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_stop_clicked));
+ VBox* vbox;
+ HBox* hbox;
+
+
+ hbox = manage(new HBox);
+ hbox->pack_start (found_entry);
+ hbox->pack_start (found_search_btn);
+
+ Gtk::ScrolledWindow *scroll = manage(new ScrolledWindow);
+ scroll->add(found_list_view);
+ scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+
+ vbox = manage(new VBox);
+ vbox->pack_start (*hbox, PACK_SHRINK);
+ vbox->pack_start (*scroll);
+
+ found_list_view.append_column(_("Paths"), found_list_columns.pathname);
+
+ found_list_view.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_list_view_selected));
+
+ found_list_view.signal_row_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::found_list_view_activated));
+
+ found_search_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_search_clicked));
+ found_entry.signal_activate().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_search_clicked));
+
+ freesound_stop_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_stop_clicked));
+
+ notebook.append_page (*vbox, _("Search Tags"));
- notebook.append_page (*vbox, _("Search Tags"));
- }
+#ifdef FREESOUND
//add freesound search
-#ifdef FREESOUND
- {
- VBox* vbox;
- HBox* passbox;
- Label* label;
-
- passbox = manage(new HBox);
- passbox->set_spacing (6);
-
- label = manage (new Label);
- label->set_text (_("Tags:"));
- passbox->pack_start (*label, false, false);
- passbox->pack_start (freesound_entry, true, true);
-
- label = manage (new Label);
- label->set_text (_("Sort:"));
- passbox->pack_start (*label, false, false);
- passbox->pack_start (freesound_sort, false, false);
- freesound_sort.clear_items();
-
- // Order of the following must correspond with enum sortMethod
- // in sfdb_freesound_mootcher.h
- freesound_sort.append_text(_("None"));
- freesound_sort.append_text(_("Longest"));
- freesound_sort.append_text(_("Shortest"));
- freesound_sort.append_text(_("Newest"));
- freesound_sort.append_text(_("Oldest"));
- freesound_sort.append_text(_("Most downloaded"));
- freesound_sort.append_text(_("Least downloaded"));
- freesound_sort.append_text(_("Highest rated"));
- freesound_sort.append_text(_("Lowest rated"));
- freesound_sort.set_active(0);
-
- passbox->pack_start (freesound_search_btn, false, false);
- passbox->pack_end (freesound_stop_btn, false, false);
- freesound_stop_btn.set_label(_("Stop"));
-
- Gtk::ScrolledWindow *scroll = manage(new ScrolledWindow);
- scroll->add(freesound_list_view);
- scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-
- vbox = manage(new VBox);
- vbox->set_spacing (3);
- vbox->pack_start (*passbox, PACK_SHRINK);
- vbox->pack_start (freesound_progress_bar, PACK_SHRINK);
- vbox->pack_start (*scroll);
-
- freesound_list_view.append_column(_("ID") , freesound_list_columns.id);
- freesound_list_view.append_column(_("Filename"), freesound_list_columns.filename);
- // freesound_list_view.append_column(_("URI") , freesound_list_columns.uri);
- freesound_list_view.append_column(_("Duration"), freesound_list_columns.duration);
- freesound_list_view.append_column(_("Size"), freesound_list_columns.filesize);
- freesound_list_view.append_column(_("Samplerate"), freesound_list_columns.smplrate);
- freesound_list_view.append_column(_("License"), freesound_list_columns.license);
- freesound_list_view.get_column(0)->set_alignment(0.5);
- freesound_list_view.get_column(1)->set_expand(true);
- freesound_list_view.get_column(2)->set_alignment(0.5);
- freesound_list_view.get_column(3)->set_alignment(0.5);
- freesound_list_view.get_column(4)->set_alignment(0.5);
- freesound_list_view.get_column(5)->set_alignment(0.5);
-
- freesound_list_view.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_list_view_selected));
-
- freesound_list_view.get_selection()->set_mode (SELECTION_MULTIPLE);
- freesound_list_view.signal_row_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::freesound_list_view_activated));
- freesound_search_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_search_clicked));
- freesound_entry.signal_activate().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_search_clicked));
- freesound_stop_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_stop_clicked));
- notebook.append_page (*vbox, _("Search Freesound"));
- }
+ mootcher = new Mootcher();
+
+ HBox* passbox;
+ Label* label;
+
+ passbox = manage(new HBox);
+ passbox->set_spacing (6);
+
+ label = manage (new Label);
+ label->set_text (_("Tags:"));
+ passbox->pack_start (*label, false, false);
+ passbox->pack_start (freesound_entry, true, true);
+
+ label = manage (new Label);
+ label->set_text (_("Sort:"));
+ passbox->pack_start (*label, false, false);
+ passbox->pack_start (freesound_sort, false, false);
+ freesound_sort.clear_items();
+
+ // Order of the following must correspond with enum sortMethod
+ // in sfdb_freesound_mootcher.h
+ freesound_sort.append_text(_("None"));
+ freesound_sort.append_text(_("Longest"));
+ freesound_sort.append_text(_("Shortest"));
+ freesound_sort.append_text(_("Newest"));
+ freesound_sort.append_text(_("Oldest"));
+ freesound_sort.append_text(_("Most downloaded"));
+ freesound_sort.append_text(_("Least downloaded"));
+ freesound_sort.append_text(_("Highest rated"));
+ freesound_sort.append_text(_("Lowest rated"));
+ freesound_sort.set_active(0);
+
+ passbox->pack_start (freesound_search_btn, false, false);
+ passbox->pack_end (freesound_stop_btn, false, false);
+ freesound_stop_btn.set_label(_("Stop"));
+
+ scroll = manage(new ScrolledWindow);
+ scroll->add(freesound_list_view);
+ scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+
+ vbox = manage(new VBox);
+ vbox->set_spacing (3);
+ vbox->pack_start (*passbox, PACK_SHRINK);
+ vbox->pack_start (freesound_progress_bar, PACK_SHRINK);
+ vbox->pack_start (*scroll);
+
+ freesound_list_view.append_column(_("ID") , freesound_list_columns.id);
+ freesound_list_view.append_column(_("Filename"), freesound_list_columns.filename);
+ // freesound_list_view.append_column(_("URI") , freesound_list_columns.uri);
+ freesound_list_view.append_column(_("Duration"), freesound_list_columns.duration);
+ freesound_list_view.append_column(_("Size"), freesound_list_columns.filesize);
+ freesound_list_view.append_column(_("Samplerate"), freesound_list_columns.smplrate);
+ freesound_list_view.append_column(_("License"), freesound_list_columns.license);
+ freesound_list_view.get_column(0)->set_alignment(0.5);
+ freesound_list_view.get_column(1)->set_expand(true);
+ freesound_list_view.get_column(2)->set_alignment(0.5);
+ freesound_list_view.get_column(3)->set_alignment(0.5);
+ freesound_list_view.get_column(4)->set_alignment(0.5);
+ freesound_list_view.get_column(5)->set_alignment(0.5);
+
+ freesound_list_view.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_list_view_selected));
+
+ freesound_list_view.get_selection()->set_mode (SELECTION_MULTIPLE);
+ freesound_list_view.signal_row_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::freesound_list_view_activated));
+ freesound_search_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_search_clicked));
+ freesound_entry.signal_activate().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_search_clicked));
+ freesound_stop_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_stop_clicked));
+ notebook.append_page (*vbox, _("Search Freesound"));
#endif
-
notebook.set_size_request (500, -1);
- notebook.signal_switch_page().connect (
- sigc::hide_return (sigc::hide (sigc::hide (sigc::mem_fun (*this, &SoundFileBrowser::reset_options))))
- );
+ notebook.signal_switch_page().connect (sigc::hide_return (sigc::hide (sigc::hide (sigc::mem_fun (*this, &SoundFileBrowser::reset_options)))));
set_session (s);
- add_button (Stock::CANCEL, RESPONSE_CANCEL);
- add_button (Stock::APPLY, RESPONSE_APPLY);
- add_button (Stock::OK, RESPONSE_OK);
+ Gtk::HButtonBox* button_box = manage (new HButtonBox);
+
+ button_box->set_layout (BUTTONBOX_END);
+ button_box->pack_start (cancel_button, false, false);
+ cancel_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_CANCEL));
+ button_box->pack_start (apply_button, false, false);
+ apply_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_APPLY));
+ button_box->pack_start (ok_button, false, false);
+ ok_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_OK));
+ vpacker.pack_end (*button_box, false, false);
}
SoundFileBrowser::~SoundFileBrowser ()
@@ -607,11 +613,33 @@ SoundFileBrowser::~SoundFileBrowser ()
persistent_folder = chooser.get_current_folder();
}
+int
+SoundFileBrowser::run ()
+{
+ set_modal (true);
+ show_all ();
+ present ();
+
+ _done = false;
+
+ while (!_done) {
+ gtk_main_iteration ();
+ }
+
+ return _status;
+}
+
+void
+SoundFileBrowser::do_something (int action)
+{
+ _done = true;
+ _status = action;
+}
void
SoundFileBrowser::on_show ()
{
- ArdourDialog::on_show ();
+ ArdourWindow::on_show ();
start_metering ();
}
@@ -643,7 +671,7 @@ SoundFileBrowser::freesound_list_view_activated (const TreeModel::Path&, TreeVie
void
SoundFileBrowser::set_session (Session* s)
{
- ArdourDialog::set_session (s);
+ ArdourWindow::set_session (s);
preview.set_session (s);
if (_session) {
@@ -734,7 +762,7 @@ void
SoundFileBrowser::found_list_view_selected ()
{
if (!reset_options ()) {
- set_response_sensitive (RESPONSE_OK, false);
+ ok_button.set_sensitive (false);
} else {
string file;
@@ -744,9 +772,9 @@ SoundFileBrowser::found_list_view_selected ()
TreeIter iter = found_list->get_iter(*rows.begin());
file = (*iter)[found_list_columns.pathname];
chooser.set_filename (file);
- set_response_sensitive (RESPONSE_OK, true);
+ ok_button.set_sensitive (true);
} else {
- set_response_sensitive (RESPONSE_OK, false);
+ ok_button.set_sensitive (false);
}
preview.setup_labels (file);
@@ -760,7 +788,7 @@ SoundFileBrowser::freesound_list_view_selected ()
#ifdef FREESOUND
if (!reset_options ()) {
- set_response_sensitive (RESPONSE_OK, false);
+ ok_button.set_sensitive (false);
} else {
string file;
@@ -786,10 +814,10 @@ SoundFileBrowser::freesound_list_view_selected ()
if (file != "") {
chooser.set_filename (file);
- set_response_sensitive (RESPONSE_OK, true);
+ ok_button.set_sensitive (true);
}
} else {
- set_response_sensitive (RESPONSE_OK, false);
+ ok_button.set_sensitive (false);
}
freesound_progress_bar.set_text(
@@ -1429,7 +1457,7 @@ SoundFileChooser::SoundFileChooser (Gtk::Window& parent, string title, ARDOUR::S
void
SoundFileChooser::on_hide ()
{
- ArdourDialog::on_hide();
+ ArdourWindow::on_hide();
stop_metering ();
if (_session) {
@@ -1579,7 +1607,7 @@ SoundFileOmega::SoundFileOmega (Gtk::Window& parent, string title, ARDOUR::Sessi
options.pack_start (block_four, false, false);
- get_vbox()->pack_start (options, false, false);
+ vpacker.pack_start (options, false, false);
/* setup disposition map */
@@ -1630,7 +1658,7 @@ SoundFileOmega::get_mode () const
void
SoundFileOmega::on_hide ()
{
- ArdourDialog::on_hide();
+ ArdourWindow::on_hide();
if (_session) {
_session->cancel_audition();
}
@@ -1714,13 +1742,59 @@ SoundFileOmega::file_selection_changed ()
}
if (!reset_options ()) {
- set_response_sensitive (RESPONSE_OK, false);
+ ok_button.set_sensitive (false);
} else {
if (chooser.get_filenames().size() > 0) {
- set_response_sensitive (RESPONSE_OK, true);
+ ok_button.set_sensitive (true);
} else {
- set_response_sensitive (RESPONSE_OK, false);
+ ok_button.set_sensitive (false);
}
}
}
+void
+SoundFileOmega::do_something (int action)
+{
+ SoundFileBrowser::do_something (action);
+
+ if (action == RESPONSE_CANCEL) {
+ hide ();
+ return;
+ }
+
+ /* lets do it */
+
+ vector<string> paths = get_paths ();
+ ImportPosition pos = get_position ();
+ ImportMode mode = get_mode ();
+ ImportDisposition chns = get_channel_disposition ();
+ framepos_t where;
+
+ switch (pos) {
+ case ImportAtEditPoint:
+ where = PublicEditor::instance().get_preferred_edit_position ();
+ break;
+ case ImportAtTimestamp:
+ where = -1;
+ break;
+ case ImportAtPlayhead:
+ where = _session->transport_frame();
+ break;
+ case ImportAtStart:
+ where = _session->current_start_frame();
+ break;
+ }
+
+ SrcQuality quality = get_src_quality();
+
+ if (copy_files_btn.get_active()) {
+ PublicEditor::instance().do_import (paths, chns, mode, quality, where);
+ } else {
+ PublicEditor::instance().do_embed (paths, chns, mode, where);
+ }
+
+ if (action == RESPONSE_OK) {
+ hide ();
+ }
+}
+