| 
							- /*
 - 
 - Copyright (C) 2017 Xenakios
 - 
 - This program is free software; you can redistribute it and/or modify
 - it under the terms of version 3 of the GNU General Public License
 - as published by the Free Software Foundation.
 - 
 - 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 (version 3) for more details.
 - 
 - www.gnu.org/licenses
 - 
 - */
 - 
 - #pragma once
 - 
 - #include "../JuceLibraryCode/JuceHeader.h"
 - #include <memory>
 - #include <functional>
 - #include <future>
 - #include "jcdp_envelope.h"
 - 
 - class EnvelopeComponent : public Component, 
 - 	public ChangeListener, 
 - 	public MultiTimer
 - 	//public TooltipClient
 - {
 - public:
 - 	EnvelopeComponent(CriticalSection* cs);
 - 	~EnvelopeComponent();
 - 	void paint(Graphics& g) override;
 - 	void set_envelope(std::shared_ptr<breakpoint_envelope> env, String name = String());
 - 	std::shared_ptr<breakpoint_envelope> get_envelope() { return m_envelope; }
 - 	String get_name() { return m_name; }
 - 	void mouseMove(const MouseEvent& ev) override;
 - 	void mouseDown(const MouseEvent& ev) override;
 - 	void mouseDrag(const MouseEvent& ev) override;
 - 	void mouseUp(const MouseEvent& ev) override;
 - 	bool keyPressed(const KeyPress& ev) override;
 - 	double get_view_start_time() const { return m_view_start_time; }
 - 	double get_view_end_time() const { return m_view_end_time; }
 - 	void set_view_start_time(double t) { m_view_start_time = t; repaint(); }
 - 	void set_view_end_time(double t) { m_view_end_time = t; repaint(); }
 - 	std::function<void(EnvelopeComponent*, Graphics&)> EnvelopeUnderlayDraw;
 - 	std::function<void(EnvelopeComponent*, Graphics&)> EnvelopeOverlayDraw;
 - 	std::function<void(breakpoint_envelope*)> OnEnvelopeEdited;
 - 	std::function<double(double)> YFromNormalized;
 - 	std::function<double(double)> XFromNormalized;
 - 	void changeListenerCallback(ChangeBroadcaster*) override;
 - 	void timerCallback(int id) override;
 - 	//String getTooltip() override;
 - private:
 - 	std::shared_ptr<breakpoint_envelope> m_envelope;
 - 	String m_name;
 - 	Colour m_env_color{ Colours::yellow };
 - 	double m_view_start_time = 0.0;
 - 	double m_view_end_time = 1.0;
 - 	double m_view_start_value = 0.0;
 - 	double m_view_end_value = 1.0;
 - 	int find_hot_envelope_point(double xcor, double ycor);
 - 	int findHotEnvelopeSegment(double xcor, double ycor, bool detectsegment);
 - 	bool m_mouse_down = false;
 - 	int m_node_to_drag = -1;
 - 	std::pair<int, bool> m_segment_drag_info{ -1,false };
 - 	int m_node_that_was_dragged = -1;
 - 	String m_last_tip;
 - 	BubbleMessageComponent m_bubble;
 - 	void show_bubble(int x, int y, const envelope_point &node);
 - 	CriticalSection* m_cs = nullptr;
 - 	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EnvelopeComponent)
 - };
 
 
  |