[SCM] calf/master: One table_edit_iface per table; start implementing a bridge class.

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:40:26 UTC 2013


The following commit has been merged in the master branch:
commit 2019ae2d8f9636b7d5cdb0c1fdd5f0d6f2b47e3d
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Sun Sep 26 22:50:30 2010 +0100

    One table_edit_iface per table; start implementing a bridge class.

diff --git a/src/calf/giface.h b/src/calf/giface.h
index 55e8323..4bb5df9 100644
--- a/src/calf/giface.h
+++ b/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<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
diff --git a/src/calf/gui_controls.h b/src/calf/gui_controls.h
index 24a5f00..f087ea2 100644
--- a/src/calf/gui_controls.h
+++ b/src/calf/gui_controls.h
@@ -275,7 +275,7 @@ struct listview_param_control: public param_control, public send_configure_iface
 {
     GtkTreeView *tree;
     GtkListStore *lstore;
-    const calf_plugins::table_edit_iface *teif;
+    calf_plugins::table_edit_iface *teif;
     int cols;
     std::vector<GtkTreeIter> positions;
     
diff --git a/src/calf/jackhost.h b/src/calf/jackhost.h
index 2831e97..83913e3 100644
--- a/src/calf/jackhost.h
+++ b/src/calf/jackhost.h
@@ -128,7 +128,7 @@ public:
     virtual int send_status_updates(send_updates_iface *sui, int last_serial) { return module->send_status_updates(sui, last_serial); }
     virtual const plugin_metadata_iface *get_metadata_iface() const { return module->get_metadata_iface(); }
     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); }
 };
 
 extern jack_host *create_jack_host(const char *name, const std::string &instance_name, calf_plugins::progress_report_iface *priface);
diff --git a/src/calf/ladspa_wrap.h b/src/calf/ladspa_wrap.h
index 8859b98..7908ab1 100644
--- a/src/calf/ladspa_wrap.h
+++ b/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/src/calf/lv2wrap.h b/src/calf/lv2wrap.h
index c43237f..638eead 100644
--- a/src/calf/lv2wrap.h
+++ b/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/src/calf/modmatrix.h b/src/calf/modmatrix.h
index 5db95fc..17ebfd6 100644
--- a/src/calf/modmatrix.h
+++ b/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/src/dssigui.cpp b/src/dssigui.cpp
index b1daf98..81c6736 100644
--- a/src/dssigui.cpp
+++ b/src/dssigui.cpp
@@ -205,7 +205,7 @@ struct plugin_proxy: public plugin_ctl_iface, public line_graph_iface
         }
     }
     virtual const line_graph_iface *get_line_graph_iface() const { return this; }
-    virtual const table_edit_iface *get_table_edit_iface() const { return NULL; } // not supported in external UIs yet
+    virtual table_edit_iface *get_table_edit_iface(const char *key) { return NULL; } // not supported in external UIs yet
     virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const;
     virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const;
     virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const;
diff --git a/src/giface.cpp b/src/giface.cpp
index d661588..977ce06 100644
--- a/src/giface.cpp
+++ b/src/giface.cpp
@@ -319,7 +319,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);
 }
@@ -428,4 +428,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
diff --git a/src/gui_controls.cpp b/src/gui_controls.cpp
index 93b8d18..627d451 100644
--- a/src/gui_controls.cpp
+++ b/src/gui_controls.cpp
@@ -938,8 +938,8 @@ GtkWidget *listview_param_control::create(plugin_gui *_gui, int _param_no)
     gui = _gui;
     param_no = _param_no;
     
-    teif = gui->plugin->get_table_edit_iface();
-    const table_column_info *tci = teif->get_table_columns(param_no);
+    teif = gui->plugin->get_table_edit_iface(param_variable.c_str());
+    const table_column_info *tci = teif->get_table_columns();
     assert(tci);
     cols = 0;
     while (tci[cols].name != NULL)
@@ -986,14 +986,14 @@ GtkWidget *listview_param_control::create(plugin_gui *_gui, int _param_no)
 void listview_param_control::update_store()
 {
     gtk_list_store_clear(lstore);
-    uint32_t rows = teif->get_table_rows(param_no);
+    uint32_t rows = teif->get_table_rows();
     for (uint32_t i = 0; i < rows; i++)
     {
         GtkTreeIter iter;
         gtk_list_store_insert(lstore, &iter, i);
         for (int j = 0; j < cols; j++)
         {
-            gtk_list_store_set(lstore, &iter, j, teif->get_cell(param_no, i, j).c_str(), -1);
+            gtk_list_store_set(lstore, &iter, j, teif->get_cell(i, j).c_str(), -1);
         }
         positions.push_back(iter);
     }
@@ -1009,14 +1009,14 @@ void listview_param_control::send_configure(const char *key, const char *value)
 
 void listview_param_control::on_edited(GtkCellRenderer *renderer, gchar *path, gchar *new_text, listview_param_control *pThis)
 {
-    const table_column_info *tci = pThis->teif->get_table_columns(pThis->param_no);
+    const table_column_info *tci = pThis->teif->get_table_columns();
     int column = ((table_column_info *)g_object_get_data(G_OBJECT(renderer), "column")) - tci;
     string error;
-    pThis->teif->set_cell(pThis->param_no, atoi(path), column, new_text, error);
+    pThis->teif->set_cell(atoi(path), column, new_text, error);
     if (error.empty()) {
         pThis->update_store();
         gtk_widget_grab_focus(pThis->widget);
-        if (atoi(path) < (int)pThis->teif->get_table_rows(pThis->param_no))
+        if (atoi(path) < (int)pThis->teif->get_table_rows())
         {
             GtkTreePath *gpath = gtk_tree_path_new_from_string (path);
             gtk_tree_view_set_cursor_on_cell (GTK_TREE_VIEW (pThis->widget), gpath, NULL, NULL, FALSE);
diff --git a/src/lv2gui.cpp b/src/lv2gui.cpp
index a8cac50..f75fa68 100644
--- a/src/lv2gui.cpp
+++ b/src/lv2gui.cpp
@@ -93,7 +93,7 @@ struct plugin_proxy_base
     const line_graph_iface *get_line_graph_iface() const;
     
     /// Obtain line graph interface if available
-    const table_edit_iface *get_table_edit_iface() const;
+    const table_edit_iface *get_table_edit_iface(const char *key) const;
     
     /// Map an URI to an integer value using a given URI map
     uint32_t map_uri(const char *mapURI, const char *keyURI);
@@ -177,10 +177,10 @@ const line_graph_iface *plugin_proxy_base::get_line_graph_iface() const
     return NULL;
 }
 
-const table_edit_iface *plugin_proxy_base::get_table_edit_iface() const
+const table_edit_iface *plugin_proxy_base::get_table_edit_iface(const char *key) const
 {
     if (instance)
-        return instance->get_table_edit_iface();
+        return instance->get_table_edit_iface(key);
     return NULL;
 }
 
@@ -250,7 +250,7 @@ struct lv2_plugin_proxy: public plugin_ctl_iface, public plugin_proxy_base, publ
     /// Override for a method in plugin_ctl_iface - trivial delegation to base class
     virtual const line_graph_iface *get_line_graph_iface() const { return plugin_proxy_base::get_line_graph_iface(); }
     /// Override for a method in plugin_ctl_iface - trivial delegation to base class
-    virtual const table_edit_iface *get_table_edit_iface() const { return plugin_proxy_base::get_table_edit_iface(); }
+    virtual const table_edit_iface *get_table_edit_iface(const char *key) const { return plugin_proxy_base::get_table_edit_iface(key); }
 };
 
 static gboolean plugin_on_idle(void *data)
diff --git a/src/modmatrix.cpp b/src/modmatrix.cpp
index 2ef798a..64ef330 100644
--- a/src/modmatrix.cpp
+++ b/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];

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list