#include "ardour/audioregion.h"
#include "ardour/audiofilesource.h"
#include "ardour/audio_track.h"
+#include "ardour/record_enable_control.h"
#include "ardour/region_factory.h"
#include "ardour/profile.h"
#include "ardour/rc_configuration.h"
#include "tape_region_view.h"
#include "audio_time_axis.h"
#include "region_selection.h"
+#include "region_gain_line.h"
#include "selection.h"
#include "public_editor.h"
-#include "ardour_ui.h"
#include "rgb_macros.h"
#include "gui_thread.h"
+#include "ui_config.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace std;
using namespace ARDOUR;
break;
case Destructive:
region_view = new TapeAudioRegionView (_canvas_group, _trackview, region,
- _samples_per_pixel, region_color);
+ _samples_per_pixel, region_color);
break;
default:
fatal << string_compose (_("programming error: %1"), "illegal track mode in ::create_region_view()") << endmsg;
region_views.push_front (region_view);
- if (_trackview.editor().internal_editing()) {
- region_view->hide_rect ();
- } else {
- region_view->show_rect ();
- }
-
/* catch region going away */
r->DropReferences.connect (*this, invalidator (*this), boost::bind (&AudioStreamView::remove_region_view, this, boost::weak_ptr<Region> (r)), gui_context());
{
//cerr << _trackview.name() << " streamview SRB region_views.size() = " << region_views.size() << endl;
- if (_trackview.session()->transport_rolling()) {
+ if (!_trackview.session()->transport_stopped()) {
// cerr << "\trolling\n";
if (!rec_active &&
_trackview.session()->record_status() == Session::Recording &&
- _trackview.track()->record_enabled()) {
- if (_trackview.audio_track()->mode() == Normal && Config->get_show_waveforms_while_recording() && rec_regions.size() == rec_rects.size()) {
+ _trackview.track()->rec_enable_control()->get_value()) {
+ if (_trackview.audio_track()->mode() == Normal && UIConfiguration::instance().get_show_waveforms_while_recording() && rec_regions.size() == rec_rects.size()) {
/* add a new region, but don't bother if they set show-waveforms-while-recording mid-record */
// handle multi
- framepos_t start = 0;
+ samplepos_t start = 0;
if (rec_regions.size() > 0) {
start = rec_regions.back().first->start()
- + _trackview.track()->get_captured_frames(rec_regions.size()-1);
+ + _trackview.track()->get_captured_samples(rec_regions.size()-1);
}
PropertyList plist;
boost::dynamic_pointer_cast<AudioRegion>(RegionFactory::create (sources, plist, false)));
assert(region);
- region->set_position (_trackview.session()->transport_frame());
+ region->set_position (_trackview.session()->transport_sample());
rec_regions.push_back (make_pair(region, (RegionView*) 0));
}
/* start a new rec box */
- boost::shared_ptr<AudioTrack> at;
-
- at = _trackview.audio_track(); /* we know what it is already */
- framepos_t const frame_pos = at->current_capture_start ();
- gdouble xstart = _trackview.editor().sample_to_pixel (frame_pos);
- gdouble xend = xstart; /* keeps gcc optimized happy, really set in switch() below */
- uint32_t fill_color;
-
- switch (_trackview.audio_track()->mode()) {
- case Normal:
- case NonLayered:
- xend = xstart;
- fill_color = ARDOUR_UI::config()->color ("recording rect");
- break;
-
- case Destructive:
- xend = xstart + 2;
- fill_color = ARDOUR_UI::config()->color ("recording rect");
- /* make the recording rect translucent to allow
- the user to see the peak data coming in, etc.
- */
- fill_color = UINT_RGBA_CHANGE_A (fill_color, 120);
- break;
- default:
- fatal << string_compose (_("programming error: %1: %2"),
- "AudioStreamView: impossible track mode",
- (int) _trackview.audio_track()->mode()) << endmsg;
- abort(); /*NOTREACHED*/
- }
-
- ArdourCanvas::Rectangle * rec_rect = new ArdourCanvas::TimeRectangle (_canvas_group);
- rec_rect->set_x0 (xstart);
- rec_rect->set_y0 (0);
- rec_rect->set_x1 (xend);
- rec_rect->set_y1 (child_height ());
- rec_rect->set_outline_what (ArdourCanvas::Rectangle::What (0));
- rec_rect->set_outline_color (ARDOUR_UI::config()->color ("time axis frame"));
- rec_rect->set_fill_color (fill_color);
-
- RecBoxInfo recbox;
- recbox.rectangle = rec_rect;
-
- if (rec_rects.empty()) {
- recbox.start = _trackview.session()->record_location ();
- } else {
- recbox.start = _trackview.session()->transport_frame ();
- }
- recbox.length = 0;
+ boost::shared_ptr<AudioTrack> at = _trackview.audio_track();
+ samplepos_t const sample_pos = at->current_capture_start ();
+ double const width = ((at->mode() == Destructive) ? 2 : 0);
- rec_rects.push_back (recbox);
-
- screen_update_connection.disconnect();
- screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (
- sigc::mem_fun (*this, &AudioStreamView::update_rec_box));
- rec_updating = true;
- rec_active = true;
+ create_rec_box(sample_pos, width);
} else if (rec_active &&
- (_trackview.session()->record_status() != Session::Recording ||
- !_trackview.track()->record_enabled())) {
+ (_trackview.session()->record_status() != Session::Recording ||
+ !_trackview.track()->rec_enable_control()->get_value())) {
screen_update_connection.disconnect();
rec_active = false;
rec_updating = false;
}
void
-AudioStreamView::rec_peak_range_ready (framepos_t start, framecnt_t cnt, boost::weak_ptr<Source> weak_src)
+AudioStreamView::rec_peak_range_ready (samplepos_t start, samplecnt_t cnt, boost::weak_ptr<Source> weak_src)
{
ENSURE_GUI_THREAD (*this, &AudioStreamView::rec_peak_range_ready, start, cnt, weak_src)
// this is called from the peak building thread
- if (rec_data_ready_map.size() == 0 || start + cnt > last_rec_data_frame) {
- last_rec_data_frame = start + cnt;
+ if (rec_data_ready_map.size() == 0 || start + cnt > last_rec_data_sample) {
+ last_rec_data_sample = start + cnt;
}
rec_data_ready_map[src] = true;
}
void
-AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt)
+AudioStreamView::update_rec_regions (samplepos_t start, samplecnt_t cnt)
{
- if (!Config->get_show_waveforms_while_recording ()) {
+ if (!UIConfiguration::instance().get_show_waveforms_while_recording ()) {
return;
}
continue;
}
- framecnt_t origlen = region->length();
+ samplecnt_t origlen = region->length();
if (region == rec_regions.back().first && rec_active) {
- if (last_rec_data_frame > region->start()) {
+ if (last_rec_data_sample > region->start()) {
- framecnt_t nlen = last_rec_data_frame - region->start();
+ samplecnt_t nlen = last_rec_data_sample - region->start();
if (nlen != region->length()) {
region->suspend_property_changes ();
- region->set_position (_trackview.track()->get_capture_start_frame(n));
- region->set_length (nlen);
+ /* set non-musical position / length */
+ region->set_position (_trackview.track()->get_capture_start_sample(n));
+ region->set_length (nlen, 0);
region->resume_property_changes ();
if (origlen == 1) {
} else {
- framecnt_t nlen = _trackview.track()->get_captured_frames(n);
+ samplecnt_t nlen = _trackview.track()->get_captured_samples(n);
if (nlen != region->length()) {
if (region->source_length(0) >= region->start() + nlen) {
region->suspend_property_changes ();
- region->set_position (_trackview.track()->get_capture_start_frame(n));
- region->set_length (nlen);
+ region->set_position (_trackview.track()->get_capture_start_sample(n));
+ region->set_length (nlen, 0);
region->resume_property_changes ();
if (origlen == 1) {
{
list<AudioRegionView*> start_hidden;
list<AudioRegionView*> end_hidden;
-
+
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
if (arv) {
- switch (arv->region()->coverage (ar->position(), ar->last_frame())) {
+ switch (arv->region()->coverage (ar->position(), ar->last_sample())) {
case Evoral::OverlapNone:
break;
default:
{
//case cAudioTrackBase:
if (_trackview.is_track()) {
- canvas_rect->set_fill_color (ARDOUR_UI::config()->color ("audio track base"));
+ canvas_rect->set_fill_color (UIConfiguration::instance().color_mod ("audio track base", "audio track base"));
}
//case cAudioBusBase:
if (!_trackview.is_track()) {
- if (Profile->get_sae() && _trackview.route()->is_master()) {
- canvas_rect->set_fill_color (ARDOUR_UI::config()->color ("audio master bus base"));
- } else {
- canvas_rect->set_fill_color (ARDOUR_UI::config()->color ("audio bus base"));
+ canvas_rect->set_fill_color (UIConfiguration::instance().color_mod ("audio bus base", "audio bus base"));
+ }
+}
+
+void
+AudioStreamView::set_selected_points (PointSelection& points)
+{
+ for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
+ AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
+ if (arv && arv->get_gain_line ()) {
+ arv->get_gain_line ()->set_selected_points (points);
}
}
}