One table_edit_iface per table; start implementing a bridge class.

(cherry picked from commit 2019ae2d8f9636b7d5cdb0c1fdd5f0d6f2b47e3d)
This commit is contained in:
Krzysztof Foltman
2010-09-26 22:50:30 +01:00
committed by Tobias Doerffel
parent 16f24125fd
commit a572acb35f
6 changed files with 98 additions and 24 deletions

View File

@@ -225,22 +225,22 @@ struct table_column_info
struct table_edit_iface
{
/// retrieve the table layout for specific parameter
virtual const table_column_info *get_table_columns(int param) const = 0;
virtual const table_column_info *get_table_columns() const = 0;
/// return the current number of rows
virtual uint32_t get_table_rows(int param) const = 0;
virtual uint32_t get_table_rows() const = 0;
/// retrieve data item from the plugin
virtual std::string get_cell(int param, int row, int column) const;
virtual std::string get_cell(int row, int column) const;
/// set data item to the plugin
virtual void set_cell(int param, int row, int column, const std::string &src, std::string &error) const { error.clear(); }
virtual void set_cell(int row, int column, const std::string &src, std::string &error) { error.clear(); }
/// return a line graph interface for a specific parameter/column (unused for now)
virtual const line_graph_iface *get_graph_iface(int param, int column) const { return NULL; }
virtual const line_graph_iface *get_graph_iface(int column) const { return NULL; }
/// return an editor name for a specific grid cell (unused for now - I don't even know how editors be implemented)
virtual const char *get_cell_editor(int param, int column) const { return NULL; }
virtual const char *get_cell_editor(int column) const { return NULL; }
virtual ~table_edit_iface() {}
};
@@ -366,7 +366,7 @@ struct plugin_ctl_iface
/// @return line_graph_iface if any
virtual const line_graph_iface *get_line_graph_iface() const = 0;
/// @return table_edit_iface if any
virtual const table_edit_iface *get_table_edit_iface() const = 0;
virtual table_edit_iface *get_table_edit_iface(const char *key) = 0;
/// Do-nothing destructor to silence compiler warning
virtual ~plugin_ctl_iface() {}
};
@@ -447,8 +447,8 @@ struct audio_module_iface
virtual uint32_t message_run(const void *valid_ports, void *output_ports) = 0;
/// @return line_graph_iface if any
virtual const line_graph_iface *get_line_graph_iface() const = 0;
/// @return table_edit_iface if any
virtual const table_edit_iface *get_table_edit_iface() const = 0;
/// @return table_edit_iface if any for given parameter
virtual table_edit_iface *get_table_edit_iface(const char *key) = 0;
virtual ~audio_module_iface() {}
};
@@ -548,7 +548,8 @@ public:
}
/// @return line_graph_iface if any
virtual const line_graph_iface *get_line_graph_iface() const { return dynamic_cast<const line_graph_iface *>(this); }
virtual const table_edit_iface *get_table_edit_iface() const { return dynamic_cast<const table_edit_iface *>(this); }
virtual table_edit_iface *get_table_edit_iface(const char *key) { const char *key_us = get_table_edit_iface_key(); return (key_us && !strcmp(key, key_us)) ? dynamic_cast<table_edit_iface *>(this) : NULL; }
virtual const char *get_table_edit_iface_key() const { return NULL; }
};
#if USE_EXEC_GUI || USE_DSSI
@@ -677,6 +678,28 @@ struct preset_access_iface
virtual ~preset_access_iface() {}
};
#if USE_EXEC_GUI
class table_via_configure: public table_edit_iface
{
protected:
typedef std::pair<int, int> coord;
std::vector<table_column_info> columns;
std::map<coord, std::string> values;
int rows;
public:
table_via_configure();
void configure(const char *key, const char *value);
virtual const table_column_info *get_table_columns() const;
virtual uint32_t get_table_rows() const;
virtual std::string get_cell(int row, int column) const;
virtual void set_cell(int row, int column, const std::string &src, std::string &error);
virtual const line_graph_iface *get_graph_iface(int column) const;
virtual const char *get_cell_editor(int column) const;
virtual ~table_via_configure();
};
#endif
};
#endif

View File

@@ -48,7 +48,7 @@ struct ladspa_instance: public plugin_ctl_iface
ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate);
virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); }
virtual const table_edit_iface *get_table_edit_iface() const { return module->get_table_edit_iface(); }
virtual table_edit_iface *get_table_edit_iface(const char *key) { return module->get_table_edit_iface(key); }
virtual float get_param_value(int param_no);
virtual void set_param_value(int param_no, float value);
virtual bool activate_preset(int bank, int program);

View File

@@ -160,7 +160,7 @@ struct lv2_instance: public plugin_ctl_iface, public progress_report_iface
}
virtual const plugin_metadata_iface *get_metadata_iface() const { return metadata; }
virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); }
virtual const table_edit_iface *get_table_edit_iface() const { return module->get_table_edit_iface(); }
virtual table_edit_iface *get_table_edit_iface(const char *key) { return module->get_table_edit_iface(key); }
virtual int send_status_updates(send_updates_iface *sui, int last_serial) { return module->send_status_updates(sui, last_serial); }
};

View File

@@ -84,10 +84,10 @@ protected:
mod_matrix(dsp::modulation_entry *_matrix, unsigned int _rows, const char **_src_names, const char **_dest_names);
public:
virtual const table_column_info *get_table_columns(int param) const;
virtual uint32_t get_table_rows(int param) const;
virtual std::string get_cell(int param, int row, int column) const;
virtual void set_cell(int param, int row, int column, const std::string &src, std::string &error) const;
virtual const table_column_info *get_table_columns() const;
virtual uint32_t get_table_rows() const;
virtual std::string get_cell(int row, int column) const;
virtual void set_cell(int row, int column, const std::string &src, std::string &error);
/// Process modulation matrix, calculate outputs from inputs
inline void calculate_modmatrix(float *moddest, int moddest_count, float *modsrc)

View File

@@ -194,8 +194,11 @@ void calf_plugins::plugin_ctl_iface::clear_preset() {
set_param_value(i, pp.def_value);
}
const char *const *vars = get_metadata_iface()->get_configure_vars();
for (int i = 0; vars[i]; i++)
configure(vars[i], NULL);
if (vars)
{
for (int i = 0; vars[i]; i++)
configure(vars[i], NULL);
}
}
const char *calf_plugins::load_gui_xml(const std::string &plugin_id)
@@ -205,10 +208,10 @@ const char *calf_plugins::load_gui_xml(const std::string &plugin_id)
return strdup(calf_utils::load_file((std::string(PKGLIBDIR) + "/gui-" + plugin_id + ".xml").c_str()).c_str());
}
catch(file_exception e)
#endif
{
return NULL;
}
#endif
}
bool calf_plugins::get_freq_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context, bool use_frequencies)
@@ -318,7 +321,7 @@ const plugin_metadata_iface *calf_plugins::plugin_registry::get_by_id(const char
}
///////////////////////////////////////////////////////////////////////////////////////
std::string table_edit_iface::get_cell(int param, int row, int column) const
std::string table_edit_iface::get_cell(int row, int column) const
{
return calf_utils::i2s(row)+":"+calf_utils::i2s(column);
}
@@ -427,4 +430,52 @@ calf_plugins::dssi_feedback_sender::~dssi_feedback_sender()
delete client;
}
table_via_configure::table_via_configure()
{
rows = 0;
}
const table_column_info *table_via_configure::get_table_columns() const
{
return &columns[0];
}
uint32_t table_via_configure::get_table_rows() const
{
return rows;
}
string table_via_configure::get_cell(int row, int column) const
{
if (row >= rows)
return string();
coord c = make_pair(row, column);
std::map<coord, std::string>::const_iterator i = values.find(c);
if (i == values.end())
return std::string();
else
return i->second;
}
void table_via_configure::set_cell(int row, int column, const std::string &src, std::string &error)
{
coord c = make_pair(row, column);
values[c] = src;
error = "";
}
const line_graph_iface *table_via_configure::get_graph_iface(int column) const
{
return NULL;
}
const char *table_via_configure::get_cell_editor(int column) const
{
return NULL;
}
table_via_configure::~table_via_configure()
{
}
#endif

View File

@@ -60,17 +60,17 @@ mod_matrix::mod_matrix(modulation_entry *_matrix, unsigned int _rows, const char
matrix[i].reset();
}
const table_column_info *mod_matrix::get_table_columns(int param) const
const table_column_info *mod_matrix::get_table_columns() const
{
return table_columns;
}
uint32_t mod_matrix::get_table_rows(int param) const
uint32_t mod_matrix::get_table_rows() const
{
return matrix_rows;
}
std::string mod_matrix::get_cell(int param, int row, int column) const
std::string mod_matrix::get_cell(int row, int column) const
{
assert(row >= 0 && row < (int)matrix_rows);
modulation_entry &slot = matrix[row];
@@ -91,7 +91,7 @@ std::string mod_matrix::get_cell(int param, int row, int column) const
}
}
void mod_matrix::set_cell(int param, int row, int column, const std::string &src, std::string &error) const
void mod_matrix::set_cell(int row, int column, const std::string &src, std::string &error)
{
assert(row >= 0 && row < (int)matrix_rows);
modulation_entry &slot = matrix[row];