summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-11 22:59:35 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-11 22:59:35 +0000
commitd97312d438a813985916dd35f613510e9448441f (patch)
tree5be2844fc16359c2eb550b72c9f84737c534d614 /gtk2_ardour
parentc81691741118ab34c5f6f458c2d84f431e481ada (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.cc51
-rw-r--r--gtk2_ardour/canvas_patch_change.h12
-rw-r--r--gtk2_ardour/editor_ops.cc5
-rw-r--r--gtk2_ardour/midi_region_view.cc25
-rw-r--r--gtk2_ardour/midi_region_view.h14
-rw-r--r--gtk2_ardour/midi_time_axis.cc4
-rw-r--r--gtk2_ardour/patch_change_dialog.cc48
-rw-r--r--gtk2_ardour/patch_change_dialog.h9
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;