21 #include "gtk2ardour-config.h"
34 #include <gtkmm/box.h>
35 #include <gtkmm/stock.h>
37 #include <glib/gstdio.h>
38 #include <glibmm/fileutils.h>
85 typedef TreeView::Selection::ListHandle_Path
ListPath;
90 if (str ==
_(
"as new tracks")) {
92 }
else if (str ==
_(
"to selected tracks")) {
94 }
else if (str ==
_(
"to region list")) {
95 return ImportAsRegion;
96 }
else if (str ==
_(
"as new tape tracks")) {
97 return ImportAsTapeTrack;
102 return ImportAsTrack;
110 return _(
"as new tracks");
112 return _(
"to selected tracks");
114 return _(
"to region list");
115 case ImportAsTapeTrack:
116 return _(
"as new tape tracks");
119 return _(
"as new tracks");
124 length_clock (
"sfboxLengthClock", true,
"", false, false, true, false),
125 timecode_clock (
"sfboxTimecodeClock", true,
"", false, false, false, false),
127 autoplay_btn (
_(
"Auto-play")),
128 seek_slider(0,1000,1),
132 set_name (
X_(
"SoundFileBox"));
133 set_size_request (300, -1);
141 set_border_width (6);
145 length.set_text (
_(
"Length:"));
146 length.set_alignment (1, 0.5);
149 format.set_text (
_(
"Format:"));
150 format.set_alignment (1, 0.5);
163 table.set_col_spacings (6);
164 table.set_homogeneous (
false);
165 table.set_row_spacings (6);
188 Label* label = manage (
new Label (
_(
"Tags:")));
189 label->set_alignment (0.0
f, 0.5
f);
190 main_box.pack_start (*label,
false,
false);
195 play_btn.set_image (*(manage (
new Image (Stock::MEDIA_PLAY, ICON_SIZE_BUTTON))));
198 stop_btn.set_image (*(manage (
new Image (Stock::MEDIA_STOP, ICON_SIZE_BUTTON))));
209 seek_slider.add_events(Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
226 SessionHandlePtr::set_session (s);
285 if (SMFSource::valid_midi_file (
path)) {
290 SourceFactory::createExternal (DataType::MIDI, *
_session,
292 }
catch (
const std::exception& e) {
322 if(!AudioFileSource::get_soundfile_info (filename,
sf_info, error_msg)) {
341 if (n.substr (0, 8) ==
X_(
"Format: ")) {
369 stringstream tag_string;
370 for (vector<string>::iterator i = tags.begin(); i != tags.end(); ++i) {
371 if (i != tags.begin()) {
376 tags_entry.get_buffer()->set_text (tag_string.str());
408 if (!Glib::file_test (
path, Glib::FILE_TEST_EXISTS)) {
415 if (SMFSource::valid_midi_file (
path)) {
419 SourceFactory::createExternal (DataType::MIDI, *
_session,
438 bool old_sbp = AudioSource::get_build_peakfiles ();
442 AudioSource::set_build_peakfiles (
false);
447 SourceFactory::createExternal (DataType::AUDIO, *
_session,
452 srclist.push_back(sfs);
454 srclist.push_back(afs);
459 AudioSource::set_build_peakfiles (old_sbp);
464 AudioSource::set_build_peakfiles (old_sbp);
466 if (srclist.empty()) {
485 case ImportAtTimestamp:
486 audition_position = 0;
488 case ImportAtPlayhead:
494 case ImportAtEditPoint:
521 string tag_string =
tags_entry.get_buffer()->get_text ();
523 if (tag_string.empty()) {
529 if (!
PBD::tokenize (tag_string,
string(
",\n"), std::back_inserter (tags),
true)) {
530 warning <<
_(
"SoundFileBox: Could not tokenize string: ") << tag_string <<
endmsg;
546 , found_list (ListStore::create(found_list_columns))
547 , freesound_list (ListStore::create(freesound_list_columns))
548 , chooser (FILE_CHOOSER_ACTION_OPEN)
549 , preview (persistent)
550 , found_search_btn (
_(
"Search"))
551 , found_list_view (found_list)
552 , freesound_search_btn (
_(
"Search"))
553 , freesound_list_view (freesound_list)
554 , resetting_ourselves (false)
558 , ok_button (Stock::OK)
559 , cancel_button (Stock::CANCEL)
560 , apply_button (Stock::APPLY)
565 chooser.add_shortcut_folder_uri(
"file:///Library/GarageBand/Apple Loops");
566 chooser.add_shortcut_folder_uri(
"file:///Library/Audio/Apple Loops");
567 chooser.add_shortcut_folder_uri(
"file:///Library/Application Support/GarageBand/Instrument Library/Sampler/Sampler Files");
568 chooser.add_shortcut_folder_uri(
"file:///Volumes");
591 chooser.set_select_multiple (
true);
597 chooser.signal_selection_changed().connect (mem_fun (
chooser, &Widget::queue_draw));
621 hbox = manage(
new HBox);
625 Gtk::ScrolledWindow *scroll = manage(
new ScrolledWindow);
627 scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
629 vbox = manage(
new VBox);
630 vbox->pack_start (*hbox, PACK_SHRINK);
631 vbox->pack_start (*scroll);
642 notebook.append_page (*vbox,
_(
"Search Tags"));
649 passbox = manage(
new HBox);
650 passbox->set_spacing (6);
652 label = manage (
new Label);
653 label->set_text (
_(
"Tags:"));
654 passbox->pack_start (*label,
false,
false);
657 label = manage (
new Label);
658 label->set_text (
_(
"Sort:"));
659 passbox->pack_start (*label,
false,
false);
685 scroll = manage(
new ScrolledWindow);
687 scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
689 vbox = manage(
new VBox);
690 vbox->set_spacing (3);
691 vbox->pack_start (*passbox, PACK_SHRINK);
692 vbox->pack_start (*scroll);
718 notebook.append_page (*vbox,
_(
"Search Freesound"));
720 notebook.set_size_request (500, -1);
725 Gtk::HButtonBox* button_box = manage (
new HButtonBox);
727 button_box->set_layout (BUTTONBOX_END);
735 button_box->pack_start (
ok_button,
false,
false);
742 vpacker.pack_end (*button_box,
false,
false);
744 set_wmclass (
X_(
"import"), PROGRAM_NAME);
762 gtk_main_iteration ();
785 ArdourWindow::on_show ();
880 return AudioFileSource::safe_audio_file_extension (filter_info.filename);
886 return SMFSource::safe_midi_file_extension (filter_info.filename);
916 TreeIter iter =
found_list->get_iter(*rows.begin());
935 if (!
PBD::tokenize (tag_string,
string(
","), std::back_inserter (tags),
true)) {
936 warning <<
_(
"SoundFileBrowser: Could not tokenize string: ") << tag_string <<
endmsg;
940 vector<string> results;
944 for (vector<string>::iterator i = results.begin(); i != results.end(); ++i) {
945 TreeModel::iterator new_row =
found_list->append();
946 TreeModel::Row row = *new_row;
947 string path = Glib::filename_from_uri (
string (
"file:") + *i);
988 for (ListPath::iterator i = rows.begin() ; i != rows.end(); ++i) {
992 switch (rows.size()) {
1023 if (rows.size() == 1) {
1028 if (ID == selected_ID) {
1060 if (rows.size() == 1) {
1067 GdkCursor *prev_cursor;
1068 prev_cursor = gdk_window_get_cursor (get_window()->gobj());
1069 gdk_window_set_cursor (get_window()->gobj(), gdk_cursor_new(GDK_WATCH));
1074 gdk_window_set_cursor (get_window()->gobj(), prev_cursor);
1087 GdkCursor *prev_cursor;
1088 prev_cursor = gdk_window_get_cursor (get_window()->gobj());
1089 gdk_window_set_cursor (get_window()->gobj(), gdk_cursor_new(GDK_WATCH));
1098 "type:wav OR type:aiff OR type:flac OR type:aif OR type:ogg OR type:oga",
1103 gdk_window_set_cursor (get_window()->gobj(), prev_cursor);
1118 if ( strcmp(root->
name().c_str(),
"response") != 0) {
1124 int freesound_n_pages = 1;
1128 freesound_n_pages =
atoi(result);
1133 if (more_pages > 0) {
1136 "%1 more page of 100 results available",
1137 "%1 more pages of 100 results available",
1138 more_pages), more_pages));
1146 error <<
"no child node \"sounds\" found!" <<
endmsg;
1151 if (sounds.size() == 0) {
1158 for (niter = sounds.begin(); niter != sounds.end(); ++niter) {
1160 if( strcmp( node->
name().c_str(),
"resource") != 0 ) {
1176 if (id_node && uri_node && ofn_node && dur_node && siz_node && srt_node) {
1189 double duration_seconds =
atof(dur);
1191 char duration_hhmmss[16];
1192 if (duration_seconds >= 99 * 60 * 60) {
1193 strcpy(duration_hhmmss,
">99h");
1195 s = modf(duration_seconds/60, &m) * 60;
1196 m = modf(m/60, &h) * 60;
1197 sprintf(duration_hhmmss,
"%02.fh:%02.fm:%04.1fs",
1202 double size_bytes =
atof(siz);
1204 if (size_bytes < 1000) {
1205 sprintf(bsize,
"%.0f %s", size_bytes,
_(
"B"));
1206 }
else if (size_bytes < 1000000 ) {
1207 sprintf(bsize,
"%.1f %s", size_bytes / 1000.0,
_(
"kB"));
1208 }
else if (size_bytes < 10000000) {
1209 sprintf(bsize,
"%.1f %s", size_bytes / 1000000.0,
_(
"MB"));
1210 }
else if (size_bytes < 1000000000) {
1211 sprintf(bsize,
"%.2f %s", size_bytes / 1000000.0,
_(
"MB"));
1213 sprintf(bsize,
"%.2f %s", size_bytes / 1000000000.0,
_(
"GB"));
1217 char shortlicense[64];
1218 if(!lic.compare(0, 42,
"http://creativecommons.org/licenses/by-nc/")){
1219 sprintf(shortlicense,
"CC-BY-NC");
1220 }
else if(!lic.compare(0, 39,
"http://creativecommons.org/licenses/by/")) {
1221 sprintf(shortlicense,
"CC-BY");
1222 }
else if(!lic.compare(
"http://creativecommons.org/licenses/sampling+/1.0/")) {
1223 sprintf(shortlicense,
"sampling+");
1224 }
else if(!lic.compare(0, 40,
"http://creativecommons.org/publicdomain/")) {
1225 sprintf(shortlicense,
"PD");
1227 snprintf(shortlicense, 64,
"%s", lic.c_str());
1228 shortlicense[63]=
'\0';
1232 TreeModel::Row row = *new_row;
1249 vector<string> results;
1251 int n =
notebook.get_current_page ();
1254 vector<string> filenames =
chooser.get_filenames();
1255 vector<string>::iterator i;
1257 for (i = filenames.begin(); i != filenames.end(); ++i) {
1259 if ((!stat((*i).c_str(), &buf)) && S_ISREG(buf.st_mode)) {
1260 results.push_back (*i);
1264 }
else if (n == 1) {
1267 for (ListPath::iterator i = rows.begin() ; i != rows.end(); ++i) {
1271 results.push_back (str);
1275 for (ListPath::iterator i = rows.begin() ; i != rows.end(); ++i) {
1278 results.push_back (str);
1299 if (paths.empty()) {
1329 bool selection_includes_multichannel;
1334 vector<string>::iterator i = paths.begin ();
1335 while (i != paths.end() && SMFSource::valid_midi_file (*i) ==
false) {
1338 bool const have_a_midi_file = (i != paths.end ());
1340 if (
check_info (paths, same_size, src_needed, selection_includes_multichannel)) {
1345 string existing_choice;
1346 vector<string> action_strings;
1359 case Editing::ImportDistinctFiles:
1365 case Editing::ImportDistinctChannels:
1399 if (existing_choice.length()) {
1400 vector<string>::iterator x;
1401 for (x = action_strings.begin(); x != action_strings.end(); ++x) {
1402 if (*x == existing_choice) {
1407 if (x == action_strings.end()) {
1416 if ((mode =
get_mode()) == ImportAsRegion) {
1422 vector<string> channel_strings;
1424 if (mode == ImportAsTrack || mode == ImportAsTapeTrack || mode == ImportToTrack) {
1425 channel_strings.push_back (
_(
"one track per file"));
1427 if (selection_includes_multichannel) {
1428 channel_strings.push_back (
_(
"one track per channel"));
1431 if (paths.size() > 1) {
1435 if (mode != ImportAsTapeTrack) {
1436 channel_strings.push_back (
_(
"sequence files"));
1439 channel_strings.push_back (
_(
"all files in one track"));
1440 channel_strings.push_back (
_(
"merge files"));
1446 channel_strings.push_back (
_(
"one region per file"));
1448 if (selection_includes_multichannel) {
1449 channel_strings.push_back (
_(
"one region per channel"));
1452 if (paths.size() > 1) {
1454 channel_strings.push_back (
_(
"all files in one region"));
1467 if (existing_choice.length()) {
1468 vector<string>::iterator x;
1469 for (x = channel_strings.begin(); x != channel_strings.end(); ++x) {
1470 if (*x == existing_choice) {
1475 if (x == channel_strings.end()) {
1496 if (selection_can_be_embedded_with_links && !must_copy) {
1520 MessageDialog msg (*
this,
1521 string_compose (
_(
"One or more of the selected files\ncannot be used by %1"), PROGRAM_NAME),
1543 multichannel =
false;
1545 for (vector<string>::const_iterator i = paths.begin(); i != paths.end(); ++i) {
1547 if (AudioFileSource::get_soundfile_info (*i, info, errmsg)) {
1549 multichannel =
true;
1563 }
else if (SMFSource::valid_midi_file (*i)) {
1568 multichannel =
true;
1587 #ifdef PLATFORM_WINDOWS
1593 if (mkdir (tmpdir.c_str(), 0744)) {
1594 if (errno != EEXIST) {
1599 for (vector<string>::const_iterator i = paths.begin(); i != paths.end(); ++i) {
1603 snprintf (tmpc,
sizeof(tmpc),
"%s/%s", tmpdir.c_str(), Glib::path_get_basename (*i).c_str());
1607 if (link ((*i).c_str(), tmpc)) {
1617 rmdir (tmpdir.c_str());
1625 chooser.set_select_multiple (
false);
1633 ArdourWindow::on_hide();
1644 vector<string> paths;
1648 if (paths.empty()) {
1652 if (!Glib::file_test (paths.front(), Glib::FILE_TEST_EXISTS|Glib::FILE_TEST_IS_REGULAR)) {
1656 return paths.front();
1660 uint32_t selected_audio_tracks,
1661 uint32_t selected_midi_tracks,
1665 , copy_files_btn (
_(
"Copy files to session"))
1666 , selected_audio_track_cnt (selected_audio_tracks)
1667 , selected_midi_track_cnt (selected_midi_tracks)
1673 set_size_request (-1, 450);
1682 str.push_back (
_(
"file timestamp"));
1683 str.push_back (
_(
"edit point"));
1684 str.push_back (
_(
"playhead"));
1685 str.push_back (
_(
"session start"));
1690 Label* l = manage (
new Label);
1691 l->set_markup (
_(
"<b>Add files as ...</b>"));
1693 vbox = manage (
new VBox);
1694 vbox->set_border_width (12);
1695 vbox->set_spacing (6);
1696 vbox->pack_start (*l,
false,
false);
1698 hbox = manage (
new HBox);
1699 hbox->pack_start (*vbox,
false,
false);
1700 options.pack_start (*hbox,
false,
false);
1712 l = manage (
new Label);
1713 l->set_markup (
_(
"<b>Insert at</b>"));
1715 vbox = manage (
new VBox);
1716 vbox->set_border_width (12);
1717 vbox->set_spacing (6);
1718 vbox->pack_start (*l,
false,
false);
1720 hbox = manage (
new HBox);
1721 hbox->pack_start (*vbox,
false,
false);
1722 options.pack_start (*hbox,
false,
false);
1725 l = manage (
new Label);
1726 l->set_markup (
_(
"<b>Mapping</b>"));
1728 vbox = manage (
new VBox);
1729 vbox->set_border_width (12);
1730 vbox->set_spacing (6);
1731 vbox->pack_start (*l,
false,
false);
1733 hbox = manage (
new HBox);
1734 hbox->pack_start (*vbox,
false,
false);
1735 options.pack_start (*hbox,
false,
false);
1738 str.push_back (
_(
"one track per file"));
1743 l = manage (
new Label);
1744 l->set_markup (
_(
"<b>Conversion quality</b>"));
1746 vbox = manage (
new VBox);
1747 vbox->set_border_width (12);
1748 vbox->set_spacing (6);
1749 vbox->pack_start (*l,
false,
false);
1750 vbox->pack_start (
src_combo,
false,
false);
1751 hbox = manage (
new HBox);
1752 hbox->pack_start (*vbox,
false,
false);
1753 options.pack_start (*hbox,
false,
false);
1755 l = manage (
new Label);
1756 l->set_markup (
_(
"<b>Instrument</b>"));
1758 vbox = manage (
new VBox);
1759 vbox->set_border_width (12);
1760 vbox->set_spacing (6);
1761 vbox->pack_start (*l,
false,
false);
1763 hbox = manage (
new HBox);
1764 hbox->pack_start (*vbox,
false,
false);
1765 options.pack_start (*hbox,
false,
false);
1768 str.push_back (
_(
"Best"));
1769 str.push_back (
_(
"Good"));
1770 str.push_back (
_(
"Quick"));
1771 str.push_back (
_(
"Fast"));
1772 str.push_back (
_(
"Fastest"));
1775 src_combo.set_active_text (str.front());
1786 Gtk::Label* copy_label =
dynamic_cast<Gtk::Label*
>(
copy_files_btn.get_child());
1789 copy_label->set_size_request (175, -1);
1790 copy_label->set_line_wrap (
true);
1801 disposition_map.insert (pair<string,ImportDisposition>(
_(
"one track per file"), ImportDistinctFiles));
1802 disposition_map.insert (pair<string,ImportDisposition>(
_(
"one track per channel"), ImportDistinctChannels));
1803 disposition_map.insert (pair<string,ImportDisposition>(
_(
"merge files"), ImportMergeFiles));
1804 disposition_map.insert (pair<string,ImportDisposition>(
_(
"sequence files"), ImportSerializeFiles));
1806 disposition_map.insert (pair<string,ImportDisposition>(
_(
"one region per file"), ImportDistinctFiles));
1807 disposition_map.insert (pair<string,ImportDisposition>(
_(
"one region per channel"), ImportDistinctChannels));
1808 disposition_map.insert (pair<string,ImportDisposition>(
_(
"all files in one region"), ImportMergeFiles));
1809 disposition_map.insert (pair<string,ImportDisposition>(
_(
"all files in one track"), ImportMergeFiles));
1819 t.push_back (
_(
"one track per file"));
1820 t.push_back (
_(
"one track per channel"));
1821 t.push_back (
_(
"sequence files"));
1822 t.push_back (
_(
"all files in one region"));
1848 ArdourWindow::on_hide();
1859 if (str ==
_(
"file timestamp")) {
1860 return ImportAtTimestamp;
1861 }
else if (str ==
_(
"edit point")) {
1862 return ImportAtEditPoint;
1863 }
else if (str ==
_(
"playhead")) {
1864 return ImportAtPlayhead;
1866 return ImportAtStart;
1873 string str =
src_combo.get_active_text();
1875 if (str ==
_(
"Best")) {
1877 }
else if (str ==
_(
"Good")) {
1879 }
else if (str ==
_(
"Quick")) {
1881 }
else if (str ==
_(
"Fast")) {
1946 if (
chooser.get_filenames().size() > 0) {
1959 if (action == RESPONSE_CANCEL) {
1974 case ImportAtEditPoint:
1977 case ImportAtTimestamp:
1980 case ImportAtPlayhead:
1996 if (action == RESPONSE_OK) {
Editing::ImportDisposition get_channel_disposition() const
void refresh_display(std::string ID, std::string file)
virtual float sample_rate() const =0
void set_src_quality(ARDOUR::SrcQuality q)
void file_selection_changed()
void handle_freesound_results(std::string theString)
framecnt_t nominal_frame_rate() const
Gtk::TreeView found_list_view
LIBPBD_API Transmitter fatal
Gtk::ComboBoxText action_combo
std::string to_string(T t, std::ios_base &(*f)(std::ios_base &))
void freesound_similar_clicked()
Gtk::TreeModelColumn< std::string > filesize
int atoi(const string &s)
Gtk::ComboBoxText channel_combo
void freesound_list_view_activated(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *)
void found_search_clicked()
void set(framepos_t, bool force=false, ARDOUR::framecnt_t offset=0)
const std::string & content() const
sigc::connection super_rapid_connect(const sigc::slot< void > &slot)
std::string get_filename()
void set_session(ARDOUR::Session *s)
bool tags_entry_left(GdkEventFocus *event)
boost::shared_ptr< Amp > amp() const
std::string searchSimilar(std::string id)
void set_action_sensitive(bool)
void audition_progress(ARDOUR::framecnt_t, ARDOUR::framecnt_t)
LIBARDOUR_API PBD::PropertyDescriptor< layer_t > layer
FoundTagColumns found_list_columns
bool on_audio_filter(const Gtk::FileFilter::Info &filter_info)
SoundFileChooser(std::string title, ARDOUR::Session *_s=0)
std::string freesound_get_audio_file(Gtk::TreeIter iter)
Gtk::ComboBoxText freesound_sort
Gtk::ComboBoxText src_combo
void freesound_search_clicked()
static ImportMode string2importmode(string str)
static bool check_link_status(const ARDOUR::Session *, const std::vector< std::string > &paths)
Glib::RefPtr< Gtk::ListStore > found_list
void freesound_more_clicked()
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r)
static ARDOUR_UI * instance()
LIBARDOUR_API PBD::PropertyDescriptor< std::string > name
const std::string & name() const
void set_fader_name(const char *name)
static std::string persistent_folder
void reset_options_noret()
void save_tags(const std::vector< std::string > &)
void audition_active(bool)
void set_import_position(Editing::ImportPosition p)
uint32_t selected_audio_track_cnt
void chooser_file_activated()
bool check_info(const std::vector< std::string > &paths, bool &same_size, bool &src_needed, bool &multichannel)
LIBPBD_API Transmitter error
unsigned int tokenize(const StringType &str, const StringType &delims, Iter it, bool strip_whitespace=false)
virtual void set_session(ARDOUR::Session *)
LIBPBD_API Transmitter warning
bool fetchAudioFile(std::string originalFileName, std::string ID, std::string audioURL, SoundFileBrowser *caller)
const XMLNodeList & children(const std::string &str=std::string()) const
Gtk::FileFilter midi_filter
void found_list_view_activated(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *)
virtual void do_embed(std::vector< std::string > paths, Editing::ImportDisposition, Editing::ImportMode mode, framepos_t &, boost::shared_ptr< ARDOUR::PluginInfo > instrument=boost::shared_ptr< ARDOUR::PluginInfo >())=0
std::ostream & endmsg(std::ostream &ostr)
LIBGTKMM2EXT_API void set_popdown_strings(Gtk::ComboBoxText &, const std::vector< std::string > &)
int open(const std::string &path) THROW_FILE_ERROR
boost::shared_ptr< PeakMeter > shared_peak_meter() const
#define P_(Singular, Plural, HowMany)
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
Gtk::FileChooserWidget chooser
framecnt_t frame_rate() const
Gtk::Entry freesound_entry
bool read_buffer(const std::string &)
Gtk::FileFilter audio_and_midi_filter
void freesound_list_view_selected()
boost::shared_ptr< Auditioner > the_auditioner()
std::list< XMLNode * > XMLNodeList
Gtk::TreeModelColumn< std::string > duration
bool get_nsm_state() const
Gtk::CheckButton copy_files_btn
virtual bool reset_options()
Gtk::CheckButton autoplay_btn
std::string searchText(std::string query, int page, std::string filter, enum sortMethod sort)
static string importmode2string(ImportMode mode)
Gtk::Button freesound_search_btn
DispositionMap disposition_map
Editing::ImportPosition get_position() const
void where_combo_changed()
InstrumentSelector instrument_combo
void set_position(framepos_t)
uint16_t num_tracks() const
std::vector< std::string > get_paths()
Gtk::TreeModelColumn< std::string > filename
TreeView::Selection::ListHandle_Path ListPath
bool seek_button_release(GdkEventButton *)
Gtk::TreeModelColumn< std::string > pathname
FreesoundColumns freesound_list_columns
SoundFileOmega(std::string title, ARDOUR::Session *_s, uint32_t selected_audio_tracks, uint32_t selected_midi_tracks, bool persistent, Editing::ImportMode mode_hint=Editing::ImportAsTrack)
framepos_t transport_frame() const
virtual void set_controls(boost::shared_ptr< ARDOUR::Route > route, boost::shared_ptr< ARDOUR::PeakMeter > meter, boost::shared_ptr< ARDOUR::Amp > amp)
Gtk::Button found_search_btn
PBD::Signal1< void, bool > AuditionActive
Gtk::Button cancel_button
Gtk::FileFilter matchall_filter
ARDOUR::SoundFileInfo sf_info
const std::string sound_path() const
bool on_audio_and_midi_filter(const Gtk::FileFilter::Info &filter_info)
Gtk::TreeModelColumn< std::string > smplrate
SoundFileBrowser(std::string title, ARDOUR::Session *_s, bool persistent)
ARDOUR::PluginInfoPtr selected_instrument()
void found_list_view_selected()
LIBPBD_API Transmitter info
LIBARDOUR_API PBD::PropertyDescriptor< bool > active
Gtk::TreeModelColumn< bool > started
void set_tags(std::string member, std::vector< std::string > tags)
void set_tip(Gtk::Widget &w, const gchar *tip)
void set_mode(Editing::ImportMode)
Gtk::ComboBoxText where_combo
void audition_region(boost::shared_ptr< Region >)
static PublicEditor & instance()
const std::string & path() const
virtual void do_import(std::vector< std::string > paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, framepos_t &, boost::shared_ptr< ARDOUR::PluginInfo > instrument=boost::shared_ptr< ARDOUR::PluginInfo >())=0
bool seek_button_press(GdkEventButton *)
virtual void do_something(int action)
Gtk::Button freesound_similar_btn
Gtk::FileFilter audio_filter
framepos_t current_start_frame() const
Gtk::TreeModelColumn< std::string > id
static UIConfiguration * config()
virtual framepos_t get_preferred_edit_position(Editing::EditIgnoreOption=Editing::EDIT_IGNORE_NONE, bool from_context_menu=false, bool from_outside_canvas=false)=0
AudioClock timecode_clock
ARDOUR::SrcQuality get_src_quality() const
void search_members_and(std::vector< std::string > &results, const std::vector< std::string > &tags)
Gtk::TreeView freesound_list_view
Gtk::TreeModelColumn< std::string > uri
Gtk::Label channels_value
Gtk::TreeModelColumn< std::string > license
framepos_t timeline_position() const
Gtk::Button freesound_more_btn
ARDOUR::SrcQuality _src_quality
LIBARDOUR_API AudioLibrary * Library
void reset(uint32_t selected_audio_tracks, uint32_t selected_midi_tracks)
virtual framecnt_t length(framepos_t pos) const
Editing::ImportPosition _import_position
XMLNode * child(const char *) const
Gtk::Label samplerate_value
Editing::ImportMode get_mode() const
virtual ~SoundFileBrowser()
virtual void set_session(ARDOUR::Session *)
bool setup_labels(const std::string &filename)
sigc::connection metering_connection
Glib::RefPtr< Gtk::ListStore > freesound_list
SoundFileBox(bool persistent)
const SessionDirectory & session_directory() const
std::string audioFileName
XMLNodeList::const_iterator XMLNodeConstIterator
bool checkAudioFile(std::string originalFileName, std::string ID)
void set_session(ARDOUR::Session *s)
bool on_midi_filter(const Gtk::FileFilter::Info &filter_info)
std::vector< boost::shared_ptr< Source > > SourceList
PBD::ScopedConnectionList auditioner_connections
LIBARDOUR_API std::string region_name_from_path(std::string path, bool strip_channels, bool add_channel_suffix=false, uint32_t total=0, uint32_t this_one=0)
bool add(PropertyBase *prop)
ARDOUR::Session * _session
std::string string_compose(const std::string &fmt, const T1 &o1)
uint32_t selected_midi_track_cnt
void do_something(int action)
double atof(const string &s)
LIBARDOUR_API PBD::PropertyDescriptor< framecnt_t > length
std::vector< std::string > get_tags(std::string member)