diff --git a/Source/Processors/Editors/EventNodeEditor.cpp b/Source/Processors/Editors/EventNodeEditor.cpp index 103d56d9eb23e9e506cb468ca6fff57afe7717f6..36173b5e580869cb128511e388adfd21f23f7e84 100644 --- a/Source/Processors/Editors/EventNodeEditor.cpp +++ b/Source/Processors/Editors/EventNodeEditor.cpp @@ -66,7 +66,7 @@ EventNodeEditor::~EventNodeEditor() // } -void EventNodeEditor::buttonClicked (Button* button) +void EventNodeEditor::buttonEvent (Button* button) { //std::cout << button->getRadioGroupId() << " " << button->getName() << std::endl; String value = button->getName(); diff --git a/Source/Processors/Editors/EventNodeEditor.h b/Source/Processors/Editors/EventNodeEditor.h index a8eada7865534895b34b97c9990ff77c83480055..dc4bc09007c1e61ace467c64e22752b88b97d1f1 100644 --- a/Source/Processors/Editors/EventNodeEditor.h +++ b/Source/Processors/Editors/EventNodeEditor.h @@ -30,13 +30,12 @@ class FilterViewport; -class EventNodeEditor : public GenericEditor//, - // public Button::Listener +class EventNodeEditor : public GenericEditor { public: EventNodeEditor (GenericProcessor* parentNode); virtual ~EventNodeEditor(); - void buttonClicked(Button* button); + void buttonEvent(Button* button); private: diff --git a/Source/Processors/Editors/FilterEditor.cpp b/Source/Processors/Editors/FilterEditor.cpp index e4c84b42fc338c34d87a2fa599a33f706977ba56..449d53126369705554d1c3830ac26358c907ea1e 100644 --- a/Source/Processors/Editors/FilterEditor.cpp +++ b/Source/Processors/Editors/FilterEditor.cpp @@ -75,11 +75,11 @@ FilterEditor::~FilterEditor() // } -void FilterEditor::buttonClicked (Button* button) +void FilterEditor::buttonEvent (Button* button) { //std::cout << button->getRadioGroupId() << " " << button->getName() << std::endl; - if (!checkDrawerButton(button) && !checkChannelSelectors(button)) { + //if (!checkDrawerButton(button) && !checkChannelSelectors(button)) { String value = button->getName(); float val; @@ -102,6 +102,6 @@ void FilterEditor::buttonClicked (Button* button) } //std::cout << button->getRadioGroupId() << " " << val << std::endl; - } + // } } \ No newline at end of file diff --git a/Source/Processors/Editors/FilterEditor.h b/Source/Processors/Editors/FilterEditor.h index ff4f336aeb4d3ddfe089e9a90382434b63302ab6..018e616f6d9d6bef6314d041a05746bf2337ef5f 100644 --- a/Source/Processors/Editors/FilterEditor.h +++ b/Source/Processors/Editors/FilterEditor.h @@ -31,18 +31,13 @@ class FilterViewport; class FilterEditor : public GenericEditor - // public Button::Listener { public: FilterEditor (GenericProcessor* parentNode); virtual ~FilterEditor(); - //void sliderValueChanged (Slider* slider); - void buttonClicked(Button* button); + void buttonEvent(Button* button); private: - //Slider* lowSlider; - //Slider* highSlider; - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FilterEditor); diff --git a/Source/Processors/Editors/GenericEditor.cpp b/Source/Processors/Editors/GenericEditor.cpp index a9c2a9e85fa23810b6b28fb8762debd0c537b691..36b99a670c9c2f9ef46ad34db75050f150dee42d 100644 --- a/Source/Processors/Editors/GenericEditor.cpp +++ b/Source/Processors/Editors/GenericEditor.cpp @@ -265,6 +265,9 @@ void GenericEditor::buttonClicked(Button* button) checkDrawerButton(button); checkChannelSelectors(button); + + buttonEvent(button); // needed to inform subclasses of + // button event } bool GenericEditor::checkDrawerButton(Button* button) @@ -439,6 +442,13 @@ void GenericEditor::update() numChannels = p->getNumInputs(); } + if (numChannels == 0) + { + drawerButton->setVisible(false); + } else { + drawerButton->setVisible(true); + } + updateVisualizer(); // does nothing unless this method // has been implemented diff --git a/Source/Processors/Editors/GenericEditor.h b/Source/Processors/Editors/GenericEditor.h index 0184c5c42f6ef58329262d35700944090fe2f6d5..914305924aca76fe1000a6a6a95dc4bda4fa8523 100644 --- a/Source/Processors/Editors/GenericEditor.h +++ b/Source/Processors/Editors/GenericEditor.h @@ -50,7 +50,8 @@ class ChannelSelectorButton; class GenericEditor : public AudioProcessorEditor, public Timer, public AccessClass, - public Button::Listener + public Button::Listener, + public Slider::Listener { public: @@ -95,6 +96,8 @@ public: float accumulator; virtual void buttonClicked(Button* button); + virtual void buttonEvent(Button* button) {} + virtual void sliderValueChanged(Slider* slider) {} bool checkDrawerButton(Button* button); bool checkChannelSelectors(Button* button); diff --git a/Source/Processors/Editors/LfpDisplayEditor.cpp b/Source/Processors/Editors/LfpDisplayEditor.cpp index 1d818d1c4fddcd5934432b5406514606cb74b401..2a00d5c674f48743ccd0a5fc466de865f29200bd 100644 --- a/Source/Processors/Editors/LfpDisplayEditor.cpp +++ b/Source/Processors/Editors/LfpDisplayEditor.cpp @@ -56,7 +56,6 @@ SelectorButton::~SelectorButton() LfpDisplayEditor::LfpDisplayEditor (GenericProcessor* parentNode) : GenericEditor(parentNode), tabIndex(-1), dataWindow(0), - //streamBuffer(0), eventBuffer(0), canvas(0), isPlaying(false), canvas(0) @@ -80,45 +79,20 @@ LfpDisplayEditor::LfpDisplayEditor (GenericProcessor* parentNode) createRadioButtons(35, 90, 160, displayGainValues, "Display Gain"); - // for (int n = 0; n < getNumChildComponents(); n++) - // { - // Button* c = (Button*) getChildComponent(n); - - // if (c->isVisible()) - // c->addListener(this); - - // if (c->getRadioGroupId() != 999) - // c->setVisible(true); - // } - - // timebaseSlider = new Slider (T("Time Base Slider")); - // timebaseSlider->setBounds(60,20,200,40); - // timebaseSlider->setRange(500,10000,500); - // timebaseSlider->addListener(this); - // addAndMakeVisible(timebaseSlider); + windowSelector = new SelectorButton(); + windowSelector->addListener(this); + windowSelector->setBounds(190,10,10,10); - // displayGainSlider = new Slider (T("Display Gain Slider")); - // displayGainSlider->setBounds(60,65,200,40); - // displayGainSlider->setRange(1,8,1); - // displayGainSlider->addListener(this); - // addAndMakeVisible(displayGainSlider); - - // windowSelector = new SelectorButton(); - // windowSelector->addListener(this); - // windowSelector->setBounds(25,25,20,20); - // windowSelector->setToggleState(false,false); - // addAndMakeVisible(windowSelector); + windowSelector->setToggleState(false,false); + addAndMakeVisible(windowSelector); tabSelector = new SelectorButton(); tabSelector->addListener(this); - tabSelector->setBounds(205,30,10,10); + tabSelector->setBounds(205,10,10,10); addAndMakeVisible(tabSelector); tabSelector->setToggleState(false,false); - //canvas = new LfpDisplayCanvas((LfpDisplayNode*) getProcessor()); - - } LfpDisplayEditor::~LfpDisplayEditor() @@ -169,10 +143,19 @@ void LfpDisplayEditor::setBuffers(AudioSampleBuffer* asb, MidiBuffer* mb) //std::cout << eventBuffer << std::endl; } -void LfpDisplayEditor::buttonClicked(Button* button) +LfpDisplayCanvas* LfpDisplayEditor::createNewCanvas() { - if (!checkDrawerButton(button) && !checkChannelSelectors(button)) { + + LfpDisplayNode* processor = (LfpDisplayNode*) getProcessor(); + return new LfpDisplayCanvas(processor); + +} + +void LfpDisplayEditor::buttonEvent(Button* button) +{ + + //if (!checkDrawerButton(button) && !checkChannelSelectors(button)) { int gId = button->getRadioGroupId(); @@ -184,93 +167,70 @@ void LfpDisplayEditor::buttonClicked(Button* button) } else { - if (canvas == 0) { - - LfpDisplayNode* processor = (LfpDisplayNode*) getProcessor(); - canvas = new LfpDisplayCanvas(processor); - - if (isPlaying) - canvas->beginAnimation(); - } - - // if (button == windowSelector) - // { - // if (dataWindow == 0) { - - // dataWindow = new DataWindow(windowSelector); - - // //if (canvas == 0) - // // canvas = new LfpDisplayCanvas((LfpDisplayNode*) getProcessor()); - - // //dataWindow->setContentComponent(new LfpDisplayCanvas(streamBuffer,eventBuffer,getConfiguration(), this)); - - // if (tabSelector->getToggleState()) - // { - // tabSelector->setToggleState(false, false); - // dataViewport->removeTab(tabIndex); - // tabIndex = -1; - // } - - // //LfpDisplayNode* p = (LfpDisplayNode*) getProcessor(); - - // dataWindow->setContentNonOwned(canvas, false); - // //p->isVisible = true; - - // //getProcessor()->parentComponentChanged(); - // dataWindow->setVisible(true); + if (canvas == 0) { - // } else { + canvas = createNewCanvas(); - // if (tabSelector->getToggleState()) - // { - // tabSelector->setToggleState(false, false); - // dataViewport->removeTab(tabIndex); - // tabIndex = -1; - // } + if (isPlaying) + canvas->beginAnimation(); + } - // dataWindow->setVisible(windowSelector->getToggleState()); + if (button == windowSelector) + { + + if (tabSelector->getToggleState() && windowSelector->getToggleState()) + { + tabSelector->setToggleState(false, false); + getDataViewport()->destroyTab(tabIndex); + tabIndex = -1; + } - // //LfpDisplayNode* p = (LfpDisplayNode*) getProcessor(); - // //p->isVisible = windowSelector->getToggleState(); - // //getProcessor()->parentComponentChanged(); - // } + if (dataWindow == 0) { - // } else - if (button == tabSelector) + dataWindow = new DataWindow(windowSelector); + dataWindow->setContentNonOwned(canvas, false); + dataWindow->setVisible(true); + canvas->refreshState(); + + } else { + + dataWindow->setVisible(windowSelector->getToggleState()); + + if (windowSelector->getToggleState()) + { + dataWindow->setContentNonOwned(canvas, false); + canvas->refreshState(); + } else { + dataWindow->setContentNonOwned(0, false); + } + + } + + } + else if (button == tabSelector) { if (tabSelector->getToggleState() && tabIndex < 0) { - //std::cout << "Editor data viewport: " << dataViewport << std::endl; - - // if (windowSelector->getToggleState()) - // { - // windowSelector->setToggleState(false, false); - // dataWindow->setVisible(false); - // } - - //tabIndex = dataViewport->addTabToDataViewport("LFP",new LfpDisplayCanvas(streamBuffer,eventBuffer,getConfiguration(), this)); - //Component* p = (Component*) getProcessor(); + if (windowSelector->getToggleState()) + { + dataWindow->setContentNonOwned(0, false); + windowSelector->setToggleState(false, false); + dataWindow->setVisible(false); + } - //LfpDisplayNode* p = (LfpDisplayNode*) getProcessor(); tabIndex = getDataViewport()->addTabToDataViewport("LFP",canvas); - //if (isPlaying) - ///{ - // canvas->beginAnimation(); - //} - //p->isVisible = true; } else if (!tabSelector->getToggleState() && tabIndex > -1) { - getDataViewport()->removeTab(tabIndex); + getDataViewport()->destroyTab(tabIndex); tabIndex = -1; - //LfpDisplayNode* p = (LfpDisplayNode*) getProcessor(); - //p->isVisible = false; + } } } - } + } void LfpDisplayEditor::sliderValueChanged (Slider* slider) diff --git a/Source/Processors/Editors/LfpDisplayEditor.h b/Source/Processors/Editors/LfpDisplayEditor.h index 935316a5e966ffe7eaa0e4824323ec47f536fe78..810e954ab44573ce4cfb4d46ce7036efe5bc8a8e 100644 --- a/Source/Processors/Editors/LfpDisplayEditor.h +++ b/Source/Processors/Editors/LfpDisplayEditor.h @@ -36,6 +36,7 @@ //class DataViewport; class DataWindow; class LfpDisplayCanvas; +class OpenGLCanvas; class SelectorButton : public DrawableButton { @@ -44,16 +45,17 @@ class SelectorButton : public DrawableButton ~SelectorButton(); }; -class LfpDisplayEditor : public GenericEditor,//, - // public Button::Listener, - public Slider::Listener +class LfpDisplayEditor : public GenericEditor { public: LfpDisplayEditor (GenericProcessor*); ~LfpDisplayEditor(); - void buttonClicked (Button* button); + void buttonEvent (Button* button); void setBuffers (AudioSampleBuffer*, MidiBuffer*); + + LfpDisplayCanvas* createNewCanvas(); + //void setUIComponent (UIComponent* ui) {UI = ui;} void sliderValueChanged (Slider* slider); diff --git a/Source/Processors/Editors/MergerEditor.cpp b/Source/Processors/Editors/MergerEditor.cpp index fef818681a300807954b877fb935c25ec9eae38a..5c21d4104142a73a9694c153847b98aaf55023ae 100644 --- a/Source/Processors/Editors/MergerEditor.cpp +++ b/Source/Processors/Editors/MergerEditor.cpp @@ -94,7 +94,7 @@ MergerEditor::~MergerEditor() deleteAllChildren(); } -void MergerEditor::buttonClicked(Button* button) +void MergerEditor::buttonEvent(Button* button) { if (button == pipelineSelectorA) { diff --git a/Source/Processors/Editors/MergerEditor.h b/Source/Processors/Editors/MergerEditor.h index 51f9b2b1b78fced1c6275587f80c1ad6fe34598f..889e070f4989ad31488b6b5a085451566b342561 100644 --- a/Source/Processors/Editors/MergerEditor.h +++ b/Source/Processors/Editors/MergerEditor.h @@ -42,7 +42,7 @@ public: MergerEditor (GenericProcessor* parentNode); virtual ~MergerEditor(); - virtual void buttonClicked (Button* button); + virtual void buttonEvent (Button* button); void switchSource(int); void switchSource (); diff --git a/Source/Processors/Editors/SignalGeneratorEditor.h b/Source/Processors/Editors/SignalGeneratorEditor.h index 00aae333669d0607b13662a6e24c8313ad7a42b9..ff4eb1138044d9aeffe56edc7c10180f752c7f6c 100644 --- a/Source/Processors/Editors/SignalGeneratorEditor.h +++ b/Source/Processors/Editors/SignalGeneratorEditor.h @@ -29,8 +29,7 @@ class FilterViewport; -class SignalGeneratorEditor : public GenericEditor, - public Slider::Listener +class SignalGeneratorEditor : public GenericEditor { public: SignalGeneratorEditor (GenericProcessor* parentNode); diff --git a/Source/Processors/Editors/SpikeDetectorEditor.h b/Source/Processors/Editors/SpikeDetectorEditor.h index c181e801f17a1eea7461b078ab12b6baf4d3a5a6..6fb2abb9fce355815e9c6aafaac9fc547c662257 100644 --- a/Source/Processors/Editors/SpikeDetectorEditor.h +++ b/Source/Processors/Editors/SpikeDetectorEditor.h @@ -30,8 +30,8 @@ class FilterViewport; -class SpikeDetectorEditor : public GenericEditor, - public Slider::Listener +class SpikeDetectorEditor : public GenericEditor + { public: SpikeDetectorEditor (GenericProcessor* parentNode); diff --git a/Source/Processors/Editors/SplitterEditor.cpp b/Source/Processors/Editors/SplitterEditor.cpp index e3c11c61aadbdc42629f641c521b2408d8b8875c..e70a8340d8dacb3aa3bbbfe9d70fdd095fc0ab5e 100644 --- a/Source/Processors/Editors/SplitterEditor.cpp +++ b/Source/Processors/Editors/SplitterEditor.cpp @@ -94,7 +94,7 @@ SplitterEditor::~SplitterEditor() deleteAllChildren(); } -void SplitterEditor::buttonClicked(Button* button) +void SplitterEditor::buttonEvent(Button* button) { if (button == pipelineSelectorA) { diff --git a/Source/Processors/Editors/SplitterEditor.h b/Source/Processors/Editors/SplitterEditor.h index 6869c94ad584a99f683af4bba72d7f13d19c9f56..c3c4741ca909023abf2d83221ba0a2b37a2a3d44 100644 --- a/Source/Processors/Editors/SplitterEditor.h +++ b/Source/Processors/Editors/SplitterEditor.h @@ -35,14 +35,13 @@ // ~PipelineSelectorButton(); // }; -class SplitterEditor : public GenericEditor//, - // public Button::Listener +class SplitterEditor : public GenericEditor { public: SplitterEditor (GenericProcessor* parentNode); virtual ~SplitterEditor(); - void buttonClicked (Button* button); + void buttonEvent (Button* button); void switchDest(int); diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.cpp b/Source/Processors/Visualization/LfpDisplayCanvas.cpp index 2eed8c953f6c37f7cc259d8b84dc156d10ffbf05..ce3dbbfd21b31baf18e7092b87de11dd4ed7da1b 100644 --- a/Source/Processors/Visualization/LfpDisplayCanvas.cpp +++ b/Source/Processors/Visualization/LfpDisplayCanvas.cpp @@ -113,6 +113,8 @@ void LfpDisplayCanvas::refreshState() displayBufferIndex = processor->getDisplayBufferIndex(); screenBufferIndex = 0; + //resized(); + } void LfpDisplayCanvas::updateScreenBuffer() @@ -198,6 +200,10 @@ void LfpDisplayCanvas::updateScreenBuffer() } } +void LfpDisplayCanvas::canvasWasResized() +{ + //std::cout << "Resized!" << std::endl; +} void LfpDisplayCanvas::renderOpenGL() { diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.h b/Source/Processors/Visualization/LfpDisplayCanvas.h index e831c2966147d44e72e690647b54d2324ad1d395..87a918ab383461e8d6b30e8127ac089cf9247af9 100644 --- a/Source/Processors/Visualization/LfpDisplayCanvas.h +++ b/Source/Processors/Visualization/LfpDisplayCanvas.h @@ -84,7 +84,7 @@ private: int getTotalHeight(); - // void resized(); + void canvasWasResized(); void mouseDownInCanvas(const MouseEvent& e); // void mouseDrag(const MouseEvent& e); // void mouseMove(const MouseEvent& e); diff --git a/Source/UI/DataViewport.cpp b/Source/UI/DataViewport.cpp index c4c0a1bae57a092dbbafd4f3570a09a75939ebbc..f580e271cf8764cbc2895169757f5aad1caadc21 100644 --- a/Source/UI/DataViewport.cpp +++ b/Source/UI/DataViewport.cpp @@ -63,14 +63,20 @@ DataViewport::~DataViewport() } - void DataViewport::removeTab(int index) { + void DataViewport::destroyTab(int index) { - int newIndex = tabArray->indexOf(index); - tabArray->remove(newIndex); + int newIndex = tabArray->indexOf(index); - getTabbedButtonBar().removeTab(newIndex); + Component* canvas = getTabContentComponent(newIndex); + Component* parent = canvas->getParentComponent(); + parent->removeChildComponent(canvas); - if (tabArray->size() == 0) + tabArray->remove(newIndex); + + removeTab(newIndex); + //getTabbedButtonBar().removeTab(newIndex); + + if (tabArray->size() == 0) setVisible(false); } @@ -79,8 +85,9 @@ DataViewport::~DataViewport() { OpenGLCanvas* canvas = (OpenGLCanvas*) getTabContentComponent(newIndex); - if (canvas != 0) + if (canvas != 0) { canvas->refreshState(); + } } void DataViewport::paint(Graphics& g) diff --git a/Source/UI/DataViewport.h b/Source/UI/DataViewport.h index 3b590ea32439f0b5689cba1de7b788caef387525..03361495ce820fdc0b8cfd0016bc6c25790f5244 100644 --- a/Source/UI/DataViewport.h +++ b/Source/UI/DataViewport.h @@ -49,7 +49,7 @@ public: int addTabToDataViewport(String tabName, Component* componentToAdd); /** Removes a tab with a specified index.*/ - void removeTab(int); + void destroyTab(int); /** Informs the component of the current tab that it's now active.*/ void currentTabChanged(int newIndex, const String& newTabName); diff --git a/Source/UI/EditorViewport.cpp b/Source/UI/EditorViewport.cpp index 4573e8d00244d46a045d32f47285190fd616a065..d8e7595607cb051d58a48b6b72242ba373fe8ded 100644 --- a/Source/UI/EditorViewport.cpp +++ b/Source/UI/EditorViewport.cpp @@ -28,9 +28,9 @@ EditorViewport::EditorViewport() : message ("Drag-and-drop some rows from the top-left box onto this component!"), - somethingIsBeingDraggedOver (false), shiftDown(false), leftmostEditor(0), + somethingIsBeingDraggedOver(false), shiftDown(false), leftmostEditor(0), insertionPoint(0), componentWantsToMove(false), indexOfMovingComponent(-1), - borderSize(6), tabSize(30), tabButtonSize(15), canEdit(true), currentTab(-1)//, signalChainNeedsSource(true) + borderSize(6), tabSize(30), tabButtonSize(15), canEdit(true), currentTab(-1) { addMouseListener(this, true); diff --git a/Source/UI/EditorViewport.h b/Source/UI/EditorViewport.h index 669eee4a4c9bf81a286585925d83f70a88a1eb04..ce01d43a358378870ac2acea1d6c8125cf65e582 100644 --- a/Source/UI/EditorViewport.h +++ b/Source/UI/EditorViewport.h @@ -64,14 +64,11 @@ public: // Creating and deleting editors: void deleteNode(GenericEditor* editor); - // void updateVisibleEditors(GenericEditor* activeEditor, int action); void selectEditor(GenericEditor* e); void makeEditorVisible(GenericEditor* e); void refreshEditors(); - // void setActiveEditor(GenericEditor* e) {activeEditor = e; updateVisibleEditors();} - void signalChainCanBeEdited(bool t); // DragAndDropTarget methods: @@ -104,7 +101,7 @@ public: void checkScrollButtons(int topTab); - int leftmostEditor; + int leftmostEditor; private: @@ -115,9 +112,6 @@ private: bool canEdit; GenericEditor* lastEditor; - //ProcessorGraph* graph; - //DataViewport* tabComponent; - Array<GenericEditor*, CriticalSection> editorArray; Array<SignalChainTabButton*, CriticalSection> signalChainArray; @@ -125,13 +119,9 @@ private: Font font; Image sourceDropImage; - // int activeTab; - - void createNewTab(GenericEditor* editor); void removeTab(int tabIndex); - //void drawTabs(); int borderSize, tabSize, tabButtonSize; @@ -159,7 +149,7 @@ private: class SignalChainTabButton : public Button { public: - SignalChainTabButton();// : Button("Name") {configurationChanged = true;} + SignalChainTabButton(); ~SignalChainTabButton() {} void setEditor(GenericEditor* p) {firstEditor = p;}