@@ -121,25 +121,15 @@ void MergerEditor::buttonEvent(Button* button)
121121 AccessClass::getEditorViewport ()->makeEditorVisible (this , false );
122122}
123123
124- void MergerEditor::mouseDown ( const MouseEvent& e )
124+ Array<GenericProcessor*> MergerEditor::getSelectableProcessors ( )
125125{
126-
127- Merger* merger = (Merger*) getProcessor ();
128-
129- if (e.mods .isRightButtonDown ())
126+ Array<GenericProcessor*> selectableProcessors;
127+
128+ Array<GenericProcessor*> availableProcessors =
129+ AccessClass::getProcessorGraph ()->getListOfProcessors ();
130+
131+ if (availableProcessors.size () > 0 )
130132 {
131-
132- PopupMenu menu;
133- int menuItemIndex = 1 ;
134-
135- menu.addItem (menuItemIndex, // index
136- " Choose input 2:" , // message
137- false ); // isSelectable
138-
139- Array<GenericProcessor*> availableProcessors = AccessClass::getProcessorGraph ()->getListOfProcessors ();
140-
141- Array<GenericProcessor*> selectableProcessors;
142-
143133 for (auto & processorToCheck : availableProcessors)
144134 {
145135 if (!processorToCheck->isMerger () &&
@@ -163,63 +153,179 @@ void MergerEditor::mouseDown(const MouseEvent& e)
163153
164154 if (!isDownstream)
165155 {
166- String name = String (processorToCheck->getNodeId ());
167- name += " - " ;
168- name += processorToCheck->getName ();
169-
170- menu.addItem (++menuItemIndex, // index
171- name, // message
172- true ); // isSelectable
173-
174156 selectableProcessors.add (processorToCheck);
175157 }
176158
177159 }
178160 }
161+ }
162+
163+ return selectableProcessors;
164+
165+ }
179166
180- int eventMerge = ++menuItemIndex;
181- int continuousMerge = ++menuItemIndex;
167+ String MergerEditor::getNameString (GenericProcessor* p)
168+ {
169+ return p->getName () + " (" + String (p->getNodeId ()) + " )" ;
170+ }
171+
172+ void MergerEditor::mouseDown (const MouseEvent& e)
173+ {
182174
183- bool * eventPtr;
184- bool * continuousPtr;
175+ Merger* merger = (Merger*) getProcessor ();
176+
177+ if (e.mods .isRightButtonDown ())
178+ {
185179
186- if (pipelineSelectorA->getToggleState ())
180+ PopupMenu menu;
181+ int menuItemIndex = 1 ;
182+ int eventMergeIndexA, eventMergeIndexB, continuousMergeIndexA, continuousMergeIndexB = -1 ;
183+ int inputSelectionIndexA, inputSelectionIndexB = -1 ;
184+
185+ Array<GenericProcessor*> selectableProcessors = getSelectableProcessors ();
186+
187+ if (merger->sourceNodeA != 0 )
187188 {
188- eventPtr = &merger->mergeEventsA ;
189- continuousPtr = &merger->mergeContinuousA ;
189+ menu.addItem (menuItemIndex, // index
190+ " Input A: " + getNameString (merger->sourceNodeA ), // message
191+ false ); // isSelectable
192+
193+ eventMergeIndexA = ++menuItemIndex;
194+ continuousMergeIndexA = ++menuItemIndex;
195+
196+ menu.addItem (eventMergeIndexA,
197+ " Merge event data" ,
198+ !acquisitionIsActive,
199+ merger->mergeEventsA );
200+
201+ menu.addItem (continuousMergeIndexA,
202+ " Merge continuous data" ,
203+ !acquisitionIsActive,
204+ merger->mergeContinuousA );
205+
190206 } else {
191- eventPtr = &merger->mergeEventsB ;
192- continuousPtr = &merger->mergeContinuousB ;
207+ menu.addItem (++menuItemIndex, // index
208+ " Choose input A:" , // message
209+ false ); // isSelectable
210+
211+ if (selectableProcessors.size () > 0 )
212+ {
213+ inputSelectionIndexA = menuItemIndex + 1 ;
214+
215+ for (auto & selectableProcessor : selectableProcessors)
216+ {
217+ menu.addItem (++menuItemIndex, // index
218+ getNameString (selectableProcessor), // message
219+ true ); // isSelectable
220+ }
221+ } else {
222+ menu.addItem (++menuItemIndex, // index
223+ " NONE AVAILABLE" , // message
224+ false ); // isSelectable
225+ }
226+
193227 }
194228
195- menu.addItem (eventMerge, " Events" , !acquisitionIsActive, *eventPtr);
196- menu.addItem (continuousMerge, " Continuous" , !acquisitionIsActive, *continuousPtr);
229+ menu.addItem (++menuItemIndex,
230+ " " ,
231+ false );
232+
233+ if (merger->sourceNodeB != 0 )
234+ {
235+ menu.addItem (menuItemIndex, // index
236+ " Input B: " + getNameString (merger->sourceNodeB ), // message
237+ false ); // isSelectable
238+
239+ eventMergeIndexB = ++menuItemIndex;
240+ continuousMergeIndexB = ++menuItemIndex;
241+
242+ menu.addItem (eventMergeIndexB,
243+ " Merge event data" ,
244+ !acquisitionIsActive,
245+ merger->mergeEventsB );
246+
247+ menu.addItem (continuousMergeIndexB,
248+ " Merge continuous data" ,
249+ !acquisitionIsActive,
250+ merger->mergeContinuousB );
251+
252+ } else {
253+ menu.addItem (++menuItemIndex, // index
254+ " Choose input B:" , // message
255+ false ); // isSelectable
256+
257+ if (selectableProcessors.size () > 0 )
258+ {
259+ inputSelectionIndexB = menuItemIndex + 1 ;
260+
261+ for (auto & selectableProcessor : selectableProcessors)
262+ {
263+ menu.addItem (++menuItemIndex, // index
264+ getNameString (selectableProcessor), // message
265+ true ); // isSelectable
266+ }
267+ } else {
268+ menu.addItem (++menuItemIndex, // index
269+ " NONE AVAILABLE" , // message
270+ false ); // isSelectable
271+ }
272+ }
197273
198274 const int result = menu.show (); // returns 0 if nothing is selected
199275
200276 std::cout << " Selection: " << result << std::endl;
201277
202- if (result > 1 && result < eventMerge)
278+
279+ if (result == eventMergeIndexA)
203280 {
204- std::cout << " Selected " << selectableProcessors[result-2 ]->getName () << std::endl;
205-
206- switchSource (1 );
207-
208- Merger* processor = (Merger*) getProcessor ();
209- processor->setMergerSourceNode (selectableProcessors[result-2 ]);
210- selectableProcessors[result-2 ]->setDestNode (getProcessor ());
211-
212- AccessClass::getGraphViewer ()->updateNodeLocations ();
213-
214- AccessClass::getEditorViewport ()->makeEditorVisible (this , false , true );
215- } else if (result == eventMerge)
281+ merger->mergeEventsA = !(merger->mergeEventsA );
282+ CoreServices::updateSignalChain (this );
283+ return ;
284+ } else if (result == continuousMergeIndexA)
285+ {
286+ merger->mergeContinuousA = !merger->mergeContinuousA ;
287+ CoreServices::updateSignalChain (this );
288+ return ;
289+ } else if (result == eventMergeIndexB)
216290 {
217- *eventPtr = !(*eventPtr) ;
291+ merger-> mergeEventsB = !merger-> mergeEventsB ;
218292 CoreServices::updateSignalChain (this );
219- } else if (result == continuousMerge)
293+ return ;
294+ } else if (result == continuousMergeIndexB)
220295 {
221- *continuousPtr = !(*continuousPtr) ;
296+ merger-> mergeContinuousB = !merger-> mergeContinuousB ;
222297 CoreServices::updateSignalChain (this );
298+ return ;
299+ }
300+
301+ if (inputSelectionIndexA > 0 )
302+ {
303+ if (result >= inputSelectionIndexA
304+ && result < inputSelectionIndexA + selectableProcessors.size ())
305+ {
306+ switchSource (0 );
307+ merger->setMergerSourceNode (selectableProcessors[result - inputSelectionIndexA]);
308+ selectableProcessors[result-inputSelectionIndexA]->setDestNode (merger);
309+
310+ AccessClass::getGraphViewer ()->updateNodeLocations ();
311+ AccessClass::getEditorViewport ()->makeEditorVisible (this , false , true );
312+ return ;
313+ }
314+ }
315+
316+ if (inputSelectionIndexB > 0 )
317+ {
318+ if (result >= inputSelectionIndexB
319+ && result < inputSelectionIndexB + selectableProcessors.size ())
320+ {
321+ switchSource (1 );
322+ merger->setMergerSourceNode (selectableProcessors[result - inputSelectionIndexB]);
323+ selectableProcessors[result-inputSelectionIndexB]->setDestNode (merger);
324+
325+ AccessClass::getGraphViewer ()->updateNodeLocations ();
326+ AccessClass::getEditorViewport ()->makeEditorVisible (this , false , true );
327+ return ;
328+ }
223329 }
224330 }
225331}
0 commit comments