X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsfdb_ui.cc;h=84065c69b1b4d8b1192a5a99960baef1da8a7f5e;hb=c0e6f8e4c324c3f44613949b59acd9e864ab263d;hp=2640af8379e440c0b1691c59ea19a93977bc6665;hpb=4861eca97483128e5febb575b94688581abb0154;p=ardour.git diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index 2640af8379..84065c69b1 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -26,8 +26,8 @@ #include #include +#include #include -#include #include #include @@ -122,7 +122,9 @@ SoundFileBox::SoundFileBox (bool persistent) length_clock ("sfboxLengthClock", !persistent, "", false, false, true, false), timecode_clock ("sfboxTimecodeClock", !persistent, "", false, false, false, false), main_box (false, 6), - autoplay_btn (_("Auto-play")) + autoplay_btn (_("Auto-play")), + seek_slider(0,1000,1), + _seeking(false) { set_name (X_("SoundFileBox")); @@ -200,9 +202,18 @@ SoundFileBox::SoundFileBox (bool persistent) bottom_box.pack_start(stop_btn, true, true); bottom_box.pack_start(autoplay_btn, false, false); + seek_slider.set_draw_value(false); + + seek_slider.add_events(Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); + seek_slider.signal_button_press_event().connect(sigc::mem_fun(*this, &SoundFileBox::seek_button_press), false); + seek_slider.signal_button_release_event().connect(sigc::mem_fun(*this, &SoundFileBox::seek_button_release), false); + main_box.pack_start (seek_slider, false, false); + play_btn.signal_clicked().connect (sigc::mem_fun (*this, &SoundFileBox::audition)); stop_btn.signal_clicked().connect (sigc::mem_fun (*this, &SoundFileBox::stop_audition)); + stop_btn.set_sensitive (false); + channels_value.set_alignment (0.0f, 0.5f); samplerate_value.set_alignment (0.0f, 0.5f); } @@ -218,9 +229,45 @@ SoundFileBox::set_session(Session* s) if (!_session) { play_btn.set_sensitive (false); stop_btn.set_sensitive (false); + auditioner_connections.drop_connections(); + } else { + auditioner_connections.drop_connections(); + _session->AuditionActive.connect(auditioner_connections, invalidator (*this), boost::bind (&SoundFileBox::audition_active, this, _1), gui_context()); + _session->the_auditioner()->AuditionProgress.connect(auditioner_connections, invalidator (*this), boost::bind (&SoundFileBox::audition_progress, this, _1, _2), gui_context()); + } +} + +void +SoundFileBox::audition_active(bool active) { + stop_btn.set_sensitive (active); + seek_slider.set_sensitive (active); + if (!active) { + seek_slider.set_value(0); + } +} + +void +SoundFileBox::audition_progress(ARDOUR::framecnt_t pos, ARDOUR::framecnt_t len) { + if (!_seeking) { + seek_slider.set_value( 1000.0 * pos / len); + seek_slider.set_sensitive (true); } } +bool +SoundFileBox::seek_button_press(GdkEventButton*) { + _seeking = true; + return false; // pass on to slider +} + +bool +SoundFileBox::seek_button_release(GdkEventButton*) { + _seeking = false; + _session->the_auditioner()->seek_to_percent(seek_slider.get_value() / 10.0); + seek_slider.set_sensitive (false); + return false; // pass on to slider +} + bool SoundFileBox::setup_labels (const string& filename) { @@ -709,7 +756,7 @@ SoundFileBrowser::add_gain_meter () boost::shared_ptr r = _session->the_auditioner (); gm->set_controls (r, r->shared_peak_meter(), r->amp()); - gm->set_fader_name (X_("AudioTrackFader")); + gm->set_fader_name (X_("GainFader")); meter_packer.set_border_width (12); meter_packer.pack_start (*gm, false, true); @@ -1459,7 +1506,7 @@ SoundFileOmega::check_info (const vector& paths, bool& same_size, bool& bool SoundFileOmega::check_link_status (const Session* s, const vector& paths) { -#ifdef WIN32 +#ifdef PLATFORM_WINDOWS return false; #else std::string tmpdir(Glib::build_filename (s->session_directory().sound_path(), "linktest")); @@ -1473,7 +1520,7 @@ SoundFileOmega::check_link_status (const Session* s, const vector& paths for (vector::const_iterator i = paths.begin(); i != paths.end(); ++i) { - char tmpc[MAXPATHLEN+1]; + char tmpc[PATH_MAX+1]; snprintf (tmpc, sizeof(tmpc), "%s/%s", tmpdir.c_str(), Glib::path_get_basename (*i).c_str());