# HG changeset patch # User Chris Cannam # Date 1192029482 0 # Node ID 14e0f60435b81c2d6d5b3229aed32f97a31c5cac # Parent b1a3f7bc035d770f4ab30d2888d111e62210afc4 * Make it possible to drop audio files, layer files, session files and images onto SV panes. Need to do a bit more work on where we expect the dropped file to go, particularly in the case of audio files -- at the moment they're always opened in new panes, but it may be better to by default replace whatever is in the target pane. diff -r b1a3f7bc035d -r 14e0f60435b8 data/fileio/AudioFileReaderFactory.cpp --- a/data/fileio/AudioFileReaderFactory.cpp Wed Oct 10 10:22:34 2007 +0000 +++ b/data/fileio/AudioFileReaderFactory.cpp Wed Oct 10 15:18:02 2007 +0000 @@ -147,81 +147,6 @@ reader = 0; } - reader = new WavFileReader(path); - - if (targetRate != 0 && - reader->isOK() && - reader->getSampleRate() != targetRate) { - - delete reader; - reader = new ResamplingWavFileReader - (path, - ResamplingWavFileReader::ResampleThreaded, - ResamplingWavFileReader::CacheInTemporaryFile, - targetRate); - } - - if (reader->isOK()) return reader; - - if (reader->getError() != "") { - std::cerr << "AudioFileReaderFactory: WAV file reader error: \"" - << reader->getError().toStdString() << "\"" << std::endl; - } else { - std::cerr << "AudioFileReaderFactory: WAV file reader failed" - << std::endl; - } - delete reader; - -#ifdef HAVE_OGGZ -#ifdef HAVE_FISHSOUND - reader = new OggVorbisFileReader - (path, - OggVorbisFileReader::DecodeThreaded, - OggVorbisFileReader::CacheInTemporaryFile); - if (reader->isOK()) return reader; - if (reader->getError() != "") { - std::cerr << "AudioFileReaderFactory: Ogg file reader error: \"" - << reader->getError().toStdString() << "\"" << std::endl; - } else { - std::cerr << "AudioFileReaderFactory: Ogg file reader failed" - << std::endl; - } - delete reader; -#endif -#endif - -#ifdef HAVE_MAD - reader = new MP3FileReader - (path, - MP3FileReader::DecodeThreaded, - MP3FileReader::CacheInTemporaryFile); - if (reader->isOK()) return reader; - if (reader->getError() != "") { - std::cerr << "AudioFileReaderFactory: MP3 file reader error: \"" - << reader->getError().toStdString() << "\"" << std::endl; - } else { - std::cerr << "AudioFileReaderFactory: MP3 file reader failed" - << std::endl; - } - delete reader; -#endif - -#ifdef HAVE_QUICKTIME - reader = new QuickTimeFileReader - (path, - QuickTimeFileReader::DecodeThreaded, - QuickTimeFileReader::CacheInTemporaryFile); - if (reader->isOK()) return reader; - if (reader->getError() != "") { - std::cerr << "AudioFileReaderFactory: QuickTime file reader error: \"" - << reader->getError().toStdString() << "\"" << std::endl; - } else { - std::cerr << "AudioFileReaderFactory: QuickTime file reader failed" - << std::endl; - } - delete reader; -#endif - - return 0; + return reader; } diff -r b1a3f7bc035d -r 14e0f60435b8 data/fileio/CSVFileReader.cpp --- a/data/fileio/CSVFileReader.cpp Wed Oct 10 10:22:34 2007 +0000 +++ b/data/fileio/CSVFileReader.cpp Wed Oct 10 15:18:02 2007 +0000 @@ -20,6 +20,7 @@ #include "model/SparseOneDimensionalModel.h" #include "model/SparseTimeValueModel.h" #include "model/EditableDenseThreeDimensionalModel.h" +#include "DataFileReaderFactory.h" #include #include @@ -91,7 +92,7 @@ if (dialog->exec() == QDialog::Rejected) { delete dialog; - return 0; + throw DataFileReaderFactory::ImportCancelled; } CSVFormatDialog::ModelType modelType = dialog->getModelType(); @@ -304,7 +305,7 @@ QGridLayout *layout = new QGridLayout; - layout->addWidget(new QLabel(tr("\nPlease select the correct data format for this file.\n")), + layout->addWidget(new QLabel(tr("Select Data Format

Please select the correct data format for this file.")), 0, 0, 1, 4); layout->addWidget(new QLabel(tr("Each row specifies:")), 1, 0); diff -r b1a3f7bc035d -r 14e0f60435b8 data/fileio/DataFileReaderFactory.cpp --- a/data/fileio/DataFileReaderFactory.cpp Wed Oct 10 10:22:34 2007 +0000 +++ b/data/fileio/DataFileReaderFactory.cpp Wed Oct 10 15:18:02 2007 +0000 @@ -53,9 +53,13 @@ DataFileReader *reader = createReader(path, mainModelSampleRate); if (!reader) return NULL; - Model *model = reader->load(); - delete reader; - - return model; + try { + Model *model = reader->load(); + delete reader; + return model; + } catch (Exception) { + delete reader; + throw; + } } diff -r b1a3f7bc035d -r 14e0f60435b8 data/fileio/DataFileReaderFactory.h --- a/data/fileio/DataFileReaderFactory.h Wed Oct 10 10:22:34 2007 +0000 +++ b/data/fileio/DataFileReaderFactory.h Wed Oct 10 15:18:02 2007 +0000 @@ -24,6 +24,8 @@ class DataFileReaderFactory { public: + enum Exception { ImportCancelled }; + /** * Return the file extensions that we have data file readers for, * in a format suitable for use with QFileDialog. For example, diff -r b1a3f7bc035d -r 14e0f60435b8 data/fileio/MIDIFileReader.cpp --- a/data/fileio/MIDIFileReader.cpp Wed Oct 10 10:22:34 2007 +0000 +++ b/data/fileio/MIDIFileReader.cpp Wed Oct 10 15:18:02 2007 +0000 @@ -865,7 +865,7 @@ bool ok = false; QString selected = QInputDialog::getItem (0, tr("Select track or tracks to import"), - tr("You can only import this file as a single annotation layer,\nbut the file contains more than one track,\nor notes on more than one channel.\n\nPlease select the track or merged tracks you wish to import:"), + tr("Select track to import

You can only import this file as a single annotation layer, but the file contains more than one track, or notes on more than one channel.

Please select the track or merged tracks you wish to import:"), available, 0, false, &ok); if (!ok || selected.isEmpty()) return 0;