diff options
author | Hans Baier <hansfbaier@googlemail.com> | 2012-10-11 03:22:17 +0000 |
---|---|---|
committer | Hans Baier <hansfbaier@googlemail.com> | 2012-10-11 03:22:17 +0000 |
commit | 97c23848d7d4126dc948caac47476317d6752e4d (patch) | |
tree | 1c5eaa7d4d1041bab6bf9b97d9b4ee552c5e12d8 /gtk2_ardour | |
parent | 9707a0e8271a54dd21e49d6ca9ae98378ac4f8a5 (diff) |
implement deleting of sysex events
git-svn-id: svn://localhost/ardour2/branches/3.0@13238 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/canvas-flag.h | 18 | ||||
-rw-r--r-- | gtk2_ardour/canvas-sysex.cc | 30 | ||||
-rw-r--r-- | gtk2_ardour/canvas-sysex.h | 9 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 15 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.h | 2 |
5 files changed, 61 insertions, 13 deletions
diff --git a/gtk2_ardour/canvas-flag.h b/gtk2_ardour/canvas-flag.h index 4ad41ec883..f82e6a9504 100644 --- a/gtk2_ardour/canvas-flag.h +++ b/gtk2_ardour/canvas-flag.h @@ -19,27 +19,27 @@ class CanvasFlag : public Group { public: CanvasFlag (MidiRegionView& region, - Group& parent, - double height, - guint outline_color_rgba = 0xc0c0c0ff, - guint fill_color_rgba = 0x07070707, - double x = 0.0, - double y = 0.0); + Group& parent, + double height, + guint outline_color_rgba = 0xc0c0c0ff, + guint fill_color_rgba = 0x07070707, + double x = 0.0, + double y = 0.0); virtual ~CanvasFlag(); virtual void set_text(const std::string& a_text); virtual void set_height (double); - int width () const { return name_pixbuf_width + 10.0; } - + int width () const { return name_pixbuf_width + 10.0; } + protected: ArdourCanvas::Pixbuf* _name_pixbuf; double _height; guint _outline_color_rgba; guint _fill_color_rgba; MidiRegionView& _region; - int name_pixbuf_width; + int name_pixbuf_width; private: void delete_allocated_objects(); diff --git a/gtk2_ardour/canvas-sysex.cc b/gtk2_ardour/canvas-sysex.cc index 667b493d5c..f8948d596e 100644 --- a/gtk2_ardour/canvas-sysex.cc +++ b/gtk2_ardour/canvas-sysex.cc @@ -21,6 +21,7 @@ #include "ardour_ui.h" +#include "midi_region_view.h" #include "canvas-sysex.h" using namespace Gnome::Canvas; @@ -32,7 +33,8 @@ CanvasSysEx::CanvasSysEx( string& text, double height, double x, - double y) + double y, + const ARDOUR::MidiModel::SysExPtr sysex) : CanvasFlag( region, parent, @@ -40,7 +42,8 @@ CanvasSysEx::CanvasSysEx( ARDOUR_UI::config()->canvasvar_MidiSysExOutline.get(), ARDOUR_UI::config()->canvasvar_MidiSysExFill.get(), x, - y) + y), + _sysex(sysex) { set_text(text); } @@ -67,6 +70,29 @@ CanvasSysEx::on_event(GdkEvent* ev) } break; + case GDK_KEY_PRESS: + switch (ev->key.keyval) { + + case GDK_Delete: + case GDK_BackSpace: + _region.delete_sysex (this); + break; + default: + break; + } + break; + + case GDK_ENTER_NOTIFY: + grab_focus(); + return true; + break; + + case GDK_LEAVE_NOTIFY: + /* focus will transfer back via the enter-notify + * event sent to the midi region view. + */ + break; + default: break; } diff --git a/gtk2_ardour/canvas-sysex.h b/gtk2_ardour/canvas-sysex.h index 718f81fd6a..6cee8df97b 100644 --- a/gtk2_ardour/canvas-sysex.h +++ b/gtk2_ardour/canvas-sysex.h @@ -23,6 +23,7 @@ #include <string> #include "canvas-flag.h" +#include "ardour/midi_model.h" class MidiRegionView; @@ -38,11 +39,17 @@ public: std::string& text, double height, double x, - double y); + double y, + ARDOUR::MidiModel::SysExPtr sysex); virtual ~CanvasSysEx(); + const ARDOUR::MidiModel::SysExPtr sysex() const { return _sysex; } + virtual bool on_event(GdkEvent* ev); + +private: + const ARDOUR::MidiModel::SysExPtr _sysex; }; } // namespace Canvas diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 0ede957a45..ce29e6dcba 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -48,6 +48,7 @@ #include "canvas-hit.h" #include "canvas-note.h" #include "canvas_patch_change.h" +#include "canvas-sysex.h" #include "debug.h" #include "editor.h" #include "editor_drag.h" @@ -1296,7 +1297,7 @@ MidiRegionView::display_sysexes() double height = midi_stream_view()->contents_height(); boost::shared_ptr<CanvasSysEx> sysex = boost::shared_ptr<CanvasSysEx>( - new CanvasSysEx(*this, *_note_group, text, height, x, 1.0)); + new CanvasSysEx(*this, *_note_group, text, height, x, 1.0, (*i))); // Show unless message is beyond the region bounds if (time - _region->start() >= _region->length() || time < _region->start()) { @@ -3752,6 +3753,18 @@ MidiRegionView::edit_patch_change (ArdourCanvas::CanvasPatchChange* pc) change_patch_change (pc->patch(), d.patch ()); } +void +MidiRegionView::delete_sysex (CanvasSysEx* sysex) +{ + cerr << "about to delete sysex " << sysex->sysex() << endl; + + MidiModel::SysExDiffCommand* c = _model->new_sysex_diff_command (_("delete sysex")); + c->remove (sysex->sysex()); + _model->apply_command (*trackview.session(), c); + + _sys_exes.clear (); + display_sysexes(); +} void MidiRegionView::show_verbose_cursor (boost::shared_ptr<NoteType> n) const diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 7674ea245f..f3dd827b19 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -145,6 +145,8 @@ public: void delete_patch_change (ArdourCanvas::CanvasPatchChange *); void edit_patch_change (ArdourCanvas::CanvasPatchChange *); + void delete_sysex (ArdourCanvas::CanvasSysEx*); + /** Alter a given patch to be its predecessor in the MIDNAM file. */ void previous_patch (ArdourCanvas::CanvasPatchChange &); |