Skip to content

Commit a870312

Browse files
committed
Update logic for merger pop-up menu
1 parent cf5e817 commit a870312

4 files changed

Lines changed: 171 additions & 69 deletions

File tree

Source/Processors/Merger/Merger.cpp

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ void Merger::setMergerSourceNode(GenericProcessor* sn)
6464
}
6565
else
6666
{
67-
sourceNodeB = sn;
6867
std::cout << "Setting source node B." << std::endl;
68+
sourceNodeB = sn;
6969
}
7070

7171
if (sn != nullptr)
@@ -225,30 +225,23 @@ void Merger::updateSettings()
225225
{
226226
std::cout << " Merger source A found." << std::endl;
227227
addSettingsFromSourceNode(sourceNodeA);
228+
} else {
229+
mergeEventsA = true;
230+
mergeContinuousA = true;
228231
}
229232

230233
if (sourceNodeB != 0)
231234
{
232235
std::cout << " Merger source B found." << std::endl;
233236
addSettingsFromSourceNode(sourceNodeB);
237+
} else {
238+
mergeEventsB = true;
239+
mergeContinuousB = true;
234240
}
235241

236242
if (sourceNodeA == 0 && sourceNodeB == 0)
237243
{
238-
239-
240244
settings.numOutputs = getNumOutputs();
241-
242-
/* for (int i = 0; i < getNumOutputs(); i++)
243-
{
244-
Channel* ch = new Channel(this, i, HEADSTAGE_CHANNEL);
245-
ch->sampleRate = getDefaultSampleRate();
246-
ch->bitVolts = getDefaultBitVolts();
247-
248-
channels.add(ch);
249-
}*/
250-
251-
//generateDefaultChannelNames(settings.outputChannelNames);
252245
}
253246

254247
std::cout << "Number of merger outputs: " << getNumInputs() << std::endl;
@@ -345,4 +338,4 @@ void Merger::loadCustomParametersFromXml()
345338
// else
346339
// tabB = t;
347340

348-
// }
341+
// }

Source/Processors/Merger/Merger.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@ class Merger : public GenericProcessor
7777

7878
bool mergeEventsA, mergeContinuousA, mergeEventsB, mergeContinuousB;
7979

80-
private:
81-
8280
GenericProcessor* sourceNodeA;
8381
GenericProcessor* sourceNodeB;
8482

83+
private:
84+
8585
int activePath;
8686

8787
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Merger);

Source/Processors/Merger/MergerEditor.cpp

Lines changed: 158 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Source/Processors/Merger/MergerEditor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ class MergerEditor : public GenericEditor
7070

7171
private:
7272

73+
String getNameString(GenericProcessor*);
74+
Array<GenericProcessor*> getSelectableProcessors();
75+
7376
ImageButton* pipelineSelectorA;
7477
ImageButton* pipelineSelectorB;
7578

0 commit comments

Comments
 (0)