From a572acb35f9e9fb54b0a5239252d6745f87453d4 Mon Sep 17 00:00:00 2001 From: Krzysztof Foltman Date: Sun, 26 Sep 2010 22:50:30 +0100 Subject: [PATCH] One table_edit_iface per table; start implementing a bridge class. (cherry picked from commit 2019ae2d8f9636b7d5cdb0c1fdd5f0d6f2b47e3d) --- plugins/ladspa_effect/calf/src/calf/giface.h | 43 ++++++++++---- .../ladspa_effect/calf/src/calf/ladspa_wrap.h | 2 +- plugins/ladspa_effect/calf/src/calf/lv2wrap.h | 2 +- .../ladspa_effect/calf/src/calf/modmatrix.h | 8 +-- plugins/ladspa_effect/calf/src/giface.cpp | 59 +++++++++++++++++-- plugins/ladspa_effect/calf/src/modmatrix.cpp | 8 +-- 6 files changed, 98 insertions(+), 24 deletions(-) diff --git a/plugins/ladspa_effect/calf/src/calf/giface.h b/plugins/ladspa_effect/calf/src/calf/giface.h index 55e8323e5..4bb5df90e 100644 --- a/plugins/ladspa_effect/calf/src/calf/giface.h +++ b/plugins/ladspa_effect/calf/src/calf/giface.h @@ -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(this); } - virtual const table_edit_iface *get_table_edit_iface() const { return dynamic_cast(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(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 coord; + std::vector columns; + std::map 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 diff --git a/plugins/ladspa_effect/calf/src/calf/ladspa_wrap.h b/plugins/ladspa_effect/calf/src/calf/ladspa_wrap.h index 8859b989a..7908ab103 100644 --- a/plugins/ladspa_effect/calf/src/calf/ladspa_wrap.h +++ b/plugins/ladspa_effect/calf/src/calf/ladspa_wrap.h @@ -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); diff --git a/plugins/ladspa_effect/calf/src/calf/lv2wrap.h b/plugins/ladspa_effect/calf/src/calf/lv2wrap.h index c43237fa9..638eeadd0 100644 --- a/plugins/ladspa_effect/calf/src/calf/lv2wrap.h +++ b/plugins/ladspa_effect/calf/src/calf/lv2wrap.h @@ -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); } }; diff --git a/plugins/ladspa_effect/calf/src/calf/modmatrix.h b/plugins/ladspa_effect/calf/src/calf/modmatrix.h index 5db95fc92..17ebfd6c6 100644 --- a/plugins/ladspa_effect/calf/src/calf/modmatrix.h +++ b/plugins/ladspa_effect/calf/src/calf/modmatrix.h @@ -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) diff --git a/plugins/ladspa_effect/calf/src/giface.cpp b/plugins/ladspa_effect/calf/src/giface.cpp index 0823a48b6..f9324e7db 100644 --- a/plugins/ladspa_effect/calf/src/giface.cpp +++ b/plugins/ladspa_effect/calf/src/giface.cpp @@ -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::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 diff --git a/plugins/ladspa_effect/calf/src/modmatrix.cpp b/plugins/ladspa_effect/calf/src/modmatrix.cpp index 2ef798aca..64ef330bb 100644 --- a/plugins/ladspa_effect/calf/src/modmatrix.cpp +++ b/plugins/ladspa_effect/calf/src/modmatrix.cpp @@ -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];