diff --git a/Source/Processors/Editors/MergerEditor.cpp b/Source/Processors/Editors/MergerEditor.cpp index 5bea9103c096b54cd21c400642e195ded03e7d20..e612cad5d8dded101fb05b439adacdce8f886f06 100755 --- a/Source/Processors/Editors/MergerEditor.cpp +++ b/Source/Processors/Editors/MergerEditor.cpp @@ -23,6 +23,8 @@ #include "MergerEditor.h" #include "../Utilities/Merger.h" +#include "../ProcessorGraph.h" +#include "../../UI/EditorViewport.h" // PipelineSelectorButton::PipelineSelectorButton() // : DrawableButton ("Selector", DrawableButton::ImageFitted) @@ -114,6 +116,55 @@ void MergerEditor::buttonEvent(Button* button) } } +void MergerEditor::mouseDown(const MouseEvent& e) +{ + + + + if (e.mods.isRightButtonDown()) + { + + PopupMenu m; + m.addItem(1, "Choose input 2:",false); + + Array<GenericProcessor*> availableProcessors = getProcessorGraph()->getListOfProcessors(); + + for (int i = 0; i < availableProcessors.size(); i++) + { + if (!availableProcessors[i]->isSink() && + !availableProcessors[i]->isMerger() && + !availableProcessors[i]->isSplitter() && + availableProcessors[i]->getDestNode() != getProcessor()) + { + + String name = String(availableProcessors[i]->getNodeId()); + name += " - "; + name += availableProcessors[i]->getName(); + + m.addItem(i+2, name); + //processorsInList.add(availableProcessors[i]); + } + } + + const int result = m.show(); + + if (result > 1) + { + std::cout << "Selected " << availableProcessors[result-2]->getName() << std::endl; + + switchSource(1); + + Merger* processor = (Merger*) getProcessor(); + processor->setMergerSourceNode(availableProcessors[result-2]); + + getEditorViewport()->makeEditorVisible(this, false, true); + } + } + + + +} + void MergerEditor::switchSource(int source) { if (source == 0) diff --git a/Source/Processors/Editors/MergerEditor.h b/Source/Processors/Editors/MergerEditor.h index dfbf85aa8e065fd8365863aa7020a599d2556c5c..b37818907de6e2ea64ed81ee891a73a287fcd4f3 100755 --- a/Source/Processors/Editors/MergerEditor.h +++ b/Source/Processors/Editors/MergerEditor.h @@ -50,6 +50,8 @@ public: void switchIO(int); + void mouseDown(const MouseEvent& event); + private: ImageButton* pipelineSelectorA; diff --git a/Source/Processors/ProcessorGraph.cpp b/Source/Processors/ProcessorGraph.cpp index f30f18b837acbd07db1edd9761b8213865d59191..ddfb4ca609f6bd1146900b766855d1cbbc540ad1 100644 --- a/Source/Processors/ProcessorGraph.cpp +++ b/Source/Processors/ProcessorGraph.cpp @@ -225,7 +225,30 @@ void ProcessorGraph::restoreParameters() } +Array<GenericProcessor*> ProcessorGraph::getListOfProcessors() +{ + + Array<GenericProcessor*> a; + + for (int i = 0; i < getNumNodes(); i++) + { + Node* node = getNode(i); + + int nodeId = node->nodeId; + + if (nodeId != OUTPUT_NODE_ID && + nodeId != AUDIO_NODE_ID && + nodeId != RECORD_NODE_ID && + nodeId != RESAMPLING_NODE_ID) + { + GenericProcessor* p =(GenericProcessor*) node->getProcessor(); + a.add(p); + } + } + return a; + +} void ProcessorGraph::clearConnections() { diff --git a/Source/Processors/ProcessorGraph.h b/Source/Processors/ProcessorGraph.h index c660b75a2ea4eb1295ed366278f75fa99bdd096f..ef0ae08e9589ff69b0ecd90e3e8e702e09fa51b7 100755 --- a/Source/Processors/ProcessorGraph.h +++ b/Source/Processors/ProcessorGraph.h @@ -83,6 +83,8 @@ public: void setRecordState(bool); + Array<GenericProcessor*> getListOfProcessors(); + private: int currentNodeId;