X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fmidi_streamview.h;h=aceb59e69f284757da89338b97af820b49af5797;hb=718b2eab6706f304e398f036e3d817567cd746e8;hp=2780cfa3da3e1473a8645ee059d675dce2b99737;hpb=e0aaed6d65f160c328cb8b56d7c6552ee15d65e2;p=ardour.git diff --git a/gtk2_ardour/midi_streamview.h b/gtk2_ardour/midi_streamview.h index 2780cfa3da..aceb59e69f 100644 --- a/gtk2_ardour/midi_streamview.h +++ b/gtk2_ardour/midi_streamview.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2001, 2006 Paul Davis + Copyright (C) 2001, 2006 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 @@ -35,7 +35,6 @@ namespace Gdk { namespace ARDOUR { class Route; - class Diskstream; class Crossfade; class PeakData; class MidiRegion; @@ -58,8 +57,7 @@ class MidiStreamView : public StreamView ~MidiStreamView (); void set_selected_regionviews (RegionSelection&); - void get_selectables (jack_nframes_t start, jack_nframes_t end, list&); - void get_inverted_selectables (Selection&, list& results); + void get_inverted_selectables (Selection&, std::list& results); enum VisibleNoteRange { FullRange, @@ -73,61 +71,57 @@ class MidiStreamView : public StreamView inline uint8_t lowest_note() const { return _lowest_note; } inline uint8_t highest_note() const { return _highest_note; } - + void update_note_range(uint8_t note_num); - - void redisplay_diskstream (); - + + void redisplay_track (); + inline double contents_height() const - { return (_trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2); } - + { return (child_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2); } + inline double note_to_y(uint8_t note) const { return contents_height() - (note + 1 - lowest_note()) * note_height() + 1; } - - inline uint8_t y_to_note(double y) const - { return (uint8_t)((contents_height() - y - 1) - / contents_height() * (double)contents_note_range()) - + lowest_note(); } - + + uint8_t y_to_note(double y) const; + inline double note_height() const { return contents_height() / (double)contents_note_range(); } - + inline uint8_t contents_note_range() const { return highest_note() - lowest_note() + 1; } - + sigc::signal NoteRangeChanged; + RegionView* create_region_view (boost::shared_ptr, bool, bool); + + void apply_note_range(uint8_t lowest, uint8_t highest, bool to_region_views); + + void suspend_updates (); + void resume_updates (); + private: void setup_rec_box (); + void update_rec_box (); - void rec_data_range_ready ( - jack_nframes_t start, - jack_nframes_t dur, - boost::weak_ptr src); - - void update_rec_regions ( - boost::shared_ptr data, - jack_nframes_t start, - jack_nframes_t dur); - RegionView* add_region_view_internal ( - boost::shared_ptr, - bool wait_for_waves, - bool recording = false); + boost::shared_ptr, + bool wait_for_waves, + bool recording = false); void display_region(MidiRegionView* region_view, bool load_model); - void display_diskstream (boost::shared_ptr ds); - + void display_track (boost::shared_ptr tr); + void update_contents_height (); + void draw_note_lines(); - void apply_note_range(uint8_t lowest, uint8_t highest, bool to_region_views); bool update_data_note_range(uint8_t min, uint8_t max); void update_contents_metrics(boost::shared_ptr r); void color_handler (); void note_range_adjustment_changed(); + void apply_note_range_to_regions (); bool _range_dirty; double _range_sum_cache; @@ -136,6 +130,8 @@ class MidiStreamView : public StreamView uint8_t _data_note_min; ///< in data uint8_t _data_note_max; ///< in data ArdourCanvas::LineSet* _note_lines; + /** true if updates to the note lines and regions are currently suspended */ + bool _updates_suspended; }; #endif /* __ardour_midi_streamview_h__ */