diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-08-27 03:09:30 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-08-27 03:09:30 +0000 |
commit | 3845af6ce92ef15637ffb09410f442e7b4a104c3 (patch) | |
tree | 218a29f23c83c3ac57c857d3b1f599f1e6d97a14 /gtk2_ardour/midi_list_editor.cc | |
parent | c6be9b688802198e04a07dc902c49d1d6b66340e (diff) |
lots of MIDI editing stuff. to be explained on the website when its done
git-svn-id: svn://localhost/ardour2/branches/3.0@5596 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_list_editor.cc')
-rw-r--r-- | gtk2_ardour/midi_list_editor.cc | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/gtk2_ardour/midi_list_editor.cc b/gtk2_ardour/midi_list_editor.cc new file mode 100644 index 0000000000..2db6cbd25e --- /dev/null +++ b/gtk2_ardour/midi_list_editor.cc @@ -0,0 +1,99 @@ +/* + Copyright (C) 2009 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "evoral/midi_util.h" +#include "ardour/midi_region.h" + +#include "midi_list_editor.h" + +#include "i18n.h" + +using namespace std; +using namespace Gtk; +using namespace Glib; +using namespace ARDOUR; + +MidiListEditor::MidiListEditor (boost::shared_ptr<MidiRegion> r) + : ArdourDialog (r->name(), false, false) + , region (r) +{ + model = ListStore::create (columns); + view.set_model (model); + + view.append_column (_("Channel"), columns.channel); + view.append_column (_("Note"), columns.note); + view.append_column (_("Name"), columns.note_name); + view.append_column (_("Velocity"), columns.velocity); + view.append_column (_("Start"), columns.start); + view.append_column (_("End"), columns.end); + view.append_column (_("Length"), columns.length); + view.set_headers_visible (true); + view.set_name (X_("MidiListView")); + view.set_rules_hint (true); + + for (int i = 0; i < 6; ++i) { + CellRendererText* renderer = dynamic_cast<CellRendererText*>(view.get_column_cell_renderer (i)); + renderer->property_editable() = true; + renderer->signal_edited().connect (mem_fun (*this, &MidiListEditor::edited)); + } + + scroller.add (view); + scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC); + + redisplay_model (); + + view.show (); + scroller.show (); + + get_vbox()->pack_start (scroller); + set_size_request (400, 400); +} + +MidiListEditor::~MidiListEditor () +{ +} + +void +MidiListEditor::edited (const Glib::ustring& /* path */, const Glib::ustring& /* text */) +{ + redisplay_model (); +} + +void +MidiListEditor::redisplay_model () +{ + view.set_model (Glib::RefPtr<Gtk::ListStore>(0)); + model->clear (); + + MidiModel::Notes notes = region->midi_source(0)->model()->notes(); + TreeModel::Row row; + + for (MidiModel::Notes::iterator i = notes.begin(); i != notes.end(); ++i) { + row = *(model->append()); + row[columns.channel] = (*i)->channel(); + row[columns.note_name] = Evoral::midi_note_name ((*i)->note()); + row[columns.note] = (*i)->note(); + row[columns.velocity] = (*i)->velocity(); + row[columns.start] = (*i)->time(); + row[columns.length] = (*i)->length(); + row[columns.end] = (*i)->end_time(); + } + + view.set_model (model); +} |