ardour
midi_streamview.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2001, 2006 Paul Davis
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18 
19 #ifndef __ardour_midi_streamview_h__
20 #define __ardour_midi_streamview_h__
21 
22 #include <list>
23 #include <cmath>
24 
25 #include "ardour/location.h"
26 #include "enums.h"
27 #include "streamview.h"
28 #include "time_axis_view_item.h"
29 #include "route_time_axis.h"
30 
31 namespace Gdk {
32  class Color;
33 }
34 
35 namespace ARDOUR {
36  class Crossfade;
37  class MidiModel;
38  class MidiRegion;
39  class Route;
40  class Source;
41  struct PeakData;
42 }
43 
44 namespace ArdourCanvas {
45  class LineSet;
46 }
47 
48 class PublicEditor;
49 class Selectable;
50 class MidiTimeAxisView;
51 class MidiRegionView;
52 class RegionSelection;
53 class CrossfadeView;
54 class Selection;
55 
56 class MidiStreamView : public StreamView
57 {
58  public:
60  ~MidiStreamView ();
61 
63  void get_inverted_selectables (Selection&, std::list<Selectable* >& results);
64 
68  };
69 
70  Gtk::Adjustment note_range_adjustment;
71  ArdourCanvas::Container* midi_underlay_group;
72 
74 
75  inline uint8_t lowest_note() const { return _lowest_note; }
76  inline uint8_t highest_note() const { return _highest_note; }
77 
78  void update_note_range(uint8_t note_num);
79 
80  void redisplay_track ();
81 
82  inline double contents_height() const
84 
85  inline double note_to_y(uint8_t note) const
86  { return contents_height()
87  - (note + 1 - lowest_note()) * note_height() + 1; }
88 
89  uint8_t y_to_note(double y) const;
90 
91  inline double note_height() const
92  { return contents_height() / (double)contents_note_range(); }
93 
94  inline uint8_t contents_note_range() const
95  { return highest_note() - lowest_note() + 1; }
96 
97  sigc::signal<void> NoteRangeChanged;
98 
100 
101  bool paste (ARDOUR::framepos_t pos, const Selection& selection, PasteContext& ctx);
102 
103  void apply_note_range(uint8_t lowest, uint8_t highest, bool to_region_views);
104 
105  void suspend_updates ();
106  void resume_updates ();
107 
108  protected:
109  void setup_rec_box ();
110  void update_rec_box ();
111 
112  private:
113 
116  bool wait_for_waves,
117  bool recording = false);
118 
119  void display_region(MidiRegionView* region_view, bool load_model);
121 
122  void update_contents_height ();
123 
124  void draw_note_lines();
125  bool update_data_note_range(uint8_t min, uint8_t max);
127 
128  void color_handler ();
129 
132 
135  uint8_t _lowest_note;
136  uint8_t _highest_note;
137  uint8_t _data_note_min;
138  uint8_t _data_note_max;
139  ArdourCanvas::LineSet* _note_lines;
142 };
143 
144 #endif /* __ardour_midi_streamview_h__ */
void display_track(boost::shared_ptr< ARDOUR::Track > tr)
void note_range_adjustment_changed()
void update_contents_height()
bool update_data_note_range(uint8_t min, uint8_t max)
uint8_t _data_note_max
in data
Lists of selected things.
Definition: selection.h:66
void get_inverted_selectables(Selection &, std::list< Selectable * > &results)
Representation of the interface of the Editor class.
RegionView * add_region_view_internal(boost::shared_ptr< ARDOUR::Region >, bool wait_for_waves, bool recording=false)
void set_selected_regionviews(RegionSelection &)
sigc::signal< void > NoteRangeChanged
uint8_t lowest_note() const
uint8_t contents_note_range() const
uint8_t _data_note_min
in data
RegionView * create_region_view(boost::shared_ptr< ARDOUR::Region >, bool, bool)
void update_contents_metrics(boost::shared_ptr< ARDOUR::Region > r)
uint8_t _lowest_note
currently visible
Definition: amp.h:29
void update_note_range(uint8_t note_num)
bool paste(ARDOUR::framepos_t pos, const Selection &selection, PasteContext &ctx)
int64_t framepos_t
Definition: types.h:66
MidiStreamView(MidiTimeAxisView &)
void apply_note_range(uint8_t lowest, uint8_t highest, bool to_region_views)
uint8_t _highest_note
currently visible
double child_height() const
Definition: streamview.cc:613
double note_to_y(uint8_t note) const
double note_height() const
void set_note_range(VisibleNoteRange r)
uint8_t highest_note() const
uint8_t y_to_note(double y) const
void display_region(MidiRegionView *region_view, bool load_model)
ArdourCanvas::LineSet * _note_lines
double contents_height() const
void apply_note_range_to_regions()
Gtk::Adjustment note_range_adjustment
ArdourCanvas::Container * midi_underlay_group
static double NAME_HIGHLIGHT_SIZE