Gracefully handle templates that lack contents in their description or created_with...
[ardour.git] / gtk2_ardour / sfdb_ui.cc
index 8359000ba0c849f3ab2d6dcf260d231913ed1ca9..c9788c8314fcb79a341e433ac42461e53c5570b0 100644 (file)
 #include <limits.h>
 
 #include <gtkmm/box.h>
+#include <gtkmm/scrolledwindow.h>
 #include <gtkmm/stock.h>
 
 #include "pbd/gstdio_compat.h"
 #include <glibmm/fileutils.h>
 
-#include "pbd/convert.h"
 #include "pbd/tokenizer.h"
 #include "pbd/enumwriter.h"
 #include "pbd/pthread_utils.h"
+#include "pbd/string_convert.h"
 #include "pbd/xml++.h"
 
 #include <gtkmm2ext/utils.h>
 #include "ardour/session.h"
 #include "ardour/session_directory.h"
 #include "ardour/srcfilesource.h"
+#include "ardour/profile.h"
 
 #include "ardour_ui.h"
 #include "editing.h"
 #include "gui_thread.h"
-#include "prompter.h"
 #include "sfdb_ui.h"
 #include "editing.h"
 #include "gain_meter.h"
@@ -142,7 +143,9 @@ SoundFileBox::SoundFileBox (bool /*persistent*/)
          main_box (false, 6),
          autoplay_btn (_("Auto-play")),
          seek_slider(0,1000,1),
-         _seeking(false)
+         _seeking(false),
+         _src_quality (SrcBest),
+         _import_position (ImportAtTimestamp)
 
 {
        set_name (X_("SoundFileBox"));
@@ -234,6 +237,9 @@ SoundFileBox::SoundFileBox (bool /*persistent*/)
        play_btn.signal_clicked().connect (sigc::mem_fun (*this, &SoundFileBox::audition));
        stop_btn.signal_clicked().connect (sigc::mem_fun (*this, &SoundFileBox::stop_audition));
 
+       update_autoplay ();
+       autoplay_btn.signal_toggled().connect(sigc::mem_fun (*this, &SoundFileBox::autoplay_toggled));
+
        stop_btn.set_sensitive (false);
 
        channels_value.set_alignment (0.0f, 0.5f);
@@ -324,12 +330,12 @@ SoundFileBox::setup_labels (const string& filename)
 
                if (ms) {
                        if (ms->is_type0()) {
-                               channels_value.set_text (to_string(ms->channels().size(), std::dec));
+                               channels_value.set_text (to_string<uint32_t>(ms->channels().size()));
                        } else {
                                if (ms->num_tracks() > 1) {
-                                       channels_value.set_text (to_string(ms->num_tracks(), std::dec) + _("(Tracks)"));
+                                       channels_value.set_text (to_string(ms->num_tracks()) + _("(Tracks)"));
                                } else {
-                                       channels_value.set_text (to_string(ms->num_tracks(), std::dec));
+                                       channels_value.set_text (to_string(ms->num_tracks()));
                                }
                        }
                        length_clock.set (ms->length(ms->timeline_position()));
@@ -343,7 +349,7 @@ SoundFileBox::setup_labels (const string& filename)
                                tempomap_value.set_text (string_compose (_("%1/%2 \u2669 = %3"),
                                                                         t->numerator,
                                                                         t->denominator,
-                                                                        (1000000 / t->microseconds_per_quarter_note) * 60));
+                                                                        t->tempo ()));
                                break;
                        }
                        default:
@@ -389,7 +395,7 @@ SoundFileBox::setup_labels (const string& filename)
                n = n.substr (8);
        }
        format_text.set_text (n);
-       channels_value.set_text (to_string (sf_info.channels, std::dec));
+       channels_value.set_text (to_string (sf_info.channels));
 
        if (_session && sf_info.samplerate != _session->frame_rate()) {
                samplerate.set_markup (string_compose ("<b>%1</b>", _("Sample rate:")));
@@ -430,6 +436,22 @@ SoundFileBox::setup_labels (const string& filename)
        return true;
 }
 
+void
+SoundFileBox::update_autoplay ()
+{
+       const bool config_autoplay = UIConfiguration::instance().get_autoplay_files();
+
+       if (autoplay_btn.get_active() != config_autoplay) {
+               autoplay_btn.set_active (config_autoplay);
+       }
+}
+
+void
+SoundFileBox::autoplay_toggled()
+{
+       UIConfiguration::instance().set_autoplay_files(autoplay_btn.get_active());
+}
+
 bool
 SoundFileBox::autoplay() const
 {
@@ -603,7 +625,6 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi
        , _status (0)
        , _done (false)
        , import_button (_("Import"))
-       , close_button (Stock::CLOSE)
        , gm (0)
 {
 
@@ -779,14 +800,11 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi
        Gtk::HButtonBox* button_box = manage (new HButtonBox);
 
        button_box->set_layout (BUTTONBOX_END);
-       button_box->pack_start (close_button, false, false);
-       close_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_CLOSE));
 
        button_box->pack_start (import_button, false, false);
        import_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_OK));
 
        Gtkmm2ext::UI::instance()->set_tip (import_button, _("Press to import selected files"));
-       Gtkmm2ext::UI::instance()->set_tip (close_button, _("Press to close this window without importing any files"));
 
        vpacker.pack_end (*button_box, false, false);
 
@@ -820,6 +838,12 @@ SoundFileBrowser::set_action_sensitive (bool yn)
        import_button.set_sensitive (yn);
 }
 
+bool
+SoundFileBrowser::get_action_sensitive () const
+{
+       return import_button.get_sensitive ();
+}
+
 void
 SoundFileBrowser::do_something (int action)
 {
@@ -834,6 +858,22 @@ SoundFileBrowser::on_show ()
        start_metering ();
 }
 
+bool
+SoundFileBrowser::on_key_press_event (GdkEventKey* ev)
+{
+       if (ev->keyval == GDK_Escape) {
+               do_something (RESPONSE_CLOSE);
+               return true;
+       }
+       if (ev->keyval == GDK_space && ev->type == GDK_KEY_PRESS) {
+               if (get_action_sensitive()) {
+                       preview.audition();
+                       return true;
+               }
+       }
+       return ArdourWindow::on_key_press_event (ev);
+}
+
 void
 SoundFileBrowser::clear_selection ()
 {
@@ -844,7 +884,7 @@ SoundFileBrowser::clear_selection ()
 void
 SoundFileBrowser::chooser_file_activated ()
 {
-       preview.audition ();
+       do_something (RESPONSE_OK);
 }
 
 void
@@ -1446,7 +1486,9 @@ SoundFileOmega::reset_options ()
 
        action_strings.push_back (importmode2string (ImportAsTrack));
        action_strings.push_back (importmode2string (ImportAsRegion));
-       action_strings.push_back (importmode2string (ImportAsTapeTrack));
+       if (!Profile->get_mixbus()) {
+               action_strings.push_back (importmode2string (ImportAsTapeTrack));
+       }
 
        existing_choice = action_combo.get_active_text();