diff --git a/gtk2_ardour/audio_region_operations_box.cc b/gtk2_ardour/audio_region_operations_box.cc index a24b75c1bf..dedbdb9d59 100644 --- a/gtk2_ardour/audio_region_operations_box.cc +++ b/gtk2_ardour/audio_region_operations_box.cc @@ -78,12 +78,6 @@ AudioRegionOperationsBox::~AudioRegionOperationsBox () { } -void -AudioRegionOperationsBox::set_session (Session* s) -{ - SessionHandlePtr::set_session (s); -} - void AudioRegionOperationsBox::reverse_button_clicked () { diff --git a/gtk2_ardour/audio_region_operations_box.h b/gtk2_ardour/audio_region_operations_box.h index b0e84d474f..b8fc6241f1 100644 --- a/gtk2_ardour/audio_region_operations_box.h +++ b/gtk2_ardour/audio_region_operations_box.h @@ -38,14 +38,19 @@ namespace ARDOUR { class Location; } -class AudioRegionOperationsBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr +class RegionOperationsBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr +{ +public: + RegionOperationsBox () {} + ~RegionOperationsBox () {} +}; + +class AudioRegionOperationsBox : public RegionOperationsBox { public: AudioRegionOperationsBox (); ~AudioRegionOperationsBox (); - void set_session (ARDOUR::Session*); - PBD::ScopedConnectionList editor_connections; PBD::ScopedConnectionList region_property_connections; diff --git a/gtk2_ardour/audio_region_properties_box.cc b/gtk2_ardour/audio_region_properties_box.cc index 53d912ea1c..788a69ff19 100644 --- a/gtk2_ardour/audio_region_properties_box.cc +++ b/gtk2_ardour/audio_region_properties_box.cc @@ -40,19 +40,178 @@ using namespace Gtk; using namespace ARDOUR; +using namespace ArdourWidgets; using std::min; using std::max; +RegionPropertiesBox::RegionPropertiesBox() : + length_clock (X_("regionlength"), true, "", true, false, true) + , start_clock (X_("regionstart"), true, "", false, false) + , loop_length_clock (X_("regionlength"), true, "", true, false, true) + , loop_start_clock (X_("regionstart"), true, "", false, false) + , bbt_toggle (ArdourButton::led_default_elements) + , loop_toggle (ArdourButton::led_default_elements) +{ + Gtk::Label *label; + int row = 0; + + _header_label.set_alignment(0.0, 0.5); + pack_start(_header_label, false, false, 6); + + Gtk::Table *bpm_table = manage(new Gtk::Table()); + bpm_table->set_homogeneous (false); + bpm_table->set_spacings (4); + bpm_table->set_border_width (2); + label = manage(new Gtk::Label(_("BPM:"))); label->set_alignment(1.0, 0.5); + bpm_table->attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); + bpm_table->attach(bpm_button, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + + pack_start (*bpm_table, false, false); + + Gtk::Table *metrum_table = manage(new Gtk::Table()); + metrum_table->set_homogeneous (false); + metrum_table->set_spacings (4); + metrum_table->set_border_width (2); + label = manage(new Gtk::Label(_("Time Sig:"))); label->set_alignment(1.0, 0.5); + bpm_table->attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); + bpm_table->attach(metrum_button, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + + pack_start (*metrum_table, false, false); + + row = 0; + + bbt_toggle.set_text(_("BBT Sync")); + table.attach(bbt_toggle, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + + label = manage(new Gtk::Label(_("Start:"))); label->set_alignment(1.0, 0.5); + table.attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); + table.attach(start_clock, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + + label = manage(new Gtk::Label(_("Length:"))); label->set_alignment(1.0, 0.5); + table.attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); + table.attach(length_clock, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + + loop_toggle.set_text(_("Loop")); + table.attach(loop_toggle, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + + label = manage(new Gtk::Label(_("Loop Start:"))); label->set_alignment(1.0, 0.5); + table.attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); + table.attach(loop_start_clock, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + + table.set_homogeneous (false); + table.set_spacings (4); + table.set_border_width (2); + pack_start (table, false, false); +} + +RegionPropertiesBox::~RegionPropertiesBox() +{ +} + +void +RegionPropertiesBox::set_session (Session* s) +{ + SessionHandlePtr::set_session (s); + + length_clock.set_session (s); + start_clock.set_session (s); + + loop_length_clock.set_session (s); + loop_start_clock.set_session (s); +} + +void +RegionPropertiesBox::set_region (boost::shared_ptr r) +{ +printf(" slot, region name %s\n", r->name().c_str()); + set_session(&r->session()); + + state_connection.disconnect(); + + _region = r; + + PBD::PropertyChange interesting_stuff; + region_changed(interesting_stuff); + + _region->PropertyChanged.connect (state_connection, invalidator (*this), boost::bind (&RegionPropertiesBox::region_changed, this, _1), gui_context()); +} + +void +RegionPropertiesBox::region_changed (const PBD::PropertyChange& what_changed) +{ +//ToDo: refactor the region_editor.cc to cover this basic stuff +// if (what_changed.contains (ARDOUR::Properties::name)) { +// name_changed (); +// } + +// PBD::PropertyChange interesting_stuff; +// interesting_stuff.add (ARDOUR::Properties::length); +// interesting_stuff.add (ARDOUR::Properties::start); +// if (what_changed.contains (interesting_stuff)) +printf(" slot, region name %s\n", _region->name().c_str()); + { + AudioClock::Mode mode = _region->position_time_domain() == Temporal::AudioTime ? AudioClock::Samples : AudioClock::BBT; + + start_clock.set_mode (mode); + length_clock.set_mode (mode); + +printf(" slot, region start %s\n", _region->start().str().c_str()); + start_clock.set (_region->start()); + length_clock.set_duration (_region->length()); + + bpm_button.set_text("122.2"); + metrum_button.set_text("4/4"); + } +} + +/* ================== */ + AudioRegionPropertiesBox::AudioRegionPropertiesBox () { - pack_start (table, false, false); + _header_label.set_text(_("AUDIO Region Properties:")); - table.set_homogeneous (true); - table.set_spacings (0); - table.set_border_width (2); - table.set_col_spacings (2); + Gtk::Label *label; - + Gtk::Table *audio_t = manage(new Gtk::Table()); + audio_t->set_homogeneous (true); + audio_t->set_spacings (4); + + int row = 0; + + label = manage(new Gtk::Label(_("Stretch Mode:"))); label->set_alignment(1.0, 0.5); + audio_t->attach(*label, 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK ); + + stretch_selector.set_text ("Mixed"); + stretch_selector.set_name ("generic button"); + // stretch_selector.signal_clicked.connect (sigc::mem_fun (*this, &MidiRegionPropertiesBox::patch_enable_button_clicked)); + audio_t->attach(stretch_selector, 1, 3, row, row+1, Gtk::FILL, Gtk::SHRINK ); + + row++; + + label = manage(new Gtk::Label(_("Fades:"))); label->set_alignment(1.0, 0.5); + fade_in_enable_button.set_text (_("In")); + fade_in_enable_button.set_name ("generic button"); + // fade_in_enable_button.signal_clicked.connect (sigc::mem_fun (*this, &MidiRegionPropertiesBox::patch_enable_button_clicked)); + fade_out_enable_button.set_text (_("Out")); + fade_out_enable_button.set_name ("generic button"); + // fade_out_enable_button.signal_clicked.connect (sigc::mem_fun (*this, &MidiRegionPropertiesBox::patch_enable_button_clicked)); + audio_t->attach(*label, 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK ); + audio_t->attach(fade_in_enable_button, 1, 2, row, row+1, Gtk::FILL, Gtk::SHRINK ); + audio_t->attach(fade_out_enable_button, 2, 3, row, row+1, Gtk::FILL, Gtk::SHRINK ); + + row++; + + label = manage(new Gtk::Label(_("Gain:"))); label->set_alignment(1.0, 0.5); + audio_t->attach(*label, 0, 1, row, row+1, Gtk::FILL, Gtk::SHRINK ); + + gain_control.set_text (_("+6dB")); + gain_control.set_name ("generic button"); + // gain_control.signal_clicked.connect (sigc::mem_fun (*this, &MidiRegionPropertiesBox::patch_enable_button_clicked)); + audio_t->attach(gain_control, 1, 3, row, row+1, Gtk::FILL, Gtk::SHRINK ); + + row++; + + pack_start(*audio_t); } AudioRegionPropertiesBox::~AudioRegionPropertiesBox () @@ -60,13 +219,8 @@ AudioRegionPropertiesBox::~AudioRegionPropertiesBox () } void -AudioRegionPropertiesBox::set_session (Session* s) -{ - SessionHandlePtr::set_session (s); -} - -void -AudioRegionPropertiesBox::set_region (boost::shared_ptr) +AudioRegionPropertiesBox::set_region (boost::shared_ptr r) { + RegionPropertiesBox::set_region (r); } diff --git a/gtk2_ardour/audio_region_properties_box.h b/gtk2_ardour/audio_region_properties_box.h index 781315ff51..9b8d6ab38a 100644 --- a/gtk2_ardour/audio_region_properties_box.h +++ b/gtk2_ardour/audio_region_properties_box.h @@ -29,25 +29,65 @@ #include "ardour/ardour.h" #include "ardour/session_handle.h" +#include "widgets/ardour_button.h" + #include "gtkmm2ext/cairo_packer.h" +#include "audio_clock.h" + namespace ARDOUR { class Session; class Location; } -class AudioRegionPropertiesBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr +class RegionPropertiesBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr +{ +public: + RegionPropertiesBox (); + ~RegionPropertiesBox (); + + virtual void set_region (boost::shared_ptr); + + void set_session (ARDOUR::Session* s); + +protected: + boost::shared_ptr _region; + + Gtk::Label _header_label; +private: + Gtk::Table table; + + AudioClock length_clock; + AudioClock start_clock; + + AudioClock loop_length_clock; + AudioClock loop_start_clock; + + ArdourWidgets::ArdourButton bpm_button; + ArdourWidgets::ArdourButton metrum_button; + + ArdourWidgets::ArdourButton bbt_toggle; + ArdourWidgets::ArdourButton loop_toggle; + + void region_changed (const PBD::PropertyChange& what_changed); + PBD::ScopedConnection state_connection; +}; + +class AudioRegionPropertiesBox : public RegionPropertiesBox { public: AudioRegionPropertiesBox (); ~AudioRegionPropertiesBox (); - void set_session (ARDOUR::Session*); - - void set_region (boost::shared_ptr); + virtual void set_region (boost::shared_ptr); private: - Gtk::Table table; + + ArdourWidgets::ArdourButton fade_in_enable_button; + ArdourWidgets::ArdourButton fade_out_enable_button; + + ArdourWidgets::ArdourButton gain_control; + ArdourWidgets::ArdourButton stretch_selector; }; #endif /* __audio_region_properties_box_h__ */ diff --git a/gtk2_ardour/audio_region_trimmer_box.cc b/gtk2_ardour/audio_region_trimmer_box.cc new file mode 100644 index 0000000000..04d938926f --- /dev/null +++ b/gtk2_ardour/audio_region_trimmer_box.cc @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2011-2017 Paul Davis + * Copyright (C) 2021 Ben Loftis + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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 for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include "pbd/compose.h" + +#include "gtkmm2ext/gui_thread.h" +#include "gtkmm2ext/utils.h" +#include "gtkmm2ext/actions.h" + +#include "canvas/canvas.h" +#include "canvas/debug.h" +#include "canvas/utils.h" + +#include "ardour/location.h" +#include "ardour/profile.h" +#include "ardour/session.h" + +#include "widgets/ardour_button.h" + +#include "audio_clock.h" +#include "automation_line.h" +#include "control_point.h" +#include "editor.h" +#include "region_view.h" +#include "ui_config.h" + +#include "audio_region_trimmer_box.h" + +#include "pbd/i18n.h" + +using namespace Gtk; +using namespace ARDOUR; +using namespace ArdourWidgets; +using std::min; +using std::max; + +/* ------------ */ + +AudioTrimmerCanvas::AudioTrimmerCanvas (ArdourCanvas::Item* parent) + : Rectangle (parent) +{ +// set_homogenous (true); +// set_row_spacing (4); + + set_fill_color (UIConfiguration::instance().color (X_("theme:darkest"))); + set_fill (true); + + const double scale = UIConfiguration::instance().get_ui_scale(); + const double width = 600. * scale; + const double height = 210. * scale; + +// name = string_compose ("trigger %1", _trigger.index()); + + Event.connect (sigc::mem_fun (*this, &AudioTrimmerCanvas::event_handler)); + + ArdourCanvas::Rect r (0, 0, width, height); + set (r); + set_outline_all (); + +// selection_connection = PublicEditor::instance().get_selection().TriggersChanged.connect (sigc::mem_fun (*this, &TriggerBoxUI::selection_changed)); +} + +AudioTrimmerCanvas::~AudioTrimmerCanvas () +{ +} + +void +AudioTrimmerCanvas::render (ArdourCanvas::Rect const & area, Cairo::RefPtr cr) const +{ +// ArdourCanvas::Rect self (item_to_window (_rect, NO_ROUND)); +// boost::optional i = self.intersection (area); +// if (!i) { +// return; +// } + cr->set_identity_matrix(); + cr->translate (area.x0, area.y0-0.5); //should be self + + float height = area.height(); //should be self + float width = area.width(); + + //black border...this should be in draw_bg + Gtkmm2ext::set_source_rgba (cr, Gtkmm2ext::rgba_to_color (0,0,0,1)); + cr->set_line_width(1); + cr->rectangle(0, 0, width, height); + cr->fill (); +} + +bool +AudioTrimmerCanvas::event_handler (GdkEvent* ev) +{ + switch (ev->type) { + case GDK_BUTTON_PRESS: +// PublicEditor::instance().get_selection().set (this); + break; + case GDK_ENTER_NOTIFY: +// redraw (); + break; + case GDK_LEAVE_NOTIFY: +// redraw (); + break; + default: + break; + } + + return false; +} + +/* ------------ */ + +AudioTrimmerBoxWidget::AudioTrimmerBoxWidget () +{ + trimmer = new AudioTrimmerCanvas (root()); + set_background_color (UIConfiguration::instance().color (X_("theme:bg"))); +} + +void +AudioTrimmerBoxWidget::size_request (double& w, double& h) const +{ + trimmer->size_request (w, h); + w=600; + h=210; +} + +void +AudioTrimmerBoxWidget::on_map () +{ + GtkCanvas::on_map (); +} + +void +AudioTrimmerBoxWidget::on_unmap () +{ + GtkCanvas::on_unmap (); +} + +/* ====================================================== */ + +AudioRegionTrimmerBox::AudioRegionTrimmerBox () +{ + _header_label.set_text(_("AUDIO Region Trimmer:")); + _header_label.set_alignment(0.0, 0.5); + pack_start(_header_label, false, false, 6); + + trimmer_widget = manage (new AudioTrimmerBoxWidget()); + trimmer_widget->set_size_request(600,120); + + pack_start(*trimmer_widget, true, true); + trimmer_widget->show(); +} + +AudioRegionTrimmerBox::~AudioRegionTrimmerBox () +{ +} + +void +AudioRegionTrimmerBox::set_region (boost::shared_ptr r) +{ + set_session(&r->session()); + + state_connection.disconnect(); + + _region = r; + + PBD::PropertyChange interesting_stuff; + region_changed(interesting_stuff); + + _region->PropertyChanged.connect (state_connection, invalidator (*this), boost::bind (&AudioRegionTrimmerBox::region_changed, this, _1), gui_context()); +} + +void +AudioRegionTrimmerBox::region_changed (const PBD::PropertyChange& what_changed) +{ +//ToDo: refactor the region_editor.cc to cover this basic stuff +// if (what_changed.contains (ARDOUR::Properties::name)) { +// name_changed (); +// } + +// PBD::PropertyChange interesting_stuff; +// interesting_stuff.add (ARDOUR::Properties::length); +// interesting_stuff.add (ARDOUR::Properties::start); +// if (what_changed.contains (interesting_stuff)) + { + } +} + + + diff --git a/gtk2_ardour/audio_region_trimmer_box.h b/gtk2_ardour/audio_region_trimmer_box.h new file mode 100644 index 0000000000..73973f2f80 --- /dev/null +++ b/gtk2_ardour/audio_region_trimmer_box.h @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2021 Paul Davis + * Copyright (C) 2021 Ben Loftis + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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 for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef __audio_region_trimmer_box_h__ +#define __audio_region_trimmer_box_h__ + +#include + +#include +#include +#include + +#include "ardour/ardour.h" +#include "ardour/session_handle.h" + +#include "gtkmm2ext/cairo_packer.h" + +#include "canvas/table.h" +#include "canvas/canvas.h" +#include "canvas/rectangle.h" + +#include "audio_clock.h" + +namespace ARDOUR { + class Session; + class Location; +} + +namespace ArdourCanvas { + class Text; + class Polygon; +}; + +class RegionTrimmerBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr +{ +public: + RegionTrimmerBox () {} + ~RegionTrimmerBox () {} + + virtual void set_region (boost::shared_ptr) =0; +}; + + +class AudioTrimmerCanvas : public ArdourCanvas::Rectangle +{ + public: + AudioTrimmerCanvas (ArdourCanvas::Item* parent); + ~AudioTrimmerCanvas (); + + void render (ArdourCanvas::Rect const & area, Cairo::RefPtr) const; + +// void _size_allocate (ArdourCanvas::Rect const &); + bool event_handler (GdkEvent*); +}; + +class AudioTrimmerBoxWidget : public ArdourCanvas::GtkCanvas +{ + public: + AudioTrimmerBoxWidget (); + void size_request (double& w, double& h) const; + + void on_map (); + void on_unmap (); + + private: + AudioTrimmerCanvas* trimmer; +}; + +class AudioRegionTrimmerBox : public RegionTrimmerBox +{ +public: + AudioRegionTrimmerBox (); + ~AudioRegionTrimmerBox (); + + void set_region (boost::shared_ptr); + void region_changed (const PBD::PropertyChange& what_changed); + +private: + Gtk::Label _header_label; + Gtk::Table table; + + AudioTrimmerBoxWidget *trimmer_widget; + + PBD::ScopedConnection state_connection; + + boost::shared_ptr _region; +}; + +#endif /* __audio_region_trimmer_box_h__ */ diff --git a/gtk2_ardour/midi_region_operations_box.cc b/gtk2_ardour/midi_region_operations_box.cc index 179c0152e8..eaaa517426 100644 --- a/gtk2_ardour/midi_region_operations_box.cc +++ b/gtk2_ardour/midi_region_operations_box.cc @@ -78,12 +78,6 @@ MidiRegionOperationsBox::~MidiRegionOperationsBox () { } -void -MidiRegionOperationsBox::set_session (Session* s) -{ - SessionHandlePtr::set_session (s); -} - void MidiRegionOperationsBox::quantize_button_clicked () { diff --git a/gtk2_ardour/midi_region_operations_box.h b/gtk2_ardour/midi_region_operations_box.h index d7e76afc48..67ddf93eee 100644 --- a/gtk2_ardour/midi_region_operations_box.h +++ b/gtk2_ardour/midi_region_operations_box.h @@ -33,19 +33,19 @@ #include "gtkmm2ext/cairo_packer.h" +#include "audio_region_operations_box.h" + namespace ARDOUR { class Session; class Location; } -class MidiRegionOperationsBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr +class MidiRegionOperationsBox : public RegionOperationsBox { public: MidiRegionOperationsBox (); ~MidiRegionOperationsBox (); - void set_session (ARDOUR::Session*); - PBD::ScopedConnectionList editor_connections; PBD::ScopedConnectionList region_property_connections; diff --git a/gtk2_ardour/midi_region_properties_box.cc b/gtk2_ardour/midi_region_properties_box.cc index b6cf8b263a..6151021f28 100644 --- a/gtk2_ardour/midi_region_properties_box.cc +++ b/gtk2_ardour/midi_region_properties_box.cc @@ -46,66 +46,17 @@ using namespace ArdourWidgets; using std::min; using std::max; -MidiRegionPropertiesBox::MidiRegionPropertiesBox () : SessionHandlePtr() - , length_clock (X_("regionlength"), true, "", true, false, true) - , start_clock (X_("regionstart"), true, "", false, false) - , loop_length_clock (X_("regionlength"), true, "", true, false, true) - , loop_start_clock (X_("regionstart"), true, "", false, false) - , bbt_toggle (ArdourButton::led_default_elements) - , loop_toggle (ArdourButton::led_default_elements) - , patch_enable_button (ArdourButton::led_default_elements) +MidiRegionPropertiesBox::MidiRegionPropertiesBox () : + patch_enable_button (ArdourButton::led_default_elements) , cc_enable_button (ArdourButton::led_default_elements) { - Gtk::Label *label; - int row = 0; - _header_label.set_text(_("MIDI Region Properties:")); - _header_label.set_alignment(0.0, 0.5); - pack_start(_header_label, false, false, 6); - Gtk::Table *bpm_table = manage(new Gtk::Table()); - bpm_table->set_homogeneous (false); - bpm_table->set_spacings (4); - bpm_table->set_border_width (2); - label = manage(new Gtk::Label(_("BPM:"))); label->set_alignment(1.0, 0.5); - bpm_table->attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); - bpm_table->attach(bpm_button, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + Gtk::Table *midi_t = manage(new Gtk::Table()); + midi_t->set_homogeneous (true); + midi_t->set_spacings (4); - pack_start (*bpm_table, false, false); - - Gtk::Table *metrum_table = manage(new Gtk::Table()); - metrum_table->set_homogeneous (false); - metrum_table->set_spacings (4); - metrum_table->set_border_width (2); - label = manage(new Gtk::Label(_("Time Sig:"))); label->set_alignment(1.0, 0.5); - bpm_table->attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); - bpm_table->attach(metrum_button, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; - - pack_start (*metrum_table, false, false); - - row = 0; - - bbt_toggle.set_text(_("BBT Sync")); - table.attach(bbt_toggle, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; - - label = manage(new Gtk::Label(_("Start:"))); label->set_alignment(1.0, 0.5); - table.attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); - table.attach(start_clock, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; - - label = manage(new Gtk::Label(_("Length:"))); label->set_alignment(1.0, 0.5); - table.attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); - table.attach(length_clock, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; - - loop_toggle.set_text(_("Loop")); - table.attach(loop_toggle, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; - - label = manage(new Gtk::Label(_("Loop Start:"))); label->set_alignment(1.0, 0.5); - table.attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); - table.attach(loop_start_clock, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; - - // label = manage(new Gtk::Label(_("Loop Length:"))); label->set_alignment(1.0, 0.5); - // table.attach(*label, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); - // table.attach(loop_length_clock, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + int row = 0; patch_enable_button.set_text (_("Send Patches")); patch_enable_button.set_name ("generic button"); @@ -115,8 +66,8 @@ MidiRegionPropertiesBox::MidiRegionPropertiesBox () : SessionHandlePtr() patch_selector_button.set_name ("generic button"); // patch_selector_button.signal_clicked.connect (sigc::mem_fun (*this, &MidiRegionPropertiesBox::patch_enable_button_clicked)); - table.attach(patch_enable_button, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); - table.attach(patch_selector_button, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + midi_t->attach(patch_enable_button, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); + midi_t->attach(patch_selector_button, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; cc_enable_button.set_text (_("Send CCs")); cc_enable_button.set_name ("generic button"); @@ -126,83 +77,27 @@ MidiRegionPropertiesBox::MidiRegionPropertiesBox () : SessionHandlePtr() cc_selector_button.set_name ("generic button"); // cc_selector_button.signal_clicked.connect (sigc::mem_fun (*this, &MidiRegionPropertiesBox::patch_enable_button_clicked)); - table.attach(cc_enable_button, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); - table.attach(cc_selector_button, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; + midi_t->attach(cc_enable_button, 0, 1, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); + midi_t->attach(cc_selector_button, 1, 2, row, row+1, Gtk::SHRINK, Gtk::SHRINK ); row++; - table.set_homogeneous (false); - table.set_spacings (4); - table.set_border_width (2); - pack_start (table, false, false); - - Gtk::Table *chans = manage(new Gtk::Table()); - chans->set_homogeneous (true); - chans->set_spacings (4); - for (int c = 0; c<16; c++) { - Gtk::Label *ch_label = manage(new Gtk::Label()); - ch_label->set_name("MetricLabel"); - ch_label->set_text(string_compose("%1", c+1)); - chans->attach(*ch_label, c%4, (c%4)+1, c/4, (c/4)+1, Gtk::SHRINK, Gtk::SHRINK ); - } -// table.attach(*chans, 2, 3, 0, row, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); + pack_start(*midi_t); } MidiRegionPropertiesBox::~MidiRegionPropertiesBox () { } -void -MidiRegionPropertiesBox::set_session (Session* s) -{ - SessionHandlePtr::set_session (s); - - length_clock.set_session (s); - start_clock.set_session (s); - - loop_length_clock.set_session (s); - loop_start_clock.set_session (s); -} - void MidiRegionPropertiesBox::set_region (boost::shared_ptr r) { -printf(" slot, region name %s\n", r->name().c_str()); - set_session(&r->session()); + RegionPropertiesBox::set_region (r); - state_connection.disconnect(); - - _region = r; - - PBD::PropertyChange interesting_stuff; - region_changed(interesting_stuff); - - _region->PropertyChanged.connect (state_connection, invalidator (*this), boost::bind (&MidiRegionPropertiesBox::region_changed, this, _1), gui_context()); + _region->PropertyChanged.connect (midi_state_connection, invalidator (*this), boost::bind (&MidiRegionPropertiesBox::region_changed, this, _1), gui_context()); } void MidiRegionPropertiesBox::region_changed (const PBD::PropertyChange& what_changed) { -//ToDo: refactor the region_editor.cc to cover this basic stuff -// if (what_changed.contains (ARDOUR::Properties::name)) { -// name_changed (); -// } - -// PBD::PropertyChange interesting_stuff; -// interesting_stuff.add (ARDOUR::Properties::length); -// interesting_stuff.add (ARDOUR::Properties::start); -// if (what_changed.contains (interesting_stuff)) -printf(" slot, region name %s\n", _region->name().c_str()); - { - AudioClock::Mode mode = _region->position_time_domain() == Temporal::AudioTime ? AudioClock::Samples : AudioClock::BBT; - - start_clock.set_mode (mode); - length_clock.set_mode (mode); - -printf(" slot, region start %s\n", _region->start().str().c_str()); - start_clock.set (_region->start()); - length_clock.set_duration (_region->length()); - - bpm_button.set_text("122.2"); - metrum_button.set_text("4/4"); - } + //CC and Pgm stuff ...? } diff --git a/gtk2_ardour/midi_region_properties_box.h b/gtk2_ardour/midi_region_properties_box.h index 52a4377c5c..1e6695ef00 100644 --- a/gtk2_ardour/midi_region_properties_box.h +++ b/gtk2_ardour/midi_region_properties_box.h @@ -31,49 +31,31 @@ #include "gtkmm2ext/cairo_packer.h" -#include "audio_clock.h" +#include "audio_region_properties_box.h" namespace ARDOUR { class Session; class Location; } -class MidiRegionPropertiesBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr +class MidiRegionPropertiesBox : public RegionPropertiesBox { public: MidiRegionPropertiesBox (); ~MidiRegionPropertiesBox (); - void set_session (ARDOUR::Session*); - void set_region (boost::shared_ptr); - void region_changed (const PBD::PropertyChange& what_changed); private: - Gtk::Label _header_label; - Gtk::Table table; - AudioClock length_clock; - AudioClock start_clock; - - AudioClock loop_length_clock; - AudioClock loop_start_clock; - - ArdourWidgets::ArdourButton bpm_button; - ArdourWidgets::ArdourButton metrum_button; - - ArdourWidgets::ArdourButton bbt_toggle; - ArdourWidgets::ArdourButton loop_toggle; + PBD::ScopedConnection midi_state_connection; + void region_changed (const PBD::PropertyChange& what_changed); ArdourWidgets::ArdourButton patch_enable_button; ArdourWidgets::ArdourButton patch_selector_button; ArdourWidgets::ArdourButton cc_enable_button; ArdourWidgets::ArdourButton cc_selector_button; - - PBD::ScopedConnection state_connection; - - boost::shared_ptr _region; }; #endif /* __midi_region_properties_box_h__ */ diff --git a/gtk2_ardour/midi_region_trimmer_box.cc b/gtk2_ardour/midi_region_trimmer_box.cc index f6c005f5e7..a477954afa 100644 --- a/gtk2_ardour/midi_region_trimmer_box.cc +++ b/gtk2_ardour/midi_region_trimmer_box.cc @@ -53,7 +53,7 @@ using std::max; /* ------------ */ -MidiTrimmer::MidiTrimmer (ArdourCanvas::Item* parent) +MidiTrimmerCanvas::MidiTrimmerCanvas (ArdourCanvas::Item* parent) : Rectangle (parent) { // set_homogenous (true); @@ -68,7 +68,7 @@ MidiTrimmer::MidiTrimmer (ArdourCanvas::Item* parent) // name = string_compose ("trigger %1", _trigger.index()); - Event.connect (sigc::mem_fun (*this, &MidiTrimmer::event_handler)); + Event.connect (sigc::mem_fun (*this, &MidiTrimmerCanvas::event_handler)); ArdourCanvas::Rect r (0, 0, width, height); set (r); @@ -77,12 +77,12 @@ MidiTrimmer::MidiTrimmer (ArdourCanvas::Item* parent) // selection_connection = PublicEditor::instance().get_selection().TriggersChanged.connect (sigc::mem_fun (*this, &TriggerBoxUI::selection_changed)); } -MidiTrimmer::~MidiTrimmer () +MidiTrimmerCanvas::~MidiTrimmerCanvas () { } void -MidiTrimmer::render (ArdourCanvas::Rect const & area, Cairo::RefPtr cr) const +MidiTrimmerCanvas::render (ArdourCanvas::Rect const & area, Cairo::RefPtr cr) const { // ArdourCanvas::Rect self (item_to_window (_rect, NO_ROUND)); // boost::optional i = self.intersection (area); @@ -103,7 +103,7 @@ MidiTrimmer::render (ArdourCanvas::Rect const & area, Cairo::RefPtrtype) { case GDK_BUTTON_PRESS: @@ -124,14 +124,14 @@ MidiTrimmer::event_handler (GdkEvent* ev) /* ------------ */ -TrimmerBoxWidget::TrimmerBoxWidget () +MidiTrimmerBoxWidget::MidiTrimmerBoxWidget () { - trimmer = new MidiTrimmer (root()); + trimmer = new MidiTrimmerCanvas (root()); set_background_color (UIConfiguration::instance().color (X_("theme:bg"))); } void -TrimmerBoxWidget::size_request (double& w, double& h) const +MidiTrimmerBoxWidget::size_request (double& w, double& h) const { trimmer->size_request (w, h); w=600; @@ -139,26 +139,26 @@ TrimmerBoxWidget::size_request (double& w, double& h) const } void -TrimmerBoxWidget::on_map () +MidiTrimmerBoxWidget::on_map () { GtkCanvas::on_map (); } void -TrimmerBoxWidget::on_unmap () +MidiTrimmerBoxWidget::on_unmap () { GtkCanvas::on_unmap (); } /* ====================================================== */ -MidiRegionTrimmerBox::MidiRegionTrimmerBox () : SessionHandlePtr() +MidiRegionTrimmerBox::MidiRegionTrimmerBox () { _header_label.set_text(_("MIDI Region Trimmer:")); _header_label.set_alignment(0.0, 0.5); pack_start(_header_label, false, false, 6); - trimmer_widget = manage (new TrimmerBoxWidget()); + trimmer_widget = manage (new MidiTrimmerBoxWidget()); trimmer_widget->set_size_request(600,120); pack_start(*trimmer_widget, true, true); diff --git a/gtk2_ardour/midi_region_trimmer_box.h b/gtk2_ardour/midi_region_trimmer_box.h index 6b31dc7702..bce5953b79 100644 --- a/gtk2_ardour/midi_region_trimmer_box.h +++ b/gtk2_ardour/midi_region_trimmer_box.h @@ -35,6 +35,8 @@ #include "canvas/canvas.h" #include "canvas/rectangle.h" +#include "audio_region_trimmer_box.h" + #include "audio_clock.h" namespace ARDOUR { @@ -47,11 +49,11 @@ namespace ArdourCanvas { class Polygon; }; -class MidiTrimmer : public ArdourCanvas::Rectangle +class MidiTrimmerCanvas : public ArdourCanvas::Rectangle { public: - MidiTrimmer (ArdourCanvas::Item* parent); - ~MidiTrimmer (); + MidiTrimmerCanvas (ArdourCanvas::Item* parent); + ~MidiTrimmerCanvas (); void render (ArdourCanvas::Rect const & area, Cairo::RefPtr) const; @@ -59,20 +61,20 @@ class MidiTrimmer : public ArdourCanvas::Rectangle bool event_handler (GdkEvent*); }; -class TrimmerBoxWidget : public ArdourCanvas::GtkCanvas +class MidiTrimmerBoxWidget : public ArdourCanvas::GtkCanvas { public: - TrimmerBoxWidget (); + MidiTrimmerBoxWidget (); void size_request (double& w, double& h) const; void on_map (); void on_unmap (); private: - MidiTrimmer* trimmer; + MidiTrimmerCanvas* trimmer; }; -class MidiRegionTrimmerBox : public Gtk::VBox, public ARDOUR::SessionHandlePtr +class MidiRegionTrimmerBox : public RegionTrimmerBox { public: MidiRegionTrimmerBox (); @@ -87,7 +89,7 @@ private: Gtk::Label _header_label; Gtk::Table table; - TrimmerBoxWidget *trimmer_widget; + MidiTrimmerBoxWidget *trimmer_widget; PBD::ScopedConnection state_connection; diff --git a/gtk2_ardour/trigger_page.cc b/gtk2_ardour/trigger_page.cc index dc95251528..fcd4d26d12 100644 --- a/gtk2_ardour/trigger_page.cc +++ b/gtk2_ardour/trigger_page.cc @@ -80,19 +80,31 @@ TriggerPage::TriggerPage () _slot_area_box.pack_start (_master_widget, Gtk::PACK_SHRINK); _midi_prop_box = new MidiRegionPropertiesBox (); - _audio_prop_box = new AudioRegionPropertiesBox (); - _midi_ops_box = new MidiRegionOperationsBox (); - _audio_ops_box = new AudioRegionOperationsBox (); _slot_prop_box = new SlotPropertiesBox (); + + _audio_prop_box = new AudioRegionPropertiesBox (); + _midi_prop_box = new MidiRegionPropertiesBox (); + + _audio_ops_box = new AudioRegionOperationsBox (); + _midi_ops_box = new MidiRegionOperationsBox (); + + _audio_trim_box = new AudioRegionTrimmerBox (); _midi_trim_box = new MidiRegionTrimmerBox (); Gtk::Table* table = manage (new Gtk::Table); table->set_homogeneous (false); - table->set_spacings (16); + table->set_spacings (8); table->set_border_width (8); int col = 0; - table->attach(*_slot_prop_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; + table->attach(*_slot_prop_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); + + col=1; + table->attach(*_audio_prop_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; + table->attach(*_audio_trim_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; + table->attach(*_audio_ops_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; + + col=1; /* audio and midi boxen share the same table locations; shown and hidden depending on region type */ table->attach(*_midi_prop_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; table->attach(*_midi_trim_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; table->attach(*_midi_ops_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; @@ -135,7 +147,6 @@ TriggerPage::TriggerPage () _strip_packer.show (); _slot_area_box.show_all (); _browser_box.show (); - _parameter_box.show (); /* setup keybidings */ _content.set_data ("ardour-bindings", bindings); @@ -163,16 +174,18 @@ TriggerPage::TriggerPage () TriggerPage::~TriggerPage () { -<<<<<<< HEAD delete _master; -======= + delete _slot_prop_box; - delete _midi_ops_box; + delete _audio_ops_box; - delete _midi_prop_box; + delete _midi_ops_box; + delete _audio_prop_box; + delete _midi_prop_box; + + delete _audio_trim_box; delete _midi_trim_box; ->>>>>>> Property Boxen: populate the Trigger page with property-editor placeholders } Gtk::Window* @@ -252,15 +265,19 @@ TriggerPage::set_session (Session* s) initial_track_display (); - _midi_prop_box->set_session(s); - _audio_prop_box->set_session(s); - _midi_ops_box->set_session(s); - _audio_ops_box->set_session(s); _slot_prop_box->set_session(s); + + _audio_prop_box->set_session(s); + _audio_ops_box->set_session(s); + _audio_trim_box->set_session(s); + + _midi_prop_box->set_session(s); + _midi_ops_box->set_session(s); _midi_trim_box->set_session(s); update_title (); start_updating (); + selection_changed(); } void @@ -328,31 +345,43 @@ TriggerPage::selection_changed () { Selection& selection (Editor::instance().get_selection()); - _midi_ops_box->hide(); - _audio_ops_box->hide(); - _midi_prop_box->hide(); - _audio_prop_box->hide(); _slot_prop_box->hide(); + + _audio_ops_box->hide(); + _audio_prop_box->hide(); + _audio_trim_box->hide(); + + _midi_ops_box->hide(); + _midi_prop_box->hide(); _midi_trim_box->hide(); + _parameter_box.hide (); + if (!selection.triggers.empty()) { TriggerSelection ts = selection.triggers; TriggerEntry* entry = *ts.begin(); Trigger* slot = &entry->trigger(); _slot_prop_box->set_slot(slot); + _slot_prop_box->show(); if (slot->region()) { - _midi_prop_box->set_region(slot->region()); - _audio_prop_box->set_region(slot->region()); - _midi_trim_box->set_region(slot->region()); + if (slot->region()->data_type() == DataType::AUDIO) { + _audio_prop_box->set_region(slot->region()); + _audio_trim_box->set_region(slot->region()); - _midi_ops_box->show(); - _audio_ops_box->show(); - _midi_prop_box->show(); - _audio_prop_box->show(); - _slot_prop_box->show(); - _midi_trim_box->show(); + _audio_prop_box->show(); + _audio_trim_box->show(); + _audio_ops_box->show(); + } else { + _midi_prop_box->set_region(slot->region()); + _midi_trim_box->set_region(slot->region()); + + _midi_prop_box->show(); + _midi_trim_box->show(); + _midi_ops_box->show(); + } } + _parameter_box.show (); } } diff --git a/gtk2_ardour/trigger_page.h b/gtk2_ardour/trigger_page.h index 683e656f3d..90a0264e6e 100644 --- a/gtk2_ardour/trigger_page.h +++ b/gtk2_ardour/trigger_page.h @@ -38,6 +38,7 @@ class AudioRegionPropertiesBox; class MidiRegionPropertiesBox; class AudioRegionOperationsBox; class MidiRegionOperationsBox; +class AudioRegionTrimmerBox; class MidiRegionTrimmerBox; class TriggerPage : public ArdourWidgets::Tabbable, public ARDOUR::SessionHandlePtr, public PBD::ScopedConnectionList @@ -91,12 +92,15 @@ private: FittedCanvasWidget _master_widget; CueMaster *_master; - AudioRegionPropertiesBox* _audio_prop_box; - MidiRegionPropertiesBox* _midi_prop_box; - AudioRegionOperationsBox* _audio_ops_box; - MidiRegionOperationsBox* _midi_ops_box; SlotPropertiesBox* _slot_prop_box; - MidiRegionTrimmerBox *_midi_trim_box; + + AudioRegionPropertiesBox* _audio_prop_box; + AudioRegionOperationsBox* _audio_ops_box; + AudioRegionTrimmerBox* _audio_trim_box; + + MidiRegionPropertiesBox* _midi_prop_box; + MidiRegionOperationsBox* _midi_ops_box; + MidiRegionTrimmerBox* _midi_trim_box; std::list _strips; sigc::connection _fast_screen_update_connection; diff --git a/gtk2_ardour/trigger_ui.cc b/gtk2_ardour/trigger_ui.cc index 3dc9d43867..3b792b0016 100644 --- a/gtk2_ardour/trigger_ui.cc +++ b/gtk2_ardour/trigger_ui.cc @@ -388,11 +388,6 @@ TriggerWindow::TriggerWindow (Trigger* slot) SlotPropertiesBox* slot_prop_box = manage (new SlotPropertiesBox ()); slot_prop_box->set_slot(slot); - MidiRegionPropertiesBox *midi_prop_box = manage(new MidiRegionPropertiesBox ()); - - MidiRegionOperationsBox *midi_ops_box = manage(new MidiRegionOperationsBox ()); - - MidiRegionTrimmerBox *midi_trim_box = manage(new MidiRegionTrimmerBox ()); Gtk::Table* table = manage (new Gtk::Table); table->set_homogeneous (false); @@ -401,26 +396,29 @@ TriggerWindow::TriggerWindow (Trigger* slot) int col = 0; table->attach(*slot_prop_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; - table->attach(*midi_prop_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; - table->attach(*midi_trim_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; - table->attach(*midi_ops_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; + + if (slot->region()) { + if (slot->region()->data_type() == DataType::AUDIO) { + _prop_box = manage(new AudioRegionPropertiesBox ()); + _ops_box = manage(new AudioRegionOperationsBox ()); + _trim_box = manage(new AudioRegionTrimmerBox ()); + } else { + _prop_box = manage(new MidiRegionPropertiesBox ()); + _ops_box = manage(new MidiRegionOperationsBox ()); + _trim_box = manage(new MidiRegionTrimmerBox ()); + } + + _prop_box->set_region(slot->region()); + _trim_box->set_region(slot->region()); + _ops_box->set_session(&slot->region()->session()); + + table->attach(*_prop_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; + table->attach(*_trim_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; + table->attach(*_ops_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++; + } add (*table); table->show_all(); - - if (slot->region()) { - midi_prop_box->set_region(slot->region()); - midi_trim_box->set_region(slot->region()); - midi_ops_box->set_session(&slot->region()->session()); - - midi_prop_box->show(); - midi_trim_box->show(); - midi_ops_box->show(); - } else { - midi_prop_box->hide(); - midi_trim_box->hide(); - midi_ops_box->hide(); - } } bool diff --git a/gtk2_ardour/trigger_ui.h b/gtk2_ardour/trigger_ui.h index 504353b850..d49194d60e 100644 --- a/gtk2_ardour/trigger_ui.h +++ b/gtk2_ardour/trigger_ui.h @@ -26,6 +26,10 @@ namespace ArdourWidgets { class HSliderController; } +class RegionPropertiesBox; +class RegionOperationsBox; +class RegionTrimmerBox; + class TriggerUI : public Gtk::Table //, public sigc::trackable { public: @@ -84,6 +88,10 @@ class TriggerWindow : public Gtk::Window bool on_key_press_event (GdkEventKey*); bool on_key_release_event (GdkEventKey*); + + RegionPropertiesBox *_prop_box; + RegionOperationsBox *_ops_box; + RegionTrimmerBox *_trim_box; }; #endif /* __ardour_gtk_trigger_ui_h__ */ diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 1ae197c7b2..c3f1a2be5d 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -55,6 +55,7 @@ gtk2_ardour_sources = [ 'audio_region_view.cc', 'audio_region_operations_box.cc', 'audio_region_properties_box.cc', + 'audio_region_trimmer_box.cc', 'audio_streamview.cc', 'audio_time_axis.cc', 'automation_controller.cc',