summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-04-04 01:41:32 +0200
committerRobin Gareus <robin@gareus.org>2020-04-04 01:48:30 +0200
commit4e005540c689cd1791e5ea94901a31eb2bd65ec0 (patch)
treea0151b2240aff4398ae8383de11250cfb8b0220e /gtk2_ardour
parentd0a116b2ae1af29d16273be9ad6ec6e5fce95fbf (diff)
Update PatchChange when instrument/midnam changes
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/midi_region_view.cc16
-rw-r--r--gtk2_ardour/midi_region_view.h2
-rw-r--r--gtk2_ardour/patch_change.cc12
-rw-r--r--gtk2_ardour/patch_change.h38
4 files changed, 36 insertions, 32 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 7b9b8acf91..751733fcd3 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -1353,16 +1353,14 @@ MidiRegionView::display_patch_changes_on_channel (uint8_t channel, bool active_c
p->hide();
} else {
const double x = trackview.editor().sample_to_pixel (region_samples);
- const string patch_name = instrument_info().get_patch_name ((*i)->bank(), (*i)->program(), channel);
p->canvas_item()->set_position (ArdourCanvas::Duple (x, 1.0));
- p->set_text (patch_name);
+ p->update_name ();
p->show();
}
} else {
- const string patch_name = instrument_info().get_patch_name ((*i)->bank(), (*i)->program(), channel);
- add_canvas_patch_change (*i, patch_name, active_channel);
+ add_canvas_patch_change (*i);
}
}
}
@@ -1960,7 +1958,7 @@ MidiRegionView::step_sustain (Temporal::Beats beats)
* @param active_channel true to display the flag as on an active channel, false to grey it out for an inactive channel.
*/
void
-MidiRegionView::add_canvas_patch_change (MidiModel::PatchChangePtr patch, const string& displaytext, bool /*active_channel*/)
+MidiRegionView::add_canvas_patch_change (MidiModel::PatchChangePtr patch)
{
samplecnt_t region_samples = source_beats_to_region_samples (patch->time());
const double x = trackview.editor().sample_to_pixel (region_samples);
@@ -1973,9 +1971,7 @@ MidiRegionView::add_canvas_patch_change (MidiModel::PatchChangePtr patch, const
// up to date.
boost::shared_ptr<PatchChange> patch_change = boost::shared_ptr<PatchChange>(
new PatchChange(*this, group,
- displaytext,
- height,
- x, 1.0,
+ height, x, 1.0,
instrument_info(),
patch,
_patch_change_outline,
@@ -3707,6 +3703,10 @@ void
MidiRegionView::instrument_settings_changed ()
{
redisplay_model();
+
+ for (PatchChanges::iterator x = _patch_changes.begin(); x != _patch_changes.end(); ++x) {
+ (*x).second->update_name ();
+ }
}
void
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 6d5a6c2506..258abc93fd 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -131,7 +131,7 @@ public:
bool paste (samplepos_t pos, const ::Selection& selection, PasteContext& ctx, const int32_t sub_num);
void paste_internal (samplepos_t pos, unsigned paste_count, float times, const MidiCutBuffer&);
- void add_canvas_patch_change (ARDOUR::MidiModel::PatchChangePtr patch, const std::string& displaytext, bool);
+ void add_canvas_patch_change (ARDOUR::MidiModel::PatchChangePtr patch);
void remove_canvas_patch_change (PatchChange* pc);
/** Look up the given time and channel in the 'automation' and set keys accordingly.
diff --git a/gtk2_ardour/patch_change.cc b/gtk2_ardour/patch_change.cc
index cdf9887c85..42800fc7f2 100644
--- a/gtk2_ardour/patch_change.cc
+++ b/gtk2_ardour/patch_change.cc
@@ -46,7 +46,6 @@ using Gtkmm2ext::Keyboard;
*/
PatchChange::PatchChange(MidiRegionView& region,
ArdourCanvas::Container* parent,
- const string& text,
double height,
double x,
double y,
@@ -67,11 +66,12 @@ PatchChange::PatchChange(MidiRegionView& region,
ArdourCanvas::Duple (x, y),
true);
- CANVAS_DEBUG_NAME (_flag, text);
+ CANVAS_DEBUG_NAME (_flag, _info.get_patch_name (_patch->bank (), _patch->program (), _patch->channel ()));
_flag->Event.connect (sigc::mem_fun (*this, &PatchChange::event_handler));
_flag->set_font_description (UIConfiguration::instance().get_SmallFont());
- _flag->set_text(text);
+
+ update_name ();
}
PatchChange::~PatchChange()
@@ -80,6 +80,12 @@ PatchChange::~PatchChange()
}
void
+PatchChange::update_name ()
+{
+ _flag->set_text (_info.get_patch_name (_patch->bank (), _patch->program (), _patch->channel ()));
+}
+
+void
PatchChange::initialize_popup_menus()
{
using namespace MIDI::Name;
diff --git a/gtk2_ardour/patch_change.h b/gtk2_ardour/patch_change.h
index 06d610b98d..3e41f8ac86 100644
--- a/gtk2_ardour/patch_change.h
+++ b/gtk2_ardour/patch_change.h
@@ -34,38 +34,36 @@ namespace MIDI {
class PatchChange
{
public:
- PatchChange(MidiRegionView& region,
- ArdourCanvas::Container* parent,
- const std::string& text,
- double height,
- double x,
- double y,
- ARDOUR::InstrumentInfo& info,
- ARDOUR::MidiModel::PatchChangePtr patch,
- Gtkmm2ext::Color outline_color,
- Gtkmm2ext::Color fill_color);
+ PatchChange (MidiRegionView& region,
+ ArdourCanvas::Container* parent,
+ double height,
+ double x,
+ double y,
+ ARDOUR::InstrumentInfo& info,
+ ARDOUR::MidiModel::PatchChangePtr patch,
+ Gtkmm2ext::Color outline_color,
+ Gtkmm2ext::Color fill_color);
- ~PatchChange();
+ ~PatchChange ();
- void initialize_popup_menus();
-
- void on_patch_menu_selected(const MIDI::Name::PatchPrimaryKey& key);
+ void initialize_popup_menus ();
+ void on_patch_menu_selected (const MIDI::Name::PatchPrimaryKey& key);
void move (ArdourCanvas::Duple);
void set_height (ArdourCanvas::Distance);
void hide ();
void show ();
- double width() const { return _flag->width(); }
- void set_text (std::string const & s) { _flag->set_text (s); }
+ void update_name ();
- ARDOUR::MidiModel::PatchChangePtr patch() const { return _patch; }
- ArdourCanvas::Item* canvas_item() const { return _flag; }
- ArdourCanvas::Item& item() const { return *_flag; }
+ double width () const { return _flag->width (); }
+ ARDOUR::MidiModel::PatchChangePtr patch () const { return _patch; }
+ ArdourCanvas::Item* canvas_item () const { return _flag; }
+ ArdourCanvas::Item& item () const { return *_flag; }
private:
- bool event_handler (GdkEvent *);
+ bool event_handler (GdkEvent*);
MidiRegionView& _region;
ARDOUR::InstrumentInfo& _info;