Skip to content
Snippets Groups Projects
  • jsiegle's avatar
    e36119a1
    Change copyright year to 2013 · e36119a1
    jsiegle authored
    Use the following command to update the copyright year in all files,
    starting in the Source/ directory:
    
    find . -type f -print0 | xargs -0
       sed -i 's/Copyright (C) 2012/Copyright (C) 2013/g'
    
    Works like a charm!
    e36119a1
    History
    Change copyright year to 2013
    jsiegle authored
    Use the following command to update the copyright year in all files,
    starting in the Source/ directory:
    
    find . -type f -print0 | xargs -0
       sed -i 's/Copyright (C) 2012/Copyright (C) 2013/g'
    
    Works like a charm!
UIComponent.h 6.53 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__

#ifdef WIN32
#include <Windows.h>
#endif
#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__