From bdec143faf75c4e571f201613916909ef3f8723e Mon Sep 17 00:00:00 2001 From: jsiegle <jsiegle@mit.edu> Date: Wed, 20 Nov 2013 15:44:41 -0500 Subject: [PATCH] Enable right-click setting of second merger source --- Source/Processors/Editors/MergerEditor.cpp | 51 ++++++++++++++++++++++ Source/Processors/Editors/MergerEditor.h | 2 + Source/Processors/ProcessorGraph.cpp | 23 ++++++++++ Source/Processors/ProcessorGraph.h | 2 + 4 files changed, 78 insertions(+) diff --git a/Source/Processors/Editors/MergerEditor.cpp b/Source/Processors/Editors/MergerEditor.cpp index 5bea9103c..e612cad5d 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 dfbf85aa8..b37818907 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 f30f18b83..ddfb4ca60 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 c660b75a2..ef0ae08e9 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; -- GitLab