void BigClockEditor::buttonClicked (Button* buttonThatWasClicked) { ModifierKeys mousebutton = ModifierKeys::getCurrentModifiers(); if (!mousebutton.isPopupMenu()) { if (buttonThatWasClicked==runButton) { getFilter()->setParameter(kRunWatch,1.f-getFilter()->getParameter(kRunWatch)); } else if (buttonThatWasClicked==resetButton) { getFilter()->setParameter(kClearWatch,1.f); } else if (buttonThatWasClicked==infoLabel) { bool samplemode = getFilter()->getParameter(kSamples)>=0.5f; if (barsbeats && !samplemode) { barsbeats=false; getFilter()->setParameter(kBarsBeats, 0.0); getFilter()->setParameter(kSamples, 0.0); } else if (!barsbeats && !samplemode) { getFilter()->setParameter(kSamples, 1.0); } else if (samplemode) { barsbeats=true; getFilter()->setParameter(kBarsBeats, 1.0); getFilter()->setParameter(kSamples, 0.0); } updateParametersFromFilter(); } } }
//============================================================================== BigClockEditor::BigClockEditor (BigClockFilter* const ownerFilter) : AudioProcessorEditor (ownerFilter), showtextbox(ownerFilter->showcues) { static NonShinyLookAndFeel Look; LookAndFeel::setDefaultLookAndFeel (&Look); addChildComponent (modeLabel = new Label("Mode Label",String::empty)); modeLabel->setMouseClickGrabsKeyboardFocus(false); modeLabel->setFont(Font(12.f,Font::bold)); modeLabel->setJustificationType(Justification::topRight); addAndMakeVisible (infoLabel = new TimeDisplay ()); infoLabel->addListener(this); infoLabel->addMouseListener(this,false); colourSelector = new ColourSelector(ColourSelector::showColourAtTop|ColourSelector::showSliders|ColourSelector::showColourspace); colourSelector->setName (String(L"color")); colourSelector->setCurrentColour (getFilter()->bgcolor); colourSelector->addChangeListener (this); addAndMakeVisible (textBox = new TextEditor()); textBox->setMultiLine (false); textBox->setReturnKeyStartsNewLine (false); textBox->setReadOnly (false); textBox->setScrollbarsShown (false); textBox->setCaretVisible (true); textBox->setPopupMenuEnabled (true); textBox->setText (String::empty); textBox->addListener(this); addAndMakeVisible (cueLabel = new Label("Cue Label",String::empty)); addAndMakeVisible (runButton = new TextButton("Run")); runButton->setMouseClickGrabsKeyboardFocus(false); runButton->setButtonText(">"); runButton->setConnectedEdges(Button::ConnectedOnLeft | Button::ConnectedOnRight); runButton->addListener(this); addAndMakeVisible (resetButton = new TextButton("Reset")); resetButton->setMouseClickGrabsKeyboardFocus(false); resetButton->setButtonText("0"); resetButton->setConnectedEdges(Button::ConnectedOnLeft | Button::ConnectedOnRight); resetButton->addListener(this); addAndMakeVisible (resizer = new ResizableCornerComponent (this, &resizeLimits)); resizer->setMouseClickGrabsKeyboardFocus(false); resizeLimits.setSizeLimits (10, 10, 1200, 200); startTimer(50); ownerFilter->addChangeListener (this); updateParametersFromFilter(); }
//============================================================================== CpuRamEditor::CpuRamEditor (CpuRam* const ownerFilter) : AudioProcessorEditor (ownerFilter) { static OldSchoolLookAndFeel* MyLook = 0; if (MyLook == 0) MyLook = new OldSchoolLookAndFeel(); LookAndFeel::setDefaultLookAndFeel (MyLook); setMouseClickGrabsKeyboardFocus(false); addAndMakeVisible (infoLabel = new Label(String("CPU"),String::empty)); infoLabel->setMouseClickGrabsKeyboardFocus(false); infoLabel->setInterceptsMouseClicks(false,false); addAndMakeVisible (memLabel2 = new Label(String("RAM"),String::empty)); memLabel2->setMouseClickGrabsKeyboardFocus(false); memLabel2->setInterceptsMouseClicks(false,false); addAndMakeVisible (slider = new Slider(String("interval"))); slider->setMouseClickGrabsKeyboardFocus(false); slider->setSliderStyle(Slider::LinearBar); slider->setRange(300,2000,1); slider->setTextValueSuffix(String(" ms")); slider->addListener(this); addAndMakeVisible (graph = new CpuGraph()); colourSelector = new ColourSelector(ColourSelector::showColourAtTop|ColourSelector::showSliders|ColourSelector::showColourspace); colourSelector->setName (String("color")); colourSelector->setCurrentColour (getFilter()->bgcolor); colourSelector->addChangeListener (this); // add the triangular resizer component for the bottom-right of the UI //addAndMakeVisible (resizer = new ResizableCornerComponent (this, &resizeLimits)); //resizer->setMouseClickGrabsKeyboardFocus(false); //resizeLimits.setSizeLimits (10, 10, 1200, 200); // set our component's initial size to be the last one that was stored in the filter's settings setSize (ownerFilter->lastUIWidth, ownerFilter->lastUIHeight); lastMinimize=getFilter()->getParameter(1); // register ourselves with the filter - it will use its ChangeBroadcaster base // class to tell us when something has changed, and this will call our changeListenerCallback() // method. ownerFilter->addChangeListener (this); oi64.QuadPart=0; ok64.QuadPart=0; ou64.QuadPart=0; updateParametersFromFilter(); }
//============================================================================== void CpuRamEditor::changeListenerCallback (ChangeBroadcaster* source) { if (source==getFilter()) { updateParametersFromFilter(); } else { ColourSelector* cs = (ColourSelector*) source; getFilter()->bgcolor=(cs->getCurrentColour()); infoLabel->setColour(Label::textColourId,getFilter()->bgcolor.contrasting(0.8f)); memLabel2->setColour(Label::textColourId,getFilter()->bgcolor.contrasting(0.8f)); slider->setColour(Slider::textBoxTextColourId,getFilter()->bgcolor.contrasting(0.8f)); repaint(); } }
void BigClockEditor::changeListenerCallback (ChangeBroadcaster* source) { if (source==getFilter()) { updateParametersFromFilter(); } else { ColourSelector* cs = 0; cs = (ColourSelector*) source; if (cs) { getFilter()->bgcolor=(cs->getCurrentColour()); infoLabel->textcolor = cs->getCurrentColour().contrasting(getFilter()->getParameter(kLook)); repaint(); } } }
//============================================================================== void dRowTremoloEditorComponent::changeListenerCallback (void* source) { // this is the filter telling us that it's changed, so we'll update our // display of the time, midi message, etc. updateParametersFromFilter(); }
void BigClockEditor::timerCallback() { if (getFilter()->mode==ActualTimeMode || getFilter()->mode==PluginTimeMode || getFilter()->mode==StopwatchMode) updateParametersFromFilter(); }
void BigClockEditor::buttonStateChanged (Button* buttonThatWasClicked) { if (buttonThatWasClicked->isDown()) { ModifierKeys mousebutton = ModifierKeys::getCurrentModifiers(); if (mousebutton.isPopupMenu()) { bool samplemode = getFilter()->getParameter(kSamples)>=0.5f; PopupMenu m, sub1,sub2,sub3,sub4,clockmode; sub1.addCustomItem (-1, colourSelector, 300, 300, false); m.addSubMenu (L"Color", sub1); m.addSeparator(); clockmode.addItem(100,"Host Timeline",true,getFilter()->mode == HostTimeMode); clockmode.addItem(101,"Recording Time",true,getFilter()->mode == RecTimeMode); clockmode.addItem(102,"Stopwatch",true,getFilter()->mode == StopwatchMode); clockmode.addItem(103,"Plugin Time",true,getFilter()->mode == PluginTimeMode); clockmode.addItem(104,"Actual Time",true,getFilter()->mode == ActualTimeMode); m.addSubMenu("Clock Mode",clockmode); m.addItem(120,"Reset",getFilter()->mode != HostTimeMode && getFilter()->mode != ActualTimeMode); m.addSeparator(); sub4.addItem(998,L"Show Cues",true,showtextbox); sub4.addItem(996,L"Import..."); sub4.addItem(997,L"Export...",getFilter()->cues.size()>0); sub4.addItem(999,L"Clear",getFilter()->cues.size()>0); for (int i=0;i<getFilter()->cues.size();i++) { sub4.addItem(1000+i, getFilter()->ppqToString(getFilter()->cues[i]->ppq, getFilter()->lastPosInfo.timeSigNumerator, getFilter()->lastPosInfo.timeSigDenominator, getFilter()->lastPosInfo.bpm,barsbeats) + " - " + getFilter()->cues[i]->text,true,getFilter()->cues[i]->enabled); } m.addSubMenu (L"Cues", sub4, getFilter()->mode==HostTimeMode); m.addSeparator(); m.addItem (3, L"Bars|Beats|Ticks", true, barsbeats && !samplemode); float ppqn = getFilter()->getParameter(kTicks); sub2.addItem(30,L"hide ticks",true,ppqn==1.0); sub2.addItem(31,L"4",true,ppqn<1.0 && ppqn>=0.9); sub2.addItem(32,L"16",true,ppqn<0.9 && ppqn>=0.8); sub2.addItem(33,L"48",true,ppqn<0.8 && ppqn>=0.7); sub2.addItem(34,L"96",true,ppqn<0.7 && ppqn>=0.65); sub2.addItem(35,L"100",true,ppqn<0.65 && ppqn>=0.6); sub2.addItem(36,L"120",true,ppqn<0.6 && ppqn>=0.5); sub2.addItem(37,L"192",true,ppqn<0.5 && ppqn>=0.4); sub2.addItem(38,L"240",true,ppqn<0.4 && ppqn>=0.3); sub2.addItem(39,L"384",true,ppqn<0.3 && ppqn>=0.2); sub2.addItem(40,L"480",true,ppqn<0.2 && ppqn>=0.1); sub2.addItem(41,L"768",true,ppqn<0.1 && ppqn>0.0); sub2.addItem(42,L"960",true,ppqn==0.0); m.addSubMenu (L"Ticks per beat", sub2,barsbeats && !samplemode); m.addSeparator(); m.addItem (4, L"Hour:Min:Sec", true, !barsbeats && !samplemode); float fps = getFilter()->getParameter(kFrames); sub3.addItem(50,L"ms (1000)",true,fps==0.0); sub3.addItem(51,L"120",true,fps==1.0); sub3.addItem(52,L"100",true,fps<1.0 && fps>=0.9); sub3.addItem(53,L"75",true,fps<0.9 && fps>=0.8); sub3.addItem(54,L"60",true,fps<0.8 && fps>=0.7); sub3.addItem(55,L"50",true,fps<0.7 && fps>=0.6); sub3.addItem(56,L"30",true,fps<0.6 && fps>=0.5); sub3.addItem(61,L"29.97 drop",true,fps<0.5 && fps>=0.4); sub3.addItem(57,L"25",true,fps<0.4 && fps>=0.3); sub3.addItem(58,L"24",true,fps<0.3 && fps>=0.2); sub3.addItem(59,L"15",true,fps<0.2 && fps>=0.1); sub3.addItem(60,L"10",true,fps<0.1 && fps>0.0); m.addSubMenu (L"Frames per second", sub3, !barsbeats && !samplemode); m.addItem (1, L"Show ms/frames", !barsbeats && !samplemode, getFilter()->getParameter(kShowms)>=0.5); m.addItem (6, L"Show subframes", !barsbeats && !samplemode && getFilter()->getParameter(kShowms)>=0.5, getFilter()->getParameter(kShowsubfr)>=0.5); m.addItem (2, L"Show hours", !barsbeats && !samplemode, getFilter()->getParameter(kShowhrs)>=0.5); m.addSeparator(); m.addItem (5, L"Samples", true, samplemode); int result = m.show(); if (result > 0) { if (result==1) { if (getFilter()->getParameter(kShowms)>=0.5) getFilter()->setParameter(kShowms,0.0); else getFilter()->setParameter(kShowms,1.0); } else if (result==2) { if (getFilter()->getParameter(kShowhrs)>=0.5f) getFilter()->setParameter(kShowhrs,0.0f); else getFilter()->setParameter(kShowhrs,1.0f); } else if (result==3) { if (barsbeats && !samplemode) { } else { getFilter()->setParameter(kBarsBeats,1.0f); getFilter()->setParameter(kSamples,0.0f); } } else if (result>=30 && result<50) { if (result==30) getFilter()->setParameter(kTicks,1.0f); else if (result==31) getFilter()->setParameter(kTicks,0.91f); else if (result==32) getFilter()->setParameter(kTicks,0.81f); else if (result==33) getFilter()->setParameter(kTicks,0.71f); else if (result==34) getFilter()->setParameter(kTicks,0.65f); else if (result==35) getFilter()->setParameter(kTicks,0.61f); else if (result==36) getFilter()->setParameter(kTicks,0.51f); else if (result==37) getFilter()->setParameter(kTicks,0.41f); else if (result==38) getFilter()->setParameter(kTicks,0.31f); else if (result==39) getFilter()->setParameter(kTicks,0.21f); else if (result==40) getFilter()->setParameter(kTicks,0.11f); else if (result==41) getFilter()->setParameter(kTicks,0.051f); else if (result==42) getFilter()->setParameter(kTicks,0.0f); } else if (result==4) { if (!barsbeats && !samplemode) { } else { getFilter()->setParameter(kBarsBeats,0.0f); getFilter()->setParameter(kSamples,0.0f); } } else if (result>=50 && result<70) { if (result==50) getFilter()->setParameter(kFrames,0.0f); else if (result==51) getFilter()->setParameter(kFrames,1.0f); else if (result==52) getFilter()->setParameter(kFrames,0.9f); else if (result==53) getFilter()->setParameter(kFrames,0.8f); else if (result==54) getFilter()->setParameter(kFrames,0.7f); else if (result==55) getFilter()->setParameter(kFrames,0.6f); else if (result==56) getFilter()->setParameter(kFrames,0.5f); else if (result==61) getFilter()->setParameter(kFrames,0.4f); else if (result==57) getFilter()->setParameter(kFrames,0.3f); else if (result==58) getFilter()->setParameter(kFrames,0.2f); else if (result==59) getFilter()->setParameter(kFrames,0.1f); else if (result==60) getFilter()->setParameter(kFrames,0.05f); } else if (result==5) { if (!samplemode) getFilter()->setParameter(kSamples,1.0f); } else if (result==6) { getFilter()->setParameter(kShowsubfr,getFilter()->getParameter(kShowsubfr)>=0.5f?0.0f:1.0f); } else if (result==100) { getFilter()->setParameter(kClockMode,0.f); } else if (result==101) { getFilter()->setParameter(kClockMode,1.f/(float)(numModes-1)); } else if (result==102) { getFilter()->setParameter(kClockMode,2.f/(float)(numModes-1)); } else if (result==103) { getFilter()->setParameter(kClockMode,3.f/(float)(numModes-1)); } else if (result==104) { getFilter()->setParameter(kClockMode,4.f/(float)(numModes-1)); } else if (result==120) { if (getFilter()->mode==StopwatchMode) getFilter()->setParameter(kClearWatch,1.f); else if (getFilter()->mode==RecTimeMode) getFilter()->rectime=0; else if (getFilter()->mode==PluginTimeMode) getFilter()->plugintime=Time::getMillisecondCounter(); } else if (result==998) { getFilter()->showcues=!showtextbox; updateParametersFromFilter(); resized(); repaint(); } else if (result==996) { FileChooser myChooser ("Import cue file...", File(getFilter()->getCurrentPath()), "*.xml"); if (myChooser.browseForFileToOpen()) { File file (myChooser.getResult()); getFilter()->loadCues(file); } } else if (result==997) { FileChooser myChooser ("Export cue file...", File(getFilter()->getCurrentPath() + File::separatorString + "cues.xml")); if (myChooser.browseForFileToSave(true)) { File cuefile (myChooser.getResult()); if (!cuefile.hasFileExtension("xml")) cuefile = cuefile.withFileExtension("xml"); getFilter()->saveCues(cuefile); } } else if (result==999) { getFilter()->cues.clear(); cueLabel->setText(String::empty,false); } else if (result>=1000) { getFilter()->setCueEnabled(result-1000,!(getFilter()->cues[result-1000]->enabled)); updateParametersFromFilter(); } } } } }
VexEditorComponent::VexEditorComponent (VexFilter* const ownerFilter) : AudioProcessorEditor(ownerFilter) { //Comboboxes, wave selection addAndMakeVisible (comboBox = new ComboBox (String::empty)); comboBox->setEditableText (false); comboBox->setJustificationType (Justification::centredLeft); comboBox->setTextWhenNothingSelected (String(T("silent"))); comboBox->setTextWhenNoChoicesAvailable (String(T("silent"))); comboBox->addListener (this); comboBox->setColour(ComboBox::backgroundColourId, Colours::black); comboBox->setColour(ComboBox::textColourId, Colours::lightgrey); comboBox->setColour(ComboBox::outlineColourId, Colours::grey); comboBox->setColour(ComboBox::buttonColourId, Colours::grey); comboBox->setWantsKeyboardFocus(false); comboBox->setLookAndFeel(&mlaf); addAndMakeVisible (comboBox2 = new ComboBox (String::empty)); comboBox2->setEditableText (false); comboBox2->setJustificationType (Justification::centredLeft); comboBox2->setTextWhenNothingSelected (String(T("silent"))); comboBox2->setTextWhenNoChoicesAvailable (String(T("silent"))); comboBox2->addListener (this); comboBox2->setColour(ComboBox::backgroundColourId, Colours::black); comboBox2->setColour(ComboBox::textColourId, Colours::lightgrey); comboBox2->setColour(ComboBox::outlineColourId, Colours::grey); comboBox2->setColour(ComboBox::buttonColourId, Colours::grey); comboBox2->setWantsKeyboardFocus(false); comboBox2->setLookAndFeel(&mlaf); addAndMakeVisible (comboBox3 = new ComboBox (String::empty)); comboBox3->setEditableText (false); comboBox3->setJustificationType (Justification::centredLeft); comboBox3->setTextWhenNothingSelected (String(T("silent"))); comboBox3->setTextWhenNoChoicesAvailable (String(T("silent"))); comboBox3->addListener (this); comboBox3->setColour(ComboBox::backgroundColourId, Colours::black); comboBox3->setColour(ComboBox::textColourId, Colours::lightgrey); comboBox3->setColour(ComboBox::outlineColourId, Colours::grey); comboBox3->setColour(ComboBox::buttonColourId, Colours::grey); comboBox3->setWantsKeyboardFocus(false); comboBox3->setLookAndFeel(&mlaf); #if 0 File location = (File::getSpecialLocation(File::userHomeDirectory)).getChildFile(".vex"); if (! location.exists ()) location.createDirectory (); DBG (location.getFullPathName()); String filePath = location.getFullPathName(); DirectoryIterator iter (File(filePath), true, "*.raw"); int i = 1; while (iter.next()) { File theFile(iter.getFile()); if (theFile.hasFileExtension (T("raw"))) { i++; comboBox->addItem (theFile.getFileNameWithoutExtension(), i); comboBox2->addItem (theFile.getFileNameWithoutExtension(), i); comboBox3->addItem (theFile.getFileNameWithoutExtension(), i); } } #endif int tableSize = waveRenderer::getWaveTableSize (); for (int i = 0; i < tableSize; i++) { String tableName (waveRenderer::getWaveTableName (i)); comboBox->addItem (tableName, i + 1); comboBox2->addItem (tableName, i + 1); comboBox3->addItem (tableName, i + 1); } //Make sliders for (int i = 0; i < 89; i++) { addAndMakeVisible (sliders[i] = new SnappingSlider (T("s"))); sliders[i]->setSliderStyle(Slider::RotaryVerticalDrag); sliders[i]->setRange (0, 1, 0); sliders[i]->setSnap(0.0f, 0.0f); sliders[i]->setLookAndFeel(&mlaf); sliders[i]->addListener (this); } //Adjust the center of some sliders[1]->setRange (0, 1, 0.25f); sliders[1]->setSnap(0.5f, 0.05f); sliders[2]->setSnap(0.5f, 0.05f); sliders[3]->setSnap(0.5f, 0.05f); sliders[4]->setSnap(0.5f, 0.05f); sliders[8]->setSnap(0.5f, 0.05f); sliders[13]->setSnap(0.5f, 0.05f); sliders[18]->setSnap(0.5f, 0.05f); int tmp = 24; sliders[1 + tmp]->setRange (0, 1, 0.25f); sliders[1 + tmp]->setSnap(0.5f, 0.05f); sliders[2 + tmp]->setSnap(0.5f, 0.05f); sliders[3 + tmp]->setSnap(0.5f, 0.05f); sliders[4 + tmp]->setSnap(0.5f, 0.05f); sliders[8 + tmp]->setSnap(0.5f, 0.05f); sliders[13 + tmp]->setSnap(0.5f, 0.05f); sliders[18 + tmp]->setSnap(0.5f, 0.05f); tmp = 48; sliders[1 + tmp]->setRange (0, 1, 0.25f); sliders[1 + tmp]->setSnap(0.5f, 0.05f); sliders[2 + tmp]->setSnap(0.5f, 0.05f); sliders[3 + tmp]->setSnap(0.5f, 0.05f); sliders[4 + tmp]->setSnap(0.5f, 0.05f); sliders[8 + tmp]->setSnap(0.5f, 0.05f); sliders[13 + tmp]->setSnap(0.5f, 0.05f); sliders[18 + tmp]->setSnap(0.5f, 0.05f); sliders[83]->setSnap(0.5f, 0.05f); sliders[84]->setSnap(0.5f, 0.05f); sliders[85]->setSnap(0.5f, 0.05f); sliders[75]->setSnap(0.0f, 0.05f); sliders[78]->setSnap(0.0f, 0.05f); sliders[82]->setSnap(0.0f, 0.05f); //PART ON/OFF addAndMakeVisible (TB = new TextButton (T("new button"))); TB->setButtonText (String::empty); TB->addButtonListener (this); TB->setColour (TextButton::buttonColourId, Colours::darkred.withAlpha(0.5f)); TB->setColour(TextButton::buttonOnColourId, Colours::red); TB->setClickingTogglesState(true); TB->setToggleState(false,false); addAndMakeVisible (TB2 = new TextButton (T("new button"))); TB2->setButtonText (String::empty); TB2->addButtonListener (this); TB2->setColour (TextButton::buttonColourId, Colours::darkred.withAlpha(0.5f)); TB2->setColour(TextButton::buttonOnColourId, Colours::red); TB2->setClickingTogglesState(true); TB2->setToggleState(false,false); addAndMakeVisible (TB3 = new TextButton (T("new button"))); TB3->setButtonText (String::empty); TB3->addButtonListener (this); TB3->setColour (TextButton::buttonColourId, Colours::darkred.withAlpha(0.5f)); TB3->setColour(TextButton::buttonOnColourId, Colours::red); TB3->setClickingTogglesState(true); TB3->setToggleState(false,false); //Peggy ON/OFF addAndMakeVisible (TB4 = new TextButton (T("new button"))); TB4->setButtonText (String::empty); TB4->addButtonListener (this); TB4->setColour (TextButton::buttonColourId, Colours::darkblue.withAlpha(0.5f)); TB4->setColour(TextButton::buttonOnColourId, Colours::blue); TB4->setClickingTogglesState(true); TB4->setToggleState(false,false); addAndMakeVisible (TB5 = new TextButton (T("new button"))); TB5->setButtonText (String::empty); TB5->addButtonListener (this); TB5->setColour (TextButton::buttonColourId, Colours::darkblue.withAlpha(0.5f)); TB5->setColour(TextButton::buttonOnColourId, Colours::blue); TB5->setClickingTogglesState(true); TB5->setToggleState(false,false); addAndMakeVisible (TB6 = new TextButton (T("new button"))); TB6->setButtonText (String::empty); TB6->addButtonListener (this); TB6->setColour (TextButton::buttonColourId, Colours::darkblue.withAlpha(0.5f)); TB6->setColour(TextButton::buttonOnColourId, Colours::blue); TB6->setClickingTogglesState(true); TB6->setToggleState(false,false); addChildComponent(p1 = new PeggyViewComponent(ownerFilter, 1)); p1->setLookAndFeel(&mlaf); addChildComponent(p2 = new PeggyViewComponent(ownerFilter, 2)); p2->setLookAndFeel(&mlaf); addChildComponent(p3 = new PeggyViewComponent(ownerFilter, 3)); p3->setLookAndFeel(&mlaf); internalCachedImage1 = ImageCache::getFromMemory (Resources::vex3_png, Resources::vex3_pngSize); ownerFilter->addChangeListener (this); setSize(800,500); updateParametersFromFilter(true);
void VexEditorComponent::changeListenerCallback (void* source) { updateParametersFromFilter(true);
void CpuRamEditor::timerCallback() { updateParametersFromFilter(); }
//============================================================================== void MidiChsEditor::changeListenerCallback (ChangeBroadcaster* source) { // this is the filter telling us that it's changed, so we'll update our // display of the time, midi message, etc. updateParametersFromFilter(); }