summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/canvas-flag.h18
-rw-r--r--gtk2_ardour/canvas-sysex.cc30
-rw-r--r--gtk2_ardour/canvas-sysex.h9
-rw-r--r--gtk2_ardour/midi_region_view.cc15
-rw-r--r--gtk2_ardour/midi_region_view.h2
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 &);