X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fghostregion.h;h=e8271a8ad8aa6e947b69c16518198a89a51caf70;hb=05f476875ba5ad01e34b297837d9e3dfb246349c;hp=0ca52a70e69a306da88ab7b6ca9831dbf7527594;hpb=bac3c6bc0f36623e200fe30fc8cc4137ab96fba7;p=ardour.git diff --git a/gtk2_ardour/ghostregion.h b/gtk2_ardour/ghostregion.h index 0ca52a70e6..e8271a8ad8 100644 --- a/gtk2_ardour/ghostregion.h +++ b/gtk2_ardour/ghostregion.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2004 Paul Davis + Copyright (C) 2004 Paul Davis 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 @@ -15,35 +15,96 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_gtk_ghost_region_h__ #define __ardour_gtk_ghost_region_h__ #include -#include -#include -#include "canvas.h" -#include "simplerect.h" +#include "pbd/signals.h" -class AutomationTimeAxisView; +namespace ArdourCanvas { + class WaveView; +} -struct GhostRegion : public sigc::trackable +class NoteBase; +class Note; +class Hit; +class MidiStreamView; +class TimeAxisView; + +class GhostRegion : public sigc::trackable { - AutomationTimeAxisView& trackview; - ArdourCanvas::Group* group; - ArdourCanvas::SimpleRect* base_rect; - std::vector waves; +public: + GhostRegion(ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos); + virtual ~GhostRegion(); + + virtual void set_samples_per_pixel (double) = 0; + virtual void set_height(); + virtual void set_colors(); + + void set_duration(double units); + + guint source_track_color(unsigned char alpha = 0xff); + bool is_automation_ghost(); + + /** TimeAxisView that is the AutomationTimeAxisView that we are on */ + TimeAxisView& trackview; + /** TimeAxisView that we are a ghost for */ + TimeAxisView& source_trackview; + ArdourCanvas::Group* group; + ArdourCanvas::Rectangle* base_rect; + + static PBD::Signal1 CatchDeletion; +}; + +class AudioGhostRegion : public GhostRegion { +public: + AudioGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos); + + void set_samples_per_pixel (double); + void set_height(); + void set_colors(); + + std::vector waves; +}; + +class MidiGhostRegion : public GhostRegion { +public: + class GhostEvent : public sigc::trackable { + public: + GhostEvent(::NoteBase *, ArdourCanvas::Group *); + virtual ~GhostEvent (); + + NoteBase* event; + ArdourCanvas::Rectangle* rect; + }; + + MidiGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos); + MidiGhostRegion(MidiStreamView& msv, TimeAxisView& source_tv, double initial_unit_pos); + ~MidiGhostRegion(); + + MidiStreamView* midi_view(); + + void set_height(); + void set_samples_per_pixel (double spu); + void set_colors(); + + void update_range(); + + void add_note(NoteBase*); + void update_note (NoteBase*); + void remove_note (NoteBase*); + + void clear_events(); - GhostRegion (AutomationTimeAxisView& tv, double initial_unit_pos); - ~GhostRegion (); +private: - void set_samples_per_unit (double spu); - void set_duration (double units); - void set_height (); + MidiGhostRegion::GhostEvent* find_event (NoteBase*); - sigc::signal GoingAway; + typedef std::list EventList; + EventList events; + EventList::iterator _optimization_iterator; }; #endif /* __ardour_gtk_ghost_region_h__ */