Gtk::Image* focus_in_image;
bool no_load_preset;
- void setting_selected();
+ virtual void setting_selected ();
void add_plugin_setting ();
void save_plugin_setting ();
void delete_plugin_setting ();
Gtk::Socket socket;
Gtk::HBox preset_box;
Gtk::VBox vpacker;
- Gtk::ComboBox vst_preset_combo;
- Glib::RefPtr<Gtk::ListStore> preset_model;
-
- struct PresetModelColumns : public Gtk::TreeModel::ColumnRecord {
- PresetModelColumns() {
- add (name);
- add (number);
- }
- Gtk::TreeModelColumn<std::string> name;
- Gtk::TreeModelColumn<int> number;
- };
-
- PresetModelColumns preset_columns;
bool configure_handler (GdkEventConfigure*, Gtk::Socket*);
void save_plugin_setting ();
- void preset_chosen ();
- void update_presets ();
+ void setting_selected ();
};
#endif // VST_SUPPORT
: PlugUIBase (pi),
vst (vp)
{
- preset_model = ListStore::create (preset_columns);
-
- CellRenderer* renderer = manage (new CellRendererText());
- vst_preset_combo.pack_start (*renderer, true);
- vst_preset_combo.add_attribute (*renderer, "text", 0);
- vst_preset_combo.set_model (preset_model);
-
update_presets ();
fst_run_editor (vst->fst());
preset_box.set_spacing (6);
preset_box.set_border_width (6);
preset_box.pack_end (bypass_button, false, false, 10);
- preset_box.pack_end (edit_button, false, false);
+ preset_box.pack_end (delete_button, false, false);
preset_box.pack_end (save_button, false, false);
preset_box.pack_end (add_button, false, false);
- preset_box.pack_end (vst_preset_combo, false, false);
-
- vst_preset_combo.signal_changed().connect (sigc::mem_fun (*this, &VSTPluginUI::preset_chosen));
+ preset_box.pack_end (preset_combo, false, false);
bypass_button.set_active (!insert->active());
}
void
-VSTPluginUI::preset_chosen ()
+VSTPluginUI::setting_selected ()
{
- int const r = vst_preset_combo.get_active_row_number ();
+ int const r = preset_combo.get_active_row_number ();
if (r < vst->first_user_preset_index()) {
/* This is a plugin-provided preset.
vst->fst()->want_program = r;
} else {
/* This is a user preset. This method knows about the direct dispatch restriction, too */
- TreeModel::iterator i = vst_preset_combo.get_active ();
- plugin->load_preset ((*i)[preset_columns.name]);
+ plugin->load_preset (preset_combo.get_active_text());
}
socket.grab_focus ();
+ update_sensitivity ();
}
int
return false;
}
-void
-VSTPluginUI::update_presets ()
-{
- std::vector<Plugin::PresetRecord> presets = plugin->get_presets ();
-
- preset_model->clear ();
-
- int j = 0;
- for (std::vector<Plugin::PresetRecord>::const_iterator i = presets.begin(); i != presets.end(); ++i) {
- TreeModel::Row row = *(preset_model->append ());
- row[preset_columns.name] = i->label;
- row[preset_columns.number] = j++;
- }
-
- if (presets.size() > 0) {
- vst->fst()->plugin->dispatcher (vst->fst()->plugin, effSetProgram, 0, 0, NULL, 0);
- }
-
- if (vst->fst()->current_program != -1) {
- vst_preset_combo.set_active (vst->fst()->current_program);
- } else {
- vst_preset_combo.set_active (0);
- }
-}
-
typedef int (*error_handler_t)( Display *, XErrorEvent *);
static Display *the_gtk_display;
static error_handler_t wine_error_handler;
sys::path f = ARDOUR::user_config_directory ();
f /= "presets";
- f /= "vst";
+ f /= presets_file ();
+ cout << "Write presets to " << f.to_string () << "\n";
t->write (f.to_string ());
delete t;
return uri;
sys::path f = ARDOUR::user_config_directory ();
f /= "presets";
- f /= "vst";
+ f /= presets_file ();
+ cout << "Write presets to " << f.to_string () << "\n";
t->write (f.to_string ());
delete t;
}
create_directory (p);
}
- p /= "vst";
+ p /= presets_file ();
if (!exists (p)) {
t->set_root (new XMLNode (X_("VSTPresets")));
return _plugin->numPrograms;
}
+string
+VSTPlugin::presets_file () const
+{
+ return string_compose ("vst-%1", unique_id ());
+}
+
VSTPluginInfo::VSTPluginInfo()
{
type = ARDOUR::VST;
}
+