Skip to content

Commit

Permalink
Add seq track file drop
Browse files Browse the repository at this point in the history
  • Loading branch information
FangCunWuChang committed Jun 8, 2024
1 parent 59ae3a5 commit c489579
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/audioCore/Utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ namespace utils {
}

const juce::StringArray getMidiFormatsSupported(bool /*isWrite*/) {
return juce::StringArray{ "*.mid" };
return juce::StringArray{ "*.mid", "*.midi", "*.smf" };
}

juce::AudioFormat* findAudioFormatForExtension(const juce::String& extension, bool isWrite) {
Expand Down
54 changes: 54 additions & 0 deletions src/ui/component/sequencer/SeqTrackComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,60 @@ void SeqTrackComponent::itemDropped(const SourceDetails& dragSourceDetails) {
}
}

bool SeqTrackComponent::isInterestedInFileDrag(const juce::StringArray& files) {
juce::StringArray audioFormats = quickAPI::getAudioFormatsSupported(false);
juce::StringArray midiFormats = quickAPI::getMidiFormatsSupported(false);

int audioCount = 0, midiCount = 0;

for (auto& filePath : files) {
juce::File file(filePath);
juce::String fileType = "*" + file.getFileExtension();

if (audioFormats.contains(fileType)) {
audioCount++;
}
else if (midiFormats.contains(fileType)) {
midiCount++;
}

if (audioCount > 1 || midiCount > 1) { return false; }
}

if (audioCount + midiCount <= 0) { return false; }
return audioCount <= 1 && midiCount <= 1;
}

void SeqTrackComponent::fileDragEnter(const juce::StringArray& files, int /*x*/, int /*y*/) {
if (!this->isInterestedInFileDrag(files)) { return; }
this->preDrop();
}

void SeqTrackComponent::fileDragExit(const juce::StringArray& files) {
if (!this->isInterestedInFileDrag(files)) { return; }
this->endDrop();
}

void SeqTrackComponent::filesDropped(const juce::StringArray& files, int /*x*/, int /*y*/) {
if (!this->isInterestedInFileDrag(files)) { return; }
this->endDrop();

juce::StringArray audioFormats = quickAPI::getAudioFormatsSupported(false);
juce::StringArray midiFormats = quickAPI::getMidiFormatsSupported(false);

for (auto& filePath : files) {
juce::File file(filePath);
juce::String fileType = "*" + file.getFileExtension();

if (audioFormats.contains(fileType)) {
/** TODO Load Audio */
}
else if (midiFormats.contains(fileType)) {
/** TODO Load MIDI */
}
}
}

void SeqTrackComponent::editTrackName() {
CoreActions::setSeqNameGUI(this->index);
}
Expand Down
6 changes: 6 additions & 0 deletions src/ui/component/sequencer/SeqTrackComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
class SeqTrackComponent final
: public juce::Component,
public juce::DragAndDropTarget,
public juce::FileDragAndDropTarget,
public juce::SettableTooltipClient {
public:
using ScrollFunc = std::function<void(double)>;
Expand Down Expand Up @@ -44,6 +45,11 @@ class SeqTrackComponent final
void itemDragExit(const SourceDetails& dragSourceDetails) override;
void itemDropped(const SourceDetails& dragSourceDetails) override;

bool isInterestedInFileDrag(const juce::StringArray& files) override;
void fileDragEnter(const juce::StringArray& files, int x, int y) override;
void fileDragExit(const juce::StringArray& files) override;
void filesDropped(const juce::StringArray& files, int x, int y) override;

private:
int index = -1;
juce::Colour trackColor, idColor;
Expand Down

0 comments on commit c489579

Please sign in to comment.