diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-01-05 14:56:42 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-01-05 14:56:42 +0000 |
commit | d93fc512ede39a82f2c9e226da7aaeedd28f8f26 (patch) | |
tree | 08c5c3e0b0151c0e4f89488dcdfa9349f89b5485 /gtk2_ardour/midi_list_editor.cc | |
parent | 51aec9a331a4fc2f023921c4754000d144b4484d (diff) |
more nudges to the MIDI list editor
git-svn-id: svn://localhost/ardour2/branches/3.0@6454 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_list_editor.cc')
-rw-r--r-- | gtk2_ardour/midi_list_editor.cc | 60 |
1 files changed, 48 insertions, 12 deletions
diff --git a/gtk2_ardour/midi_list_editor.cc b/gtk2_ardour/midi_list_editor.cc index c35a944b15..7360ad703e 100644 --- a/gtk2_ardour/midi_list_editor.cc +++ b/gtk2_ardour/midi_list_editor.cc @@ -19,6 +19,8 @@ #include <cmath> #include "evoral/midi_util.h" + +#include "ardour/beats_frames_converter.h" #include "ardour/midi_region.h" #include "ardour/session.h" #include "ardour/tempo.h" @@ -58,6 +60,9 @@ MidiListEditor::MidiListEditor (Session* s, boost::shared_ptr<MidiRegion> r) for (int i = 0; i < 6; ++i) { CellRendererText* renderer = dynamic_cast<CellRendererText*>(view.get_column_cell_renderer (i)); renderer->property_editable() = true; + + renderer->signal_editing_started().connect (sigc::bind (sigc::mem_fun (*this, &MidiListEditor::editing_started), i)); + renderer->signal_editing_canceled().connect (sigc::mem_fun (*this, &MidiListEditor::editing_canceled)); renderer->signal_edited().connect (sigc::mem_fun (*this, &MidiListEditor::edited)); } @@ -80,21 +85,44 @@ MidiListEditor::~MidiListEditor () bool MidiListEditor::key_press (GdkEventKey* ev) { - return true; + bool editing = !_current_edit.empty(); + bool ret = false; + + if (editing) { + switch (ev->keyval) { + case GDK_Tab: + break; + case GDK_Right: + break; + case GDK_Left: + break; + case GDK_Up: + break; + case GDK_Down: + break; + case GDK_Escape: + break; + } + } + + return ret; } bool MidiListEditor::key_release (GdkEventKey* ev) { + bool ret = false; + switch (ev->keyval) { case GDK_Delete: delete_selected_note (); + ret = true; break; default: break; } - return true; + return ret; } void @@ -118,6 +146,20 @@ MidiListEditor::delete_selected_note () } } + +void +MidiListEditor::editing_started (CellEditable*, const ustring& path, int colno) +{ + _current_edit = path; + cerr << "Now editing " << _current_edit << " Column " << colno << endl; +} + +void +MidiListEditor::editing_canceled () +{ + _current_edit = ""; +} + void MidiListEditor::edited (const Glib::ustring& path, const Glib::ustring& /* text */) { @@ -146,6 +188,7 @@ MidiListEditor::redisplay_model () if (_session) { + BeatsFramesConverter conv (_session->tempo_map(), region->position()); MidiModel::Notes notes = region->midi_source(0)->model()->notes(); TreeModel::Row row; stringstream ss; @@ -159,11 +202,8 @@ MidiListEditor::redisplay_model () BBT_Time bbt; double dur; - bbt.bars = 0; - bbt.beats = (uint32_t) floor ((*i)->time()); - bbt.ticks = (uint32_t) lrint (fmod ((*i)->time(), 1.0) * Meter::ticks_per_beat); - _session->tempo_map().bbt_time (region->position(), bbt); + _session->tempo_map().bbt_time (conv.to ((*i)->time()), bbt); ss.str (""); ss << bbt; @@ -180,12 +220,8 @@ MidiListEditor::redisplay_model () ss << bbt; row[columns.length] = ss.str(); - bbt.bars = 0; - bbt.beats = (uint32_t) floor ((*i)->end_time()); - bbt.ticks = (uint32_t) lrint (fmod ((*i)->end_time(), 1.0) * Meter::ticks_per_beat); - - _session->tempo_map().bbt_time (region->position(), bbt); - + _session->tempo_map().bbt_time (conv.to ((*i)->end_time()), bbt); + ss.str (""); ss << bbt; row[columns.end] = ss.str(); |