[beast: 18/49] BSE: bseapi.idl: introduce SNet



commit 6ac2e3fe034d36226ad221db186f2cad2ebc25db
Author: Tim Janik <timj gnu org>
Date:   Mon Jun 22 15:54:54 2015 +0200

    BSE: bseapi.idl: introduce SNet

 beast-gtk/bstsupershell.cc |   15 ++++++++-------
 bse/bseapi.idl             |    5 +++++
 bse/bseobject.cc           |    3 +++
 bse/bsesnet.cc             |   18 ++++++++++++++++++
 bse/bsesnet.hh             |   13 ++++++++++++-
 bse/bsesnet.proc           |   23 -----------------------
 6 files changed, 46 insertions(+), 31 deletions(-)
---
diff --git a/beast-gtk/bstsupershell.cc b/beast-gtk/bstsupershell.cc
index 5f06742..58842bb 100644
--- a/beast-gtk/bstsupershell.cc
+++ b/beast-gtk/bstsupershell.cc
@@ -189,21 +189,22 @@ static void
 super_shell_build_snet (BstSuperShell *self,
                         GtkNotebook   *notebook)
 {
-  SfiProxy snet = self->super;
+  Bse::SNetH snet = Bse::SNetH::down_cast (bse_server.from_proxy (self->super));
   GtkWidget *param_view;
 
-  if (BST_DBG_EXT && bse_snet_supports_user_synths (snet))
+  if (BST_DBG_EXT && snet.supports_user_synths())
     gtk_notebook_append_page (notebook,
-                              gtk_widget_get_toplevel (bst_rack_view_new (snet)),
+                              gtk_widget_get_toplevel (bst_rack_view_new (snet.proxy_id())),
                               gxk_notebook_create_tabulator (_("Rack"), NULL, NULL));
-  if (bse_snet_supports_user_synths (snet) || BST_DBG_EXT)
+  if (snet.supports_user_synths() || BST_DBG_EXT)
     gtk_notebook_append_page (notebook,
-                              gtk_widget_get_toplevel (GTK_WIDGET (bst_snet_router_build_page (snet))),
+                              gtk_widget_get_toplevel (GTK_WIDGET (bst_snet_router_build_page 
(snet.proxy_id()))),
                               gxk_notebook_create_tabulator (_("Routing"), BST_STOCK_MESH, _("Add, edit and 
connect synthesizer mesh components")));
-  param_view = bst_param_view_new (snet);
+  param_view = bst_param_view_new (snet.proxy_id());
   gtk_notebook_append_page (notebook,
-                            bst_param_view_new (snet),
+                            bst_param_view_new (snet.proxy_id()),
                             gxk_notebook_create_tabulator (_("Properties"), BST_STOCK_PROPERTIES, _("Adjust 
overall synthesizer behaviour")));
+  (void) param_view;
 }
 
 static void
diff --git a/bse/bseapi.idl b/bse/bseapi.idl
index 624b234..3837f41 100644
--- a/bse/bseapi.idl
+++ b/bse/bseapi.idl
@@ -133,6 +133,11 @@ interface Container : Source {
 interface Super : Container {
 };
 
+/// Base type for all kinds of synthesis networks.
+interface SNet : Super {
+  bool supports_user_synths (); ///< Check whether users may edit synthesis modules of this network.
+};
+
 /// Projects support loading, saving, playback and act as containers for all other sound objects.
 interface Project : Container {
   void  change_name (String name); ///< Change a project name without recording undo steps.
diff --git a/bse/bseobject.cc b/bse/bseobject.cc
index 6353ca3..ab14625 100644
--- a/bse/bseobject.cc
+++ b/bse/bseobject.cc
@@ -917,6 +917,7 @@ bse_object_new (GType object_type, const gchar *first_property_name, ...)
 
 #include "bseserver.hh"
 #include "bseproject.hh"
+#include "bsesnet.hh"
 
 GObject*
 bse_object_new_valist (GType object_type, const gchar *first_property_name, va_list var_args)
@@ -934,6 +935,8 @@ bse_object_new_valist (GType object_type, const gchar *first_property_name, va_l
     cxxo = new Bse::ServerImpl (object);
   else if (g_type_is_a (object_type, BSE_TYPE_PROJECT))
     cxxo = new Bse::ProjectImpl (object);
+  else if (g_type_is_a (object_type, BSE_TYPE_SNET))
+    cxxo = new Bse::SNetImpl (object);
   else if (g_type_is_a (object_type, BSE_TYPE_SUPER))
     cxxo = new Bse::SuperImpl (object);
   else if (g_type_is_a (object_type, BSE_TYPE_CONTAINER))
diff --git a/bse/bsesnet.cc b/bse/bsesnet.cc
index f866ff4..539a2d7 100644
--- a/bse/bsesnet.cc
+++ b/bse/bsesnet.cc
@@ -949,3 +949,21 @@ BSE_BUILTIN_TYPE (BseSNet)
   g_assert (BSE_SNET_FLAGS_USHIFT < BSE_OBJECT_FLAGS_MAX_SHIFT);
   return bse_type_register_abstract (BSE_TYPE_SUPER, "BseSNet", "BSE Synthesis (Filter) Network", __FILE__, 
__LINE__, &type_info);
 }
+
+namespace Bse {
+
+SNetImpl::SNetImpl (BseObject *bobj) :
+  SuperImpl (bobj)
+{}
+
+SNetImpl::~SNetImpl ()
+{}
+
+bool
+SNetImpl::supports_user_synths ()
+{
+  BseSNet *self = as<BseSNet*>();
+  return BSE_SNET_USER_SYNTH (self);
+}
+
+} // Bse
diff --git a/bse/bsesnet.hh b/bse/bsesnet.hh
index 4feb348..c1abe94 100644
--- a/bse/bsesnet.hh
+++ b/bse/bsesnet.hh
@@ -102,7 +102,18 @@ void             bse_snet_set_oport_dest        (BseSNet         *snet,
                                                  guint            istream,
                                                  BseTrans        *trans);
 
-
 G_END_DECLS
 
+namespace Bse {
+
+class SNetImpl : public SuperImpl, public virtual SNetIface {
+protected:
+  virtual              ~SNetImpl             ();
+public:
+  explicit              SNetImpl             (BseObject*);
+  virtual bool          supports_user_synths () override;
+};
+
+} // Bse
+
 #endif /* __BSE_SNET_H__ */
diff --git a/bse/bsesnet.proc b/bse/bsesnet.proc
index 7f8ef88..ee9824b 100644
--- a/bse/bsesnet.proc
+++ b/bse/bsesnet.proc
@@ -9,29 +9,6 @@ AUTHORS        = "Tim Janik <timj gtk org>";
 LICENSE = "GNU Lesser General Public License";
 
 
-METHOD (BseSNet, supports-user-synths) {
-  HELP = "Check whether users may edit synthesis modules of this network";
-  IN   = bse_param_spec_object ("snet", "Synth Net", NULL,
-                                BSE_TYPE_SNET, SFI_PARAM_STANDARD);
-  OUT  = sfi_pspec_bool ("user_synth", "User Synth", NULL,
-                         FALSE, SFI_PARAM_STANDARD);
-} BODY (BseProcedureClass *proc,
-       const GValue      *in_values,
-       GValue            *out_values)
-{
-  /* extract parameter values */
-  BseSNet *snet = (BseSNet*) bse_value_get_object (in_values++);
-
-  /* check parameters */
-  if (!BSE_IS_SNET (snet))
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  /* set output parameters */
-  sfi_value_set_bool (out_values++, BSE_SNET_USER_SYNTH (snet));
-
-  return BSE_ERROR_NONE;
-}
-
 METHOD (BseSNet, can-create-source) {
   HELP = "Check whether inserting a new module into a synthesis network is possible";
   IN   = bse_param_spec_object ("snet", "Synth Net", NULL,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]