more nudges to the MIDI list editor

git-svn-id: svn://localhost/ardour2/branches/3.0@6454 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2010-01-05 14:56:42 +00:00
parent 51aec9a331
commit d93fc512ed
2 changed files with 52 additions and 12 deletions

View File

@ -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();

View File

@ -70,10 +70,14 @@ class MidiListEditor : public ArdourDialog
Glib::RefPtr<Gtk::ListStore> model;
Gtk::TreeView view;
Gtk::ScrolledWindow scroller;
Glib::ustring _current_edit;
boost::shared_ptr<ARDOUR::MidiRegion> region;
void edited (const Glib::ustring&, const Glib::ustring&);
void editing_started (Gtk::CellEditable*, const Glib::ustring& path, int);
void editing_canceled ();
void redisplay_model ();
bool key_press (GdkEventKey* ev);