diff --git a/Source/Processors/DataThreads/FileReaderThread.cpp b/Source/Processors/DataThreads/FileReaderThread.cpp index 3f26cd08eaf29528a7595b102563e105c4f83d8f..2a6a08e33cce09617a67e99f1286368c1e47958e 100755 --- a/Source/Processors/DataThreads/FileReaderThread.cpp +++ b/Source/Processors/DataThreads/FileReaderThread.cpp @@ -24,38 +24,17 @@ #include "FileReaderThread.h" -FileReaderThread::FileReaderThread(SourceNode* sn) : +FileReaderThread::FileReaderThread(SourceNode* sn, const char* path) : DataThread(sn), lengthOfInputFile(0), bufferSize(0) { - // FileChooser chooseFileReaderFile ("Please select the file you want to load...", - // File::getSpecialLocation (File::userHomeDirectory), - // "*"); - - // if (chooseFileReaderFile.browseForFileToOpen()) - // { - // File fileToRead (chooseFileReaderFile.getResult()); - // String fileName(fileToRead.getFullPathName()); - // input = fopen(fileName.String::toCString(), "r"); - // } - - // FIXME stop hard-coding `path' once DataThread gives us a proper - // mechanism for accepting arguments (the above commented-out code - // is a layering violation that's best avoided). -#if JUCE_MAC - const char* path = "/Users/Josh/Programming/open-ephys/GUI/Builds/Linux/build/data_stream_16ch_2"; -#else - const char* path = "./data_stream_16ch_2"; -#endif input = fopen(path, "r"); - // Avoid a segfault if crock above fails. + // Avoid a segfault if file isn't found if (!input) { std::cout << "Can't find data file " - << '"' << path << "\", " - << "either make sure you're Josh on OS X, " - << "or run open-ephys from the build directory on Linux." + << '"' << path << "\"" << std::endl; return; } @@ -116,9 +95,7 @@ bool FileReaderThread::stopAcquisition() signalThreadShouldExit(); } - return true; - } bool FileReaderThread::updateBuffer() @@ -134,7 +111,7 @@ bool FileReaderThread::updateBuffer() rewind(input); } - fread(readBuffer, 2, bufferSize, input); + size_t return_value = fread(readBuffer, 2, bufferSize, input); int chan = 0; @@ -156,7 +133,6 @@ bool FileReaderThread::updateBuffer() } - } else { diff --git a/Source/Processors/DataThreads/FileReaderThread.h b/Source/Processors/DataThreads/FileReaderThread.h index 4da05fa953a0484435e18e51a2d56b3a2b5c1159..8218be7491314775c969336cb83bfade0289afe3 100755 --- a/Source/Processors/DataThreads/FileReaderThread.h +++ b/Source/Processors/DataThreads/FileReaderThread.h @@ -46,7 +46,7 @@ class FileReaderThread : public DataThread { public: - FileReaderThread(SourceNode* sn); + FileReaderThread(SourceNode* sn, const char* path); ~FileReaderThread(); bool foundInputSource(); diff --git a/Source/Processors/SourceNode.cpp b/Source/Processors/SourceNode.cpp index 2a043bcab73a487b7d8affe028ce498330dda3d5..0c637bad8ea50d8f919298c6cc2bd5ec1b5e422c 100755 --- a/Source/Processors/SourceNode.cpp +++ b/Source/Processors/SourceNode.cpp @@ -50,7 +50,26 @@ SourceNode::SourceNode(const String& name_) } else if (getName().equalsIgnoreCase("File Reader")) { - dataThread = new FileReaderThread(this); + FileChooser chooseFileReaderFile ("Please select the file you want to load...", + File::getSpecialLocation (File::userHomeDirectory), + "*"); + + sendActionMessage("Select a file..."); + + if (chooseFileReaderFile.browseForFileToOpen()) + { + // Use the selected file + File fileToRead (chooseFileReaderFile.getResult()); + String fileName(fileToRead.getFullPathName()); + dataThread = new FileReaderThread(this, fileName.getCharPointer()); + } else { + // If cancelled, assume it's in the executable directory + dataThread = new FileReaderThread(this, "./data_stream_16ch_2"); + } + + sendActionMessage("File loaded."); + + } else if (getName().equalsIgnoreCase("RHD2000 USB Board")) {