mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-10 08:36:32 +01:00
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:
parent
51aec9a331
commit
d93fc512ed
2 changed files with 52 additions and 12 deletions
|
|
@ -19,6 +19,8 @@
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#include "evoral/midi_util.h"
|
#include "evoral/midi_util.h"
|
||||||
|
|
||||||
|
#include "ardour/beats_frames_converter.h"
|
||||||
#include "ardour/midi_region.h"
|
#include "ardour/midi_region.h"
|
||||||
#include "ardour/session.h"
|
#include "ardour/session.h"
|
||||||
#include "ardour/tempo.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) {
|
for (int i = 0; i < 6; ++i) {
|
||||||
CellRendererText* renderer = dynamic_cast<CellRendererText*>(view.get_column_cell_renderer (i));
|
CellRendererText* renderer = dynamic_cast<CellRendererText*>(view.get_column_cell_renderer (i));
|
||||||
renderer->property_editable() = true;
|
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));
|
renderer->signal_edited().connect (sigc::mem_fun (*this, &MidiListEditor::edited));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,21 +85,44 @@ MidiListEditor::~MidiListEditor ()
|
||||||
bool
|
bool
|
||||||
MidiListEditor::key_press (GdkEventKey* ev)
|
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
|
bool
|
||||||
MidiListEditor::key_release (GdkEventKey* ev)
|
MidiListEditor::key_release (GdkEventKey* ev)
|
||||||
{
|
{
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
switch (ev->keyval) {
|
switch (ev->keyval) {
|
||||||
case GDK_Delete:
|
case GDK_Delete:
|
||||||
delete_selected_note ();
|
delete_selected_note ();
|
||||||
|
ret = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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
|
void
|
||||||
MidiListEditor::edited (const Glib::ustring& path, const Glib::ustring& /* text */)
|
MidiListEditor::edited (const Glib::ustring& path, const Glib::ustring& /* text */)
|
||||||
{
|
{
|
||||||
|
|
@ -146,6 +188,7 @@ MidiListEditor::redisplay_model ()
|
||||||
|
|
||||||
if (_session) {
|
if (_session) {
|
||||||
|
|
||||||
|
BeatsFramesConverter conv (_session->tempo_map(), region->position());
|
||||||
MidiModel::Notes notes = region->midi_source(0)->model()->notes();
|
MidiModel::Notes notes = region->midi_source(0)->model()->notes();
|
||||||
TreeModel::Row row;
|
TreeModel::Row row;
|
||||||
stringstream ss;
|
stringstream ss;
|
||||||
|
|
@ -159,11 +202,8 @@ MidiListEditor::redisplay_model ()
|
||||||
|
|
||||||
BBT_Time bbt;
|
BBT_Time bbt;
|
||||||
double dur;
|
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.str ("");
|
||||||
ss << bbt;
|
ss << bbt;
|
||||||
|
|
@ -180,12 +220,8 @@ MidiListEditor::redisplay_model ()
|
||||||
ss << bbt;
|
ss << bbt;
|
||||||
row[columns.length] = ss.str();
|
row[columns.length] = ss.str();
|
||||||
|
|
||||||
bbt.bars = 0;
|
_session->tempo_map().bbt_time (conv.to ((*i)->end_time()), bbt);
|
||||||
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);
|
|
||||||
|
|
||||||
ss.str ("");
|
ss.str ("");
|
||||||
ss << bbt;
|
ss << bbt;
|
||||||
row[columns.end] = ss.str();
|
row[columns.end] = ss.str();
|
||||||
|
|
|
||||||
|
|
@ -70,10 +70,14 @@ class MidiListEditor : public ArdourDialog
|
||||||
Glib::RefPtr<Gtk::ListStore> model;
|
Glib::RefPtr<Gtk::ListStore> model;
|
||||||
Gtk::TreeView view;
|
Gtk::TreeView view;
|
||||||
Gtk::ScrolledWindow scroller;
|
Gtk::ScrolledWindow scroller;
|
||||||
|
Glib::ustring _current_edit;
|
||||||
|
|
||||||
boost::shared_ptr<ARDOUR::MidiRegion> region;
|
boost::shared_ptr<ARDOUR::MidiRegion> region;
|
||||||
|
|
||||||
void edited (const Glib::ustring&, const Glib::ustring&);
|
void edited (const Glib::ustring&, const Glib::ustring&);
|
||||||
|
void editing_started (Gtk::CellEditable*, const Glib::ustring& path, int);
|
||||||
|
void editing_canceled ();
|
||||||
|
|
||||||
void redisplay_model ();
|
void redisplay_model ();
|
||||||
|
|
||||||
bool key_press (GdkEventKey* ev);
|
bool key_press (GdkEventKey* ev);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue