X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsfdb_ui.cc;h=41758d493dd8e024d9a6fac160b0d159799ee48d;hb=162c48b84381335ff90fe64b5324467693dee736;hp=bb95da5c0064e91be34ff0595ce247a9ebb894b8;hpb=022818b4a796f52c0a91eea42e65aec0bc7bed43;p=ardour.git diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index bb95da5c00..41758d493d 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -29,26 +29,27 @@ #include #include -#include -#include -#include -#include -#include +#include "pbd/convert.h" +#include "pbd/tokenizer.h" +#include "pbd/enumwriter.h" +#include "pbd/pthread_utils.h" +#include "pbd/xml++.h" #include -#include +#include "evoral/SMF.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "ardour/amp.h" +#include "ardour/audio_library.h" +#include "ardour/auditioner.h" +#include "ardour/audioregion.h" +#include "ardour/audiofilesource.h" +#include "ardour/smf_source.h" +#include "ardour/region_factory.h" +#include "ardour/source_factory.h" +#include "ardour/session.h" +#include "ardour/session_directory.h" +#include "ardour/profile.h" #include "ardour_ui.h" #include "editing.h" @@ -120,13 +121,10 @@ SoundFileBox::SoundFileBox (bool persistent) autoplay_btn (_("Auto-play")) { - HBox* hbox; - VBox* vbox; - set_name (X_("SoundFileBox")); set_size_request (300, -1); - preview_label.set_markup (_("Soundfile Info")); + preview_label.set_markup (_("Sound File Information")); border_frame.set_label_widget (preview_label); border_frame.add (main_box); @@ -135,55 +133,55 @@ SoundFileBox::SoundFileBox (bool persistent) set_border_width (6); main_box.set_border_width (6); - main_box.set_spacing (12); length.set_text (_("Length:")); + length.set_alignment (1, 0.5); timecode.set_text (_("Timestamp:")); + timecode.set_alignment (1, 0.5); format.set_text (_("Format:")); + format.set_alignment (1, 0.5); channels.set_text (_("Channels:")); + channels.set_alignment (1, 0.5); samplerate.set_text (_("Sample rate:")); + samplerate.set_alignment (1, 0.5); + + format_text.set_max_width_chars (8); + format_text.set_ellipsize (Pango::ELLIPSIZE_END); + format_text.set_alignment (0, 1); table.set_col_spacings (6); table.set_homogeneous (false); table.set_row_spacings (6); - table.attach (channels, 0, 1, 0, 1, FILL|EXPAND, (AttachOptions) 0); - table.attach (samplerate, 0, 1, 1, 2, FILL|EXPAND, (AttachOptions) 0); - table.attach (format, 0, 1, 2, 4, FILL|EXPAND, (AttachOptions) 0); - table.attach (length, 0, 1, 4, 5, FILL|EXPAND, (AttachOptions) 0); - table.attach (timecode, 0, 1, 5, 6, FILL|EXPAND, (AttachOptions) 0); + table.attach (channels, 0, 1, 0, 1, FILL, FILL); + table.attach (samplerate, 0, 1, 1, 2, FILL, FILL); + table.attach (format, 0, 1, 2, 4, FILL, FILL); + table.attach (length, 0, 1, 4, 5, FILL, FILL); + table.attach (timecode, 0, 1, 5, 6, FILL, FILL); - table.attach (channels_value, 1, 2, 0, 1, FILL, (AttachOptions) 0); - table.attach (samplerate_value, 1, 2, 1, 2, FILL, (AttachOptions) 0); - table.attach (format_text, 1, 2, 2, 4, FILL, AttachOptions (0)); - table.attach (length_clock, 1, 2, 4, 5, FILL, (AttachOptions) 0); - table.attach (timecode_clock, 1, 2, 5, 6, FILL, (AttachOptions) 0); + table.attach (channels_value, 1, 2, 0, 1, FILL, FILL); + table.attach (samplerate_value, 1, 2, 1, 2, FILL, FILL); + table.attach (format_text, 1, 2, 2, 4, FILL, FILL); + table.attach (length_clock, 1, 2, 4, 5, FILL, FILL); + table.attach (timecode_clock, 1, 2, 5, 6, FILL, FILL); length_clock.set_mode (ARDOUR_UI::instance()->secondary_clock.mode()); timecode_clock.set_mode (AudioClock::SMPTE); - hbox = manage (new HBox); - hbox->pack_start (table, false, false); - main_box.pack_start (*hbox, false, false); + main_box.pack_start (table, false, false); tags_entry.set_editable (true); tags_entry.signal_focus_out_event().connect (mem_fun (*this, &SoundFileBox::tags_entry_left)); - hbox = manage (new HBox); - hbox->pack_start (tags_entry, true, true); - - vbox = manage (new VBox); Label* label = manage (new Label (_("Tags:"))); label->set_alignment (0.0f, 0.5f); - vbox->set_spacing (6); - vbox->pack_start(*label, false, false); - vbox->pack_start(*hbox, true, true); + main_box.pack_start (*label, false, false); + main_box.pack_start (tags_entry, true, true); - main_box.pack_start(*vbox, true, true); - main_box.pack_start(bottom_box, false, false); + main_box.pack_start (bottom_box, false, false); play_btn.set_image (*(manage (new Image (Stock::MEDIA_PLAY, ICON_SIZE_BUTTON)))); - play_btn.set_label (_("Play (double click)")); + play_btn.set_label (_("Play")); stop_btn.set_image (*(manage (new Image (Stock::MEDIA_STOP, ICON_SIZE_BUTTON)))); stop_btn.set_label (_("Stop")); @@ -197,12 +195,6 @@ SoundFileBox::SoundFileBox (bool persistent) play_btn.signal_clicked().connect (mem_fun (*this, &SoundFileBox::audition)); stop_btn.signal_clicked().connect (mem_fun (*this, &SoundFileBox::stop_audition)); - length.set_alignment (0.0f, 0.5f); - format.set_alignment (0.0f, 0.5f); - channels.set_alignment (0.0f, 0.5f); - samplerate.set_alignment (0.0f, 0.5f); - timecode.set_alignment (0.0f, 0.5f); - channels_value.set_alignment (0.0f, 0.5f); samplerate_value.set_alignment (0.0f, 0.5f); } @@ -236,10 +228,10 @@ SoundFileBox::setup_labels (const ustring& filename) if(!AudioFileSource::get_soundfile_info (filename, sf_info, error_msg)) { - preview_label.set_markup (_("Soundfile Info")); - format_text.set_text (_("n/a")); - channels_value.set_text (_("n/a")); - samplerate_value.set_text (_("n/a")); + preview_label.set_markup (_("Sound File Information")); + format_text.set_text (""); + channels_value.set_text (""); + samplerate_value.set_text (""); tags_entry.get_buffer()->set_text (""); length_clock.set (0); @@ -252,7 +244,11 @@ SoundFileBox::setup_labels (const ustring& filename) } preview_label.set_markup (string_compose ("%1", Glib::path_get_basename (filename))); - format_text.set_text (sf_info.format_name); + std::string n = sf_info.format_name; + if (n.substr (0, 8) == X_("Format: ")) { + n = n.substr (8); + } + format_text.set_text (n); channels_value.set_text (to_string (sf_info.channels, std::dec)); if (_session && sf_info.samplerate != _session->frame_rate()) { @@ -267,7 +263,8 @@ SoundFileBox::setup_labels (const ustring& filename) samplerate.set_name ("NewSessionSR2Label"); } - double src_coef = (double) _session->nominal_frame_rate() / sf_info.samplerate; + nframes_t const nfr = _session ? _session->nominal_frame_rate() : 25; + double src_coef = (double) nfr / sf_info.samplerate; length_clock.set (sf_info.length * src_coef + 0.5, true); timecode_clock.set (sf_info.timecode * src_coef + 0.5, true); @@ -352,7 +349,9 @@ SoundFileBox::audition () afs = boost::dynamic_pointer_cast (srclist[0]); string rname = region_name_from_path (afs->path(), false); - r = boost::dynamic_pointer_cast (RegionFactory::create (srclist, 0, srclist[0]->length(), rname, 0, Region::DefaultFlags, false)); + r = boost::dynamic_pointer_cast (RegionFactory::create (srclist, 0, + srclist[0]->length(srclist[0]->timeline_position()), + rname, 0, Region::DefaultFlags, false)); _session->audition_region(r); } @@ -366,7 +365,7 @@ SoundFileBox::stop_audition () } bool -SoundFileBox::tags_entry_left (GdkEventFocus *ev) +SoundFileBox::tags_entry_left (GdkEventFocus *) { tags_changed (); return false; @@ -567,13 +566,13 @@ SoundFileBrowser::chooser_file_activated () } void -SoundFileBrowser::found_list_view_activated (const TreeModel::Path& path, TreeViewColumn* col) +SoundFileBrowser::found_list_view_activated (const TreeModel::Path&, TreeViewColumn*) { preview.audition (); } void -SoundFileBrowser::freesound_list_view_activated (const TreeModel::Path& path, TreeViewColumn* col) +SoundFileBrowser::freesound_list_view_activated (const TreeModel::Path&, TreeViewColumn*) { preview.audition (); } @@ -596,7 +595,10 @@ SoundFileBrowser::add_gain_meter () delete gm; gm = new GainMeter (*session); - gm->set_io (session->the_auditioner()); + + boost::shared_ptr r = session->the_auditioner (); + + gm->set_controls (r, r->shared_peak_meter(), r->amp()); meter_packer.set_border_width (12); meter_packer.pack_start (*gm, false, true); @@ -1098,7 +1100,8 @@ SoundFileOmega::check_info (const vector& paths, bool& same_size, bool& } else if (SMFSource::safe_midi_file_extension (*i)) { - Evoral::SMFReader reader(*i); + Evoral::SMF reader; + reader.open(*i); if (reader.num_tracks() > 1) { multichannel = true; // "channel" == track here... } @@ -1207,10 +1210,10 @@ SoundFileOmega::SoundFileOmega (Gtk::Window& parent, string title, ARDOUR::Sessi options.set_spacing (12); str.clear (); - str.push_back (_("use file timestamp")); - str.push_back (_("at edit point")); - str.push_back (_("at playhead")); - str.push_back (_("at session start")); + str.push_back (_("file timestamp")); + str.push_back (_("edit point")); + str.push_back (_("playhead")); + str.push_back (_("session start")); set_popdown_strings (where_combo, str); where_combo.set_active_text (str.front()); @@ -1237,7 +1240,7 @@ SoundFileOmega::SoundFileOmega (Gtk::Window& parent, string title, ARDOUR::Sessi action_combo.set_sensitive (false); l = manage (new Label); - l->set_text (_("Insert:")); + l->set_text (_("Insert at:")); hbox = manage (new HBox); hbox->set_border_width (12); @@ -1268,7 +1271,7 @@ SoundFileOmega::SoundFileOmega (Gtk::Window& parent, string title, ARDOUR::Sessi channel_combo.set_sensitive (false); l = manage (new Label); - l->set_text (_("Conversion Quality:")); + l->set_text (_("Conversion quality:")); hbox = manage (new HBox); hbox->set_border_width (12); @@ -1314,6 +1317,25 @@ SoundFileOmega::SoundFileOmega (Gtk::Window& parent, string title, ARDOUR::Sessi disposition_map.insert (pair(_("all files in one region"), ImportMergeFiles)); chooser.signal_selection_changed().connect (mem_fun (*this, &SoundFileOmega::file_selection_changed)); + + /* set size requests for a couple of combos to allow them to display the longest text + they will ever be asked to display. This prevents them being resized when the user + selects a file to import, which in turn prevents the size of the dialog from jumping + around. */ + + vector t; + t.push_back (_("one track per file")); + t.push_back (_("one track per channel")); + t.push_back (_("sequence files")); + t.push_back (_("all files in one region")); + set_size_request_to_display_given_text (channel_combo, t, COMBO_FUDGE + 10, 15); + + t.clear (); + t.push_back (importmode2string (ImportAsTrack)); + t.push_back (importmode2string (ImportToTrack)); + t.push_back (importmode2string (ImportAsRegion)); + t.push_back (importmode2string (ImportAsTapeTrack)); + set_size_request_to_display_given_text (action_combo, t, COMBO_FUDGE + 10, 15); } void @@ -1342,11 +1364,11 @@ SoundFileOmega::get_position() const { ustring str = where_combo.get_active_text(); - if (str == _("use file timestamp")) { + if (str == _("file timestamp")) { return ImportAtTimestamp; - } else if (str == _("at edit point")) { + } else if (str == _("edit point")) { return ImportAtEditPoint; - } else if (str == _("at playhead")) { + } else if (str == _("playhead")) { return ImportAtPlayhead; } else { return ImportAtStart;