Skip to content
Snippets Groups Projects
  • jsiegle's avatar
    ea8c1c90
    Run astyle to make code format more consistent · ea8c1c90
    jsiegle authored
    To run this in the future, install astyle (sudo apt-get install astyle),
    then enter the following from the top-level project directory:
    
    astyle --options=astyle.options --recursive "./Source/*.cpp" "./Source/*.h"
    
    This will convert tabs to 4 spaces and ensure that brackets are on
    their own lines.
    ea8c1c90
    History
    Run astyle to make code format more consistent
    jsiegle authored
    To run this in the future, install astyle (sudo apt-get install astyle),
    then enter the following from the top-level project directory:
    
    astyle --options=astyle.options --recursive "./Source/*.cpp" "./Source/*.h"
    
    This will convert tabs to 4 spaces and ensure that brackets are on
    their own lines.
UIComponent.h 6.88 KiB
/*
    ------------------------------------------------------------------

    This file is part of the Open Ephys GUI
    Copyright (C) 2013 Open Ephys

    ------------------------------------------------------------------

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

#ifndef __UICOMPONENT_H_D97C73CF__
#define __UICOMPONENT_H_D97C73CF__

#include "../../JuceLibraryCode/JuceHeader.h"
#include "InfoLabel.h"
#include "ControlPanel.h"
#include "ProcessorList.h"
#include "EditorViewport.h"
#include "DataViewport.h"
#include "MessageCenter.h"
#include "../Processors/ProcessorGraph.h"
#include "../Audio/AudioComponent.h"
#include "../MainWindow.h"
#include "../Processors/Visualization/OpenGLCanvas.h"

//#include "../OpenGL.h"

class MainWindow;
class ProcessorList;

class EditorViewportButton;

/**

  Creates objects for user interaction.

  The UIComponent is responsible for the layout of the user interface and
  for creating the application's menu bar.

  @see ControlPanel, ProcessorList, EditorViewport, DataViewport,
       MessageCenter

*/

class UIComponent : public Component,
    public ActionBroadcaster,
    public MenuBarModel,
    public ApplicationCommandTarget,
    public DragAndDropContainer // required for
    // drag-and-drop
    // internal components


{
public:
    UIComponent(MainWindow* mainWindow_, ProcessorGraph* pgraph, AudioComponent* audio);
    ~UIComponent();

    /** Returns a pointer to the EditorViewport. */
    EditorViewport* getEditorViewport()
    {
        return editorViewport;
    }

    /** Returns a pointer to the ProcessorList. */
    ProcessorList* getProcessorList()
    {
        return processorList;
    }

    /** Returns a pointer to the DataViewport. */
    DataViewport* getDataViewport()
    {
        return dataViewport;
    }

    /** Returns a pointer to the ProcessorGraph. */
    ProcessorGraph* getProcessorGraph()
    {
        return processorGraph;
    }

    /** Returns a pointer to the ControlPanel. */
    ControlPanel* getControlPanel()
    {
        return controlPanel;
    }

    /** Returns a pointer to the MessageCenter. */
    MessageCenter* getMessageCenter()
    {
        return messageCenter;
    }

    /** Returns a pointer to the UIComponent. */
    UIComponent* getUIComponent()
    {
        return this;
    }

    /** Returns a pointer to the AudioComponent. */
    AudioComponent* getAudioComponent()
    {
        return audio;
    }

    /** Stops the callbacks to the ProcessorGraph which drive data acquisition. */
    void disableCallbacks();

    /** Disables the connection between the DataViewport and the EditorViewport. */
    void disableDataViewport();

    /**
    Called whenever a major change takes place within a child component, in order
    to make sure the UIComponent's other children get resized appropriately. */
    void childComponentChanged();

    /** Returns the names of all the requested menubar drop-down lists (e.g., "File", "Edit", "Help", etc.). */
    StringArray getMenuBarNames();

    /** Adds the commands contained within a given drop-down menu from the menubar. */
    PopupMenu getMenuForIndex(int topLevelMenuIndex, const String& menuName);

    /** Called when a particular menu item is selected. Doesn't do anything yet. */
    void menuItemSelected(int menuItemID, int topLevelMenuIndex);

    /** Doesn't do anything yet. */
    ApplicationCommandTarget* getNextCommandTarget();

    /** Returns a list of commands the application can perform. */
    void getAllCommands(Array <CommandID>& commands);

    /** Returns the info, default keypress, and activation state of all the application's commands. */
    void getCommandInfo(CommandID commandID, ApplicationCommandInfo& result);

    /** Determines what takes place when a given command is executed by the user. */
    bool perform(const InvocationInfo& info);

private:

    ScopedPointer<DataViewport> dataViewport;
    ScopedPointer<EditorViewport> editorViewport;
    ScopedPointer<EditorViewportButton> editorViewportButton;
    ScopedPointer<ProcessorList> processorList;
    ScopedPointer<ControlPanel> controlPanel;
    ScopedPointer<MessageCenter> messageCenter;
    ScopedPointer<InfoLabel> infoLabel;

    /** Pointer to the GUI's MainWindow, which owns the UIComponent. */
    MainWindow* mainWindow;

    /** Allows the application to use tooltips, which are messages
    that appear when the mouse hovers over particular components. */
    TooltipWindow tooltipWindow;

    /** Pointer to the GUI's ProcessorGraph. Owned by the MainWindow. */
    ProcessorGraph* processorGraph;

    /** Pointer to the GUI's AudioComponent. Owned by the MainWindow. */
    AudioComponent* audio;

    /** Resizes all of components inside the UIComponent to fit the new boundaries
    of the MainWindow, or to account for opening/closing events.*/
    void resized();

    /** Contains codes for common user commands to which the application must react.*/
    enum CommandIDs
    {
        openConfiguration 		= 0x2001,
        saveConfiguration		= 0x2002,
        undo					= 0x2003,
        redo 					= 0x2004,
        copySignalChain			= 0x2005,
        pasteSignalChain		= 0x2006,
        clearSignalChain		= 0x2007,
        toggleProcessorList 	= 0x2008,
        toggleSignalChain	    = 0x2009,
        toggleFileInfo			= 0x2010,
        showHelp				= 0x2011
    };

    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UIComponent);

};

/**

  A button used to show/hide the EditorViewport.

  @see UIComponent, EditorViewport

*/

class EditorViewportButton : public Component
{
public:
    EditorViewportButton(UIComponent* ui);
    ~EditorViewportButton();

    /** Returns the open/closed state of the button. */
    bool isOpen()
    {
        return open;
    }

    /** Draws the button. */
    void paint(Graphics& g);

    /** Switches the open/closed state of the button. */
    void toggleState();

    /** Called when a mouse click begins inside the boundaries of the button. Used
    to toggle the button's open/closed state. */
    void mouseDown(const MouseEvent& e);

private:

    UIComponent* UI;
    bool open;

    Font buttonFont;

};

#endif  // __UICOMPONENT_H_D97C73CF__