diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript index 60d5149493..fef196e5ba 100644 --- a/gtk2_ardour/SConscript +++ b/gtk2_ardour/SConscript @@ -200,6 +200,7 @@ midi_region_view.cc midi_scroomer.cc midi_streamview.cc midi_time_axis.cc +midi_patch_manager.cc mixer_strip.cc mixer_ui.cc new_session_dialog.cc diff --git a/gtk2_ardour/midi_patch_manager.cc b/gtk2_ardour/midi_patch_manager.cc new file mode 100644 index 0000000000..738441b631 --- /dev/null +++ b/gtk2_ardour/midi_patch_manager.cc @@ -0,0 +1,77 @@ +/* + Copyright (C) 2008 Hans Baier + + 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. + + $Id$ +*/ + +#include +#include + +#include "midi_patch_manager.h" +#include "pbd/file_utils.h" +#include "ardour/session.h" +#include "ardour/session_directory.h" + +using namespace std; +using namespace sigc; +using namespace ARDOUR; +using namespace MIDI; +using namespace MIDI::Name; +using namespace PBD; +using namespace PBD::sys; + +MidiPatchManager* MidiPatchManager::_manager = 0; + +void +MidiPatchManager::set_session (Session& s) +{ + _session = &s; + _session->GoingAway.connect (mem_fun (*this, &MidiPatchManager::drop_session)); + + refresh(); +} + +void +MidiPatchManager::refresh() +{ + _documents.clear(); + + path path_to_patches = _session->session_directory().midi_patch_path(); + + if(!exists(path_to_patches)) { + return; + } + + assert(is_directory(path_to_patches)); + + Glib::PatternSpec pattern(Glib::ustring("*.midnam")); + vector result; + + find_matching_files_in_directory(path_to_patches, pattern, result); + + for(vector::iterator i = result.begin(); i != result.end(); ++i) { + boost::shared_ptr document(new MIDINameDocument(i->to_string())); + _documents.push_back(document); + } +} + +void +MidiPatchManager::drop_session () +{ + _session = 0; + _documents.clear(); +} diff --git a/gtk2_ardour/midi_patch_manager.h b/gtk2_ardour/midi_patch_manager.h new file mode 100644 index 0000000000..ec82e932a8 --- /dev/null +++ b/gtk2_ardour/midi_patch_manager.h @@ -0,0 +1,71 @@ +/* + Copyright (C) 2008 Hans Baier + + 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. + + $Id$ +*/ + +#ifndef MIDI_PATCH_MANAGER_H_ +#define MIDI_PATCH_MANAGER_H_ + +#include "midi++/midnam_patch.h" + +namespace ARDOUR { + class Session; +} + +namespace MIDI +{ + +namespace Name +{ + +class MidiPatchManager +{ + /// Singleton +private: + MidiPatchManager() {}; + MidiPatchManager( const MidiPatchManager& ); + MidiPatchManager& operator= (const MidiPatchManager&); + + static MidiPatchManager* _manager; + +public: + typedef std::list > MidiNameDocuments; + + virtual ~MidiPatchManager() { _manager = 0; } + + static MidiPatchManager& instance() { + if (_manager == 0) { + _manager = new MidiPatchManager(); + } + return *_manager; + } + + void set_session (ARDOUR::Session&); + +private: + void drop_session(); + void refresh(); + + ARDOUR::Session* _session; + MidiNameDocuments _documents; +}; + +} // namespace Name + +} // namespace MIDI +#endif /* MIDI_PATCH_MANAGER_H_ */ diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 9453a05611..01505ad303 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -141,9 +141,9 @@ MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session& sess, boost::shar } // add channel selector expander - HBox *channel_selector_box = manage(new HBox()); - channel_selector_box->pack_start(_channel_selector, false, false); - _midi_expander.add(*channel_selector_box); + HBox *midi_expander_box = manage(new HBox()); + midi_expander_box->pack_start(_channel_selector, false, false); + _midi_expander.add(*midi_expander_box); _midi_expander.property_expanded().signal_changed().connect( mem_fun(this, &MidiTimeAxisView::channel_selector_toggled)); controls_vbox.pack_start(_midi_expander, false, false); diff --git a/libs/ardour/ardour/session_directory.h b/libs/ardour/ardour/session_directory.h index a4fb7d07c5..5c976374e3 100644 --- a/libs/ardour/ardour/session_directory.h +++ b/libs/ardour/ardour/session_directory.h @@ -61,6 +61,13 @@ public: * root_path()/interchange/session_name/midifiles */ const path midi_path () const; + + /** + * @return the absolute path to the directory in which + * the session stores MIDNAM patch files, ie + * root_path()/interchange/session_name/patchfiles + */ + const path midi_patch_path () const; /** * @return The absolute path to the directory in which all diff --git a/libs/ardour/directory_names.cc b/libs/ardour/directory_names.cc index 2b6dfcbb39..0480ddc8ba 100644 --- a/libs/ardour/directory_names.cc +++ b/libs/ardour/directory_names.cc @@ -7,6 +7,7 @@ namespace ARDOUR { const char* const old_sound_dir_name = X_("sounds"); const char* const sound_dir_name = X_("audiofiles"); const char* const midi_dir_name = X_("midifiles"); +const char* const midi_patch_dir_name = X_("patchfiles"); const char* const peak_dir_name = X_("peaks"); const char* const dead_sound_dir_name = X_("dead_sounds"); const char* const dead_midi_dir_name = X_("dead_midi"); diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index e7c2aecd2d..d4e995f0bf 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -478,7 +478,7 @@ PluginManager::vst_discover (string path) PluginInfoPtr info(new VSTPluginInfo); - /* what a goddam joke freeware VST is */ + /* what a joke freeware VST is */ if (!strcasecmp ("The Unnamed plugin", finfo->name)) { info->name = PBD::basename_nosuffix (path); diff --git a/libs/ardour/session_directory.cc b/libs/ardour/session_directory.cc index d5f2ddc1ba..50e213a4c2 100644 --- a/libs/ardour/session_directory.cc +++ b/libs/ardour/session_directory.cc @@ -106,6 +106,12 @@ SessionDirectory::midi_path () const return sources_root() / midi_dir_name; } +const path +SessionDirectory::midi_patch_path () const +{ + return sources_root() / midi_patch_path(); +} + const path SessionDirectory::peak_path () const { diff --git a/libs/midi++2/midi++/midnam_patch.h b/libs/midi++2/midi++/midnam_patch.h index 3abb6c6c54..2561d905eb 100644 --- a/libs/midi++2/midi++/midnam_patch.h +++ b/libs/midi++2/midi++/midnam_patch.h @@ -1,14 +1,34 @@ +/* + Copyright (C) 2008 Hans Baier + + 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. + + $Id$ +*/ + #ifndef MIDNAM_PATCH_H_ #define MIDNAM_PATCH_H_ -#include "pbd/stateful.h" -#include "midi++/event.h" -#include "pbd/xml++.h" - #include #include #include +#include "pbd/stateful.h" +#include "midi++/event.h" +#include "pbd/xml++.h" + namespace MIDI { diff --git a/libs/midi++2/midnam_patch.cc b/libs/midi++2/midnam_patch.cc index 758667d909..56b36b5919 100644 --- a/libs/midi++2/midnam_patch.cc +++ b/libs/midi++2/midnam_patch.cc @@ -1,3 +1,23 @@ +/* + Copyright (C) 2008 Hans Baier + + 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. + + $Id$ +*/ + #include "midi++/midnam_patch.h" #include