diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-06-11 22:59:35 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-06-11 22:59:35 +0000 |
commit | d97312d438a813985916dd35f613510e9448441f (patch) | |
tree | 5be2844fc16359c2eb550b72c9f84737c534d614 /gtk2_ardour | |
parent | c81691741118ab34c5f6f458c2d84f431e481ada (diff) |
lots more work trying to create a common structure for accessing plugin and MIDNAME patch/preset/program names. still not done
git-svn-id: svn://localhost/ardour2/branches/3.0@12665 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/canvas_patch_change.cc | 51 | ||||
-rw-r--r-- | gtk2_ardour/canvas_patch_change.h | 12 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 25 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.h | 14 | ||||
-rw-r--r-- | gtk2_ardour/midi_time_axis.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/patch_change_dialog.cc | 48 | ||||
-rw-r--r-- | gtk2_ardour/patch_change_dialog.h | 9 |
8 files changed, 74 insertions, 94 deletions
diff --git a/gtk2_ardour/canvas_patch_change.cc b/gtk2_ardour/canvas_patch_change.cc index 44389ae96c..b3d8caa488 100644 --- a/gtk2_ardour/canvas_patch_change.cc +++ b/gtk2_ardour/canvas_patch_change.cc @@ -22,7 +22,7 @@ #include <glibmm/regex.h> #include "gtkmm2ext/keyboard.h" -#include "ardour/midi_patch_manager.h" +#include "ardour/instrument_info.h" #include "ardour_ui.h" #include "midi_region_view.h" @@ -44,8 +44,7 @@ CanvasPatchChange::CanvasPatchChange( double height, double x, double y, - string& model_name, - string& custom_device_mode, + ARDOUR::InstrumentInfo& info, ARDOUR::MidiModel::PatchChangePtr patch, bool active_channel) : CanvasFlag( @@ -60,12 +59,11 @@ CanvasPatchChange::CanvasPatchChange( ARDOUR_UI::config()->canvasvar_MidiPatchChangeInactiveChannelFill.get(), x, y) - , _model_name(model_name) - , _custom_device_mode(custom_device_mode) + , _info (info) , _patch (patch) , _popup_initialized(false) { - set_text(text); + set_text (text); } CanvasPatchChange::~CanvasPatchChange() @@ -75,9 +73,7 @@ CanvasPatchChange::~CanvasPatchChange() void CanvasPatchChange::initialize_popup_menus() { - boost::shared_ptr<ChannelNameSet> channel_name_set = - MidiPatchManager::instance() - .find_channel_name_set(_model_name, _custom_device_mode, _patch->channel()); + boost::shared_ptr<ChannelNameSet> channel_name_set = _info.get_patches (_patch->channel()); if (!channel_name_set) { return; @@ -193,22 +189,28 @@ CanvasPatchChange::on_event (GdkEvent* ev) break; case GDK_SCROLL: - if (ev->scroll.direction == GDK_SCROLL_UP) { - if (Keyboard::modifier_state_contains (ev->scroll.state, Keyboard::PrimaryModifier)) { - _region.previous_bank (*this); - } else { - _region.previous_patch (*this); - } - return true; - } else if (ev->scroll.direction == GDK_SCROLL_DOWN) { - if (Keyboard::modifier_state_contains (ev->scroll.state, Keyboard::PrimaryModifier)) { - _region.next_bank (*this); - } else { - _region.next_patch (*this); + { + /* XXX: icky dcast */ + Editor* e = dynamic_cast<Editor*> (&_region.get_time_axis_view().editor()); + if (e->current_mouse_mode() == Editing::MouseObject && e->internal_editing()) { + if (ev->scroll.direction == GDK_SCROLL_UP) { + if (Keyboard::modifier_state_contains (ev->scroll.state, Keyboard::PrimaryModifier)) { + _region.previous_bank (*this); + } else { + _region.previous_patch (*this); + } + return true; + } else if (ev->scroll.direction == GDK_SCROLL_DOWN) { + if (Keyboard::modifier_state_contains (ev->scroll.state, Keyboard::PrimaryModifier)) { + _region.next_bank (*this); + } else { + _region.next_patch (*this); + } + return true; } - return true; + break; } - break; + } case GDK_ENTER_NOTIFY: _region.patch_entered (this); @@ -218,6 +220,9 @@ CanvasPatchChange::on_event (GdkEvent* ev) _region.patch_left (this); break; + case GDK_KEY_RELEASE: + return true; + case GDK_BUTTON_RELEASE: return true; diff --git a/gtk2_ardour/canvas_patch_change.h b/gtk2_ardour/canvas_patch_change.h index 2a219fdbb6..20c0067ae7 100644 --- a/gtk2_ardour/canvas_patch_change.h +++ b/gtk2_ardour/canvas_patch_change.h @@ -30,6 +30,10 @@ namespace MIDI { } } +namespace ARDOUR { + class InstrumentInfo; +} + namespace Gnome { namespace Canvas { @@ -43,8 +47,7 @@ public: double height, double x, double y, - string& model_name, - string& custom_device_mode, + ARDOUR::InstrumentInfo& info, ARDOUR::MidiModel::PatchChangePtr patch, bool ); @@ -53,8 +56,6 @@ public: virtual bool on_event(GdkEvent* ev); - string model_name () const { return _model_name; } - string custom_device_mode () const { return _custom_device_mode; } ARDOUR::MidiModel::PatchChangePtr patch () const { return _patch; } void initialize_popup_menus(); @@ -62,8 +63,7 @@ public: void on_patch_menu_selected(const MIDI::Name::PatchPrimaryKey& key); private: - string _model_name; - string _custom_device_mode; + ARDOUR::InstrumentInfo& _info; ARDOUR::MidiModel::PatchChangePtr _patch; Gtk::Menu _popup; bool _popup_initialized; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index b7462f7c9e..884fe5eb17 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4730,6 +4730,8 @@ Editor::insert_patch_change (bool from_context) const framepos_t p = get_preferred_edit_position (false, from_context); + cerr << "Got " << rs.size() << " regions to add patch change to\n"; + /* XXX: bit of a hack; use the MIDNAM from the first selected region; there may be more than one, but the PatchChangeDialog can only offer one set of patch menus. @@ -4737,7 +4739,7 @@ Editor::insert_patch_change (bool from_context) MidiRegionView* first = dynamic_cast<MidiRegionView*> (rs.front ()); Evoral::PatchChange<Evoral::MusicalTime> empty (0, 0, 0, 0); - PatchChangeDialog d (0, _session, empty, first->model_name(), first->custom_device_mode(), Gtk::Stock::ADD); + PatchChangeDialog d (0, _session, empty, first->instrument_info(), Gtk::Stock::ADD); if (d.run() == RESPONSE_CANCEL) { return; @@ -4747,6 +4749,7 @@ Editor::insert_patch_change (bool from_context) MidiRegionView* const mrv = dynamic_cast<MidiRegionView*> (*i); if (mrv) { if (p >= mrv->region()->first_frame() && p <= mrv->region()->last_frame()) { + cerr << "Adding patch change @ " << p << " to " << mrv->region()->name() << endl; mrv->add_patch_change (p - mrv->region()->position(), d.patch ()); } } diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index ca9cd4af71..9e9e7efe86 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -283,11 +283,8 @@ MidiRegionView::init (Gdk::Color const & basic_color, bool wfd) midi_view()->signal_channel_mode_changed().connect( sigc::mem_fun(this, &MidiRegionView::midi_channel_mode_changed)); - RouteUI* route_ui = dynamic_cast<RouteUI*> (&trackview); - if (route_ui) { - route_ui->route()->instrument_info().Changed.connect (_instrument_changed_connection, invalidator (*this), - boost::bind (&MidiRegionView::instrument_settings_changed, this), gui_context()); - } + instrument_info().Changed.connect (_instrument_changed_connection, invalidator (*this), + boost::bind (&MidiRegionView::instrument_settings_changed, this), gui_context()); trackview.editor().SnapChanged.connect(snap_changed_connection, invalidator(*this), boost::bind (&MidiRegionView::snap_changed, this), @@ -299,6 +296,13 @@ MidiRegionView::init (Gdk::Color const & basic_color, bool wfd) SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), boost::bind (&MidiRegionView::selection_cleared, this, _1), gui_context ()); } +InstrumentInfo& +MidiRegionView::instrument_info () const +{ + RouteUI* route_ui = dynamic_cast<RouteUI*> (&trackview); + return route_ui->route()->instrument_info(); +} + const boost::shared_ptr<ARDOUR::MidiRegion> MidiRegionView::midi_region() const { @@ -1204,10 +1208,8 @@ MidiRegionView::display_patch_changes_on_channel (uint8_t channel, bool active_c continue; } - // MidiTimeAxisView* const mtv = dynamic_cast<MidiTimeAxisView*>(&trackview); - //string patch_name = mtv->get_patch_name ((*i)->bank(), (*i)->program(), channel); - - // add_canvas_patch_change (*i, patch_name, active_channel); + string patch_name = instrument_info().get_patch_name ((*i)->bank(), (*i)->program(), channel); + add_canvas_patch_change (*i, patch_name, active_channel); } } @@ -1792,8 +1794,7 @@ MidiRegionView::add_canvas_patch_change (MidiModel::PatchChangePtr patch, const displaytext, height, x, 1.0, - _model_name, - _custom_device_mode, + instrument_info(), patch, active_channel) ); @@ -3709,7 +3710,7 @@ MidiRegionView::trim_front_ending () void MidiRegionView::edit_patch_change (ArdourCanvas::CanvasPatchChange* pc) { - PatchChangeDialog d (&_source_relative_time_converter, trackview.session(), *pc->patch (), _model_name, _custom_device_mode, Gtk::Stock::APPLY); + PatchChangeDialog d (&_source_relative_time_converter, trackview.session(), *pc->patch (), instrument_info(), Gtk::Stock::APPLY); if (d.run () != Gtk::RESPONSE_ACCEPT) { return; } diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 93cc1ee128..1b22029151 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -300,13 +300,7 @@ public: void clear_selection (bool signal = true) { clear_selection_except (0, signal); } - std::string model_name () const { - return _model_name; - } - - std::string custom_device_mode () const { - return _custom_device_mode; - } + ARDOUR::InstrumentInfo& instrument_info() const; protected: /** Allows derived types to specify their visibility requirements @@ -381,12 +375,6 @@ private: uint8_t _current_range_min; uint8_t _current_range_max; - /// MIDNAM information of the current track: Model name of MIDNAM file - std::string _model_name; - - /// MIDNAM information of the current track: CustomDeviceMode - std::string _custom_device_mode; - typedef std::list<ArdourCanvas::CanvasNoteEvent*> Events; typedef std::vector< boost::shared_ptr<ArdourCanvas::CanvasPatchChange> > PatchChanges; typedef std::vector< boost::shared_ptr<ArdourCanvas::CanvasSysEx> > SysExes; diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 4678ea7c7b..df5d4b1b97 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -208,8 +208,12 @@ MidiTimeAxisView::set_route (boost::shared_ptr<Route> rt) _model_selector.set_active_text (gui_property (X_("midnam-model-name"))); _custom_device_mode_selector.set_active_text (gui_property (X_("midnam-custom-device-mode"))); + ARDOUR_UI::instance()->set_tip (_model_selector, _("external MIDI Device selector")); + ARDOUR_UI::instance()->set_tip (_custom_device_mode_selector, _("external MIDI Device Mode")); + midi_controls_hbox->pack_start(_channel_selector, true, false); if (!patch_manager.all_models().empty()) { + _midi_controls_box.set_border_width (5); _midi_controls_box.pack_start(_model_selector, true, false); _midi_controls_box.pack_start(_custom_device_mode_selector, true, false); } diff --git a/gtk2_ardour/patch_change_dialog.cc b/gtk2_ardour/patch_change_dialog.cc index 0ec12f93c2..4dd2a91d75 100644 --- a/gtk2_ardour/patch_change_dialog.cc +++ b/gtk2_ardour/patch_change_dialog.cc @@ -20,11 +20,17 @@ #include <gtkmm/stock.h> #include <gtkmm/table.h> + #include <boost/algorithm/string.hpp> + #include "gtkmm2ext/utils.h" + #include "ardour/midi_patch_manager.h" #include "ardour/beats_frames_converter.h" +#include "ardour/instrument_info.h" + #include "patch_change_dialog.h" + #include "i18n.h" using namespace std; @@ -36,14 +42,12 @@ PatchChangeDialog::PatchChangeDialog ( const ARDOUR::BeatsFramesConverter* tc, ARDOUR::Session* session, Evoral::PatchChange<Evoral::MusicalTime> const & patch, - string const & model_name, - string const & custom_device_node, + ARDOUR::InstrumentInfo& info, const Gtk::BuiltinStockID& ok ) : ArdourDialog (_("Patch Change"), true) , _time_converter (tc) - , _model_name (model_name) - , _custom_device_mode (custom_device_node) + , _info (info) , _time (X_("patchchangetime"), true, "", true, false) , _channel (*manage (new Adjustment (1, 1, 16, 1, 4))) , _program (*manage (new Adjustment (1, 1, 128, 1, 16))) @@ -139,12 +143,9 @@ PatchChangeDialog::patch () const void PatchChangeDialog::fill_bank_combo () { - MIDI::Name::ChannelNameSet::PatchBanks const * banks = get_banks (); - if (banks == 0) { - return; - } + boost::shared_ptr<MIDI::Name::ChannelNameSet> cns = _info.get_patches (_channel.get_value_as_int() - 1); - for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = banks->begin(); i != banks->end(); ++i) { + for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = cns->patch_banks().begin(); i != cns->patch_banks().end(); ++i) { string n = (*i)->name (); boost::replace_all (n, "_", " "); _bank_combo.append_text (n); @@ -157,12 +158,10 @@ PatchChangeDialog::set_active_bank_combo () { _current_patch_bank.reset (); - MIDI::Name::ChannelNameSet::PatchBanks const * banks = get_banks (); - if (banks == 0) { - return; - } + boost::shared_ptr<MIDI::Name::ChannelNameSet> cns = _info.get_patches (_channel.get_value_as_int() - 1); + + for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = cns->patch_banks().begin(); i != cns->patch_banks().end(); ++i) { - for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = banks->begin(); i != banks->end(); ++i) { string n = (*i)->name (); boost::replace_all (n, "_", " "); @@ -193,12 +192,9 @@ PatchChangeDialog::bank_combo_changed () _current_patch_bank.reset (); - MIDI::Name::ChannelNameSet::PatchBanks const * banks = get_banks (); - if (banks == 0) { - return; - } + boost::shared_ptr<MIDI::Name::ChannelNameSet> cns = _info.get_patches (_channel.get_value_as_int() - 1); - for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = banks->begin(); i != banks->end(); ++i) { + for (MIDI::Name::ChannelNameSet::PatchBanks::const_iterator i = cns->patch_banks().begin(); i != cns->patch_banks().end(); ++i) { string n = (*i)->name (); boost::replace_all (n, "_", " "); if (n == _bank_combo.get_active_text()) { @@ -327,17 +323,3 @@ PatchChangeDialog::bank_changed () set_active_patch_combo (); } -MIDI::Name::ChannelNameSet::PatchBanks const * -PatchChangeDialog::get_banks () -{ - MIDI::Name::MidiPatchManager& mpm = MIDI::Name::MidiPatchManager::instance (); - boost::shared_ptr<MIDI::Name::ChannelNameSet> channel_name_set = mpm.find_channel_name_set ( - _model_name, _custom_device_mode, _channel.get_value_as_int() - 1 - ); - - if (!channel_name_set) { - return 0; - } - - return &channel_name_set->patch_banks (); -} diff --git a/gtk2_ardour/patch_change_dialog.h b/gtk2_ardour/patch_change_dialog.h index 0691260126..1a0b63e51f 100644 --- a/gtk2_ardour/patch_change_dialog.h +++ b/gtk2_ardour/patch_change_dialog.h @@ -28,6 +28,7 @@ namespace ARDOUR { class BeatsFramesConverter; class Session; + class InstrumentInfo; } namespace MIDI { @@ -43,8 +44,7 @@ public: const ARDOUR::BeatsFramesConverter *, ARDOUR::Session *, Evoral::PatchChange<Evoral::MusicalTime> const &, - std::string const &, - std::string const &, + ARDOUR::InstrumentInfo&, const Gtk::BuiltinStockID & ); @@ -61,11 +61,8 @@ private: void bank_changed (); void program_changed (); - MIDI::Name::ChannelNameSet::PatchBanks const * get_banks (); - const ARDOUR::BeatsFramesConverter* _time_converter; - std::string _model_name; - std::string _custom_device_mode; + ARDOUR::InstrumentInfo& _info; AudioClock _time; Gtk::SpinButton _channel; Gtk::SpinButton _program; |