[beast: 2/9] BST: adjust to use Bse.Source.has_output(s)



commit ccba7bfc1afcded239abf127f9368beb1ac77b2d
Author: Tim Janik <timj gnu org>
Date:   Sun Jul 23 21:02:35 2017 +0200

    BST: adjust to use Bse.Source.has_output(s)
    
    Signed-off-by: Tim Janik <timj gnu org>

 beast-gtk/bstscrollgraph.cc  |   41 +++++++++++++++++++----------------------
 beast-gtk/bstscrollgraph.hh  |   10 +++-------
 beast-gtk/bstsnetrouter.cc   |   10 ++++------
 beast-gtk/bstsnifferscope.cc |   35 ++++++++++++++++++-----------------
 beast-gtk/bstsnifferscope.hh |   15 +++++++--------
 beast-gtk/bsttrackroll.cc    |    2 +-
 6 files changed, 52 insertions(+), 61 deletions(-)
---
diff --git a/beast-gtk/bstscrollgraph.cc b/beast-gtk/bstscrollgraph.cc
index 62a9e0a..80d7fa7 100644
--- a/beast-gtk/bstscrollgraph.cc
+++ b/beast-gtk/bstscrollgraph.cc
@@ -32,7 +32,7 @@ static void
 bst_scrollgraph_destroy (GtkObject *object)
 {
   BstScrollgraph *self = BST_SCROLLGRAPH (object);
-  bst_scrollgraph_set_source (self, 0, 0);
+  bst_scrollgraph_set_source (self, Bse::SourceH(), 0);
   /* chain parent class' handler */
   GTK_OBJECT_CLASS (bst_scrollgraph_parent_class)->destroy (object);
 }
@@ -45,6 +45,8 @@ bst_scrollgraph_finalize (GObject *object)
   self->values = NULL;
   /* chain parent class' handler */
   G_OBJECT_CLASS (bst_scrollgraph_parent_class)->finalize (object);
+  using namespace Bse;
+  self->source.~SourceH();
 }
 
 static void
@@ -423,8 +425,8 @@ bst_scrollgraph_probes_notify (SfiProxy     source,
         bst_scrollgraph_draw_bar (self, 0);
     }
   bse_probe_seq_free (pseq);
-  float mix_freq = bse_source_get_mix_freq (self->source);
-  bst_source_queue_probe_request (self->source, self->ochannel, BST_SOURCE_PROBE_FFT, mix_freq / 
self->window_size);
+  float mix_freq = bse_source_get_mix_freq (self->source.proxy_id());
+  bst_source_queue_probe_request (self->source.proxy_id(), self->ochannel, BST_SOURCE_PROBE_FFT, mix_freq / 
self->window_size);
 }
 
 static void
@@ -432,7 +434,7 @@ bst_scrollgraph_io_changed (BstScrollgraph *self)
 {
   if (self->canvas)
     {
-      if (self->source && bse_source_has_output (self->source, self->ochannel))
+      if (self->source && self->source.has_output (self->ochannel))
         gdk_window_show (self->canvas);
       else
         gdk_window_hide (self->canvas);
@@ -443,23 +445,19 @@ static void
 bst_scrollgraph_release_item (SfiProxy        item,
                               BstScrollgraph *self)
 {
-  assert_return (self->source == item);
-  bst_scrollgraph_set_source (self, 0, 0);
+  assert_return (self->source.proxy_id() == item);
+  bst_scrollgraph_set_source (self, Bse::SourceH(), 0);
   if (self->delete_toplevel)
     gxk_toplevel_delete (GTK_WIDGET (self));
 }
 
 void
-bst_scrollgraph_set_source (BstScrollgraph *self,
-                            SfiProxy        source,
-                            guint           ochannel)
+bst_scrollgraph_set_source (BstScrollgraph *self, Bse::SourceH source, uint ochannel)
 {
   assert_return (BST_IS_SCROLLGRAPH (self));
-  if (source)
-    assert_return (BSE_IS_SOURCE (source));
   if (self->source)
     {
-      bse_proxy_disconnect (self->source,
+      bse_proxy_disconnect (self->source.proxy_id(),
                             "any-signal", bst_scrollgraph_release_item, self,
                             "any-signal", bst_scrollgraph_probes_notify, self,
                             "any-signal", bst_scrollgraph_io_changed, self,
@@ -470,13 +468,13 @@ bst_scrollgraph_set_source (BstScrollgraph *self,
   if (self->source)
     {
       /* setup scope */
-      bse_proxy_connect (self->source,
+      bse_proxy_connect (self->source.proxy_id(),
                          "signal::release", bst_scrollgraph_release_item, self,
                          "signal::probes", bst_scrollgraph_probes_notify, self,
                          "swapped-signal::io_changed", bst_scrollgraph_io_changed, self,
                          NULL);
-      float mix_freq = bse_source_get_mix_freq (self->source);
-      bst_source_queue_probe_request (self->source, self->ochannel, BST_SOURCE_PROBE_FFT, mix_freq / 
self->window_size);
+      float mix_freq = bse_source_get_mix_freq (self->source.proxy_id());
+      bst_source_queue_probe_request (self->source.proxy_id(), self->ochannel, BST_SOURCE_PROBE_FFT, 
mix_freq / self->window_size);
       bst_scrollgraph_io_changed (self);
     }
 }
@@ -508,6 +506,7 @@ bst_scrollgraph_button_release (GtkWidget      *widget,
 static void
 bst_scrollgraph_init (BstScrollgraph *self)
 {
+  new (&self->source) Bse::SourceH();
   GtkWidget *widget = GTK_WIDGET (self);
   GTK_WIDGET_UNSET_FLAGS (self, GTK_NO_WINDOW);
   gtk_widget_set_double_buffered (widget, FALSE);
@@ -584,7 +583,7 @@ scrollgraph_resize_rulers (BstScrollgraph *self, Bst::Direction direction, gpoin
   GtkWidget *widget = GTK_WIDGET (self);
   GtkWidget *hruler = (GtkWidget*) g_object_get_data ((GObject*) self, "BstScrollgraph-hruler");
   GtkWidget *vruler = (GtkWidget*) g_object_get_data ((GObject*) self, "BstScrollgraph-vruler");
-  if (self->source)
+  if (self->source.proxy_id())
     {
       gdouble secs = self->window_size / (gdouble) self->mix_freq;
       if (HORIZONTAL (self))
@@ -635,11 +634,9 @@ scrollgraph_resize_alignment (BstScrollgraph *self, Bst::Direction direction, gp
 }
 
 GtkWidget*
-bst_scrollgraph_build_dialog (GtkWidget   *alive_object,
-                              SfiProxy     source,
-                              guint        ochannel)
+bst_scrollgraph_build_dialog (GtkWidget *alive_object, Bse::SourceH source, uint ochannel)
 {
-  assert_return (BSE_IS_SOURCE (source), NULL);
+  assert_return (source != NULL, NULL);
 
   GxkRadget *radget = gxk_radget_create ("beast", "scrollgraph-dialog", NULL);
   BstScrollgraph *scg = (BstScrollgraph*) gxk_radget_find (radget, "scrollgraph");
@@ -673,8 +670,8 @@ bst_scrollgraph_build_dialog (GtkWidget   *alive_object,
         g_signal_connect_object (scg, "resize-values", G_CALLBACK (scrollgraph_resize_alignment), alignment, 
G_CONNECT_AFTER);
     }
   GtkWidget *dialog = (GtkWidget*) gxk_dialog_new (NULL, (GtkObject*) alive_object, GxkDialogFlags (0), 
"Scrollgraph", (GtkWidget*) radget);
-  gchar *title = g_strdup_format ("Spectrogram: %%s (%s)", bse_source_ochannel_label (source, ochannel));
-  bst_window_sync_title_to_proxy (dialog, source, title);
+  gchar *title = g_strdup_format ("Spectrogram: %%s (%s)", bse_source_ochannel_label (source.proxy_id(), 
ochannel));
+  bst_window_sync_title_to_proxy (dialog, source.proxy_id(), title);
   g_free (title);
   return dialog;
 }
diff --git a/beast-gtk/bstscrollgraph.hh b/beast-gtk/bstscrollgraph.hh
index b34dca3..33605a5 100644
--- a/beast-gtk/bstscrollgraph.hh
+++ b/beast-gtk/bstscrollgraph.hh
@@ -30,7 +30,7 @@ struct _BstScrollgraph
   gfloat         *values;     /* [n_points * n_bars] */
   GdkPixbuf      *pixbuf;     /* n_points wide or high */
   GdkWindow      *canvas;
-  SfiProxy        source;
+  Bse::SourceH    source;
   guint           ochannel;
 };
 struct _BstScrollgraphClass
@@ -42,11 +42,7 @@ struct _BstScrollgraphClass
 /* --- public methods --- */
 GType          bst_scrollgraph_get_type        (void);
 void            bst_scrollgraph_clear           (BstScrollgraph *self);
-void            bst_scrollgraph_set_source      (BstScrollgraph *self,
-                                                 SfiProxy        source,
-                                                 guint           ochannel);
-GtkWidget*      bst_scrollgraph_build_dialog    (GtkWidget      *alive_object,
-                                                 SfiProxy        source,
-                                                 guint           ochannel);
+void            bst_scrollgraph_set_source      (BstScrollgraph *self, Bse::SourceH source, uint ochannel);
+GtkWidget*      bst_scrollgraph_build_dialog    (GtkWidget *alive_object, Bse::SourceH source, uint 
ochannel);
 
 #endif /* __BST_SCROLLGRAPH_H__ */
diff --git a/beast-gtk/bstsnetrouter.cc b/beast-gtk/bstsnetrouter.cc
index b6d5997..d5fe64f 100644
--- a/beast-gtk/bstsnetrouter.cc
+++ b/beast-gtk/bstsnetrouter.cc
@@ -658,13 +658,14 @@ bst_snet_router_root_event (BstSNetRouter   *self,
               /* create popup */
               for (int i = 0; has_inputs == 0 && i < bse_source_n_ichannels (csource->source); i++)
                 has_inputs += bse_source_ichannel_get_n_joints (csource->source, i);
+              Bse::SourceH csource_source = Bse::SourceH::down_cast (bse_server.from_proxy 
(csource->source));
               choice = bst_choice_menu_createv ("<BEAST-SNetRouter>/ModulePopup",
                                                 BST_CHOICE_TITLE (source_name),
                                                 BST_CHOICE_SEPERATOR,
                                                 BST_CHOICE (2, _("Properties"), PROPERTIES),
                                                 BST_CHOICE (6, _("Reset Properties"), PROPERTIES_RESET),
                                                 BST_CHOICE_S (3, _("Disconnect Inputs"), NO_ILINK, 
has_inputs),
-                                                BST_CHOICE_S (4, _("Disconnect Outputs"), NO_OLINK, 
bse_source_has_outputs (csource->source)),
+                                                BST_CHOICE_S (4, _("Disconnect Outputs"), NO_OLINK, 
csource_source.has_outputs()),
                                                 BST_CHOICE_SEPERATOR,
                                                 BST_CHOICE (5, _("Show Info"), INFO),
                                                 BST_CHOICE_SUBMENU (_("Output Signal Monitor"), choice, 
SIGNAL),
@@ -693,15 +694,12 @@ bst_snet_router_root_event (BstSNetRouter   *self,
                   bst_canvas_source_popup_info (csource);
                   break;
                 case 1:
-                  {
-                    Bse::SourceH source = Bse::SourceH::down_cast (bse_server.from_proxy (csource->source));
-                    error = self->snet.remove_source (source);
-                  }
+                  error = self->snet.remove_source (csource_source);
                   bst_status_eprintf (error, _("Remove Module"));
                   break;
                 case 0: break;
                 default:
-                  dialog = bst_scrollgraph_build_dialog (GTK_WIDGET (self), csource->source, i - 
monitor_ids);
+                  dialog = bst_scrollgraph_build_dialog (GTK_WIDGET (self), csource_source, i - monitor_ids);
                   gtk_widget_show (dialog);
                   break;
                 }
diff --git a/beast-gtk/bstsnifferscope.cc b/beast-gtk/bstsnifferscope.cc
index d8bb787..6cc9037 100644
--- a/beast-gtk/bstsnifferscope.cc
+++ b/beast-gtk/bstsnifferscope.cc
@@ -14,6 +14,7 @@ G_DEFINE_TYPE (BstSnifferScope, bst_sniffer_scope, GTK_TYPE_WIDGET);
 static void
 bst_sniffer_scope_init (BstSnifferScope *self)
 {
+  new (&self->source) Bse::SourceH();
   GtkWidget *widget = GTK_WIDGET (self);
 
   GTK_WIDGET_SET_FLAGS (self, GTK_NO_WINDOW);
@@ -32,7 +33,7 @@ bst_sniffer_scope_destroy (GtkObject *object)
 {
   BstSnifferScope *self = BST_SNIFFER_SCOPE (object);
 
-  bst_sniffer_scope_set_sniffer (self, 0);
+  bst_sniffer_scope_set_sniffer (self);
 
   GTK_OBJECT_CLASS (bst_sniffer_scope_parent_class)->destroy (object);
 }
@@ -42,10 +43,12 @@ bst_sniffer_scope_finalize (GObject *object)
 {
   BstSnifferScope *self = BST_SNIFFER_SCOPE (object);
 
-  bst_sniffer_scope_set_sniffer (self, 0);
+  bst_sniffer_scope_set_sniffer (self);
   g_free (self->lvalues);
   g_free (self->rvalues);
   G_OBJECT_CLASS (bst_sniffer_scope_parent_class)->finalize (object);
+  using namespace Bse;
+  self->source.~SourceH();
 }
 
 static void
@@ -237,8 +240,8 @@ scope_probes_notify (SfiProxy     proxy,
         }
       bse_probe_seq_free (pseq);
     }
-  bst_source_queue_probe_request (self->proxy, 0, BST_SOURCE_PROBE_RANGE, 20.0);
-  bst_source_queue_probe_request (self->proxy, 1, BST_SOURCE_PROBE_RANGE, 20.0);
+  bst_source_queue_probe_request (self->source.proxy_id(), 0, BST_SOURCE_PROBE_RANGE, 20.0);
+  bst_source_queue_probe_request (self->source.proxy_id(), 1, BST_SOURCE_PROBE_RANGE, 20.0);
 }
 
 static void
@@ -260,29 +263,27 @@ bst_sniffer_scope_class_init (BstSnifferScopeClass *klass)
 }
 
 void
-bst_sniffer_scope_set_sniffer (BstSnifferScope *self,
-                               SfiProxy         proxy)
+bst_sniffer_scope_set_sniffer (BstSnifferScope *self, Bse::SourceH source)
 {
-  if (proxy)
+  if (source)
     {
-      assert_return (BSE_IS_SOURCE (proxy));
-      if (!bse_source_has_outputs (proxy))
-        proxy = 0;
+      if (!source.has_outputs())
+        source = Bse::SourceH();
     }
-  if (self->proxy)
+  if (self->source)
     {
-      bse_proxy_disconnect (self->proxy,
+      bse_proxy_disconnect (self->source.proxy_id(),
                             "any_signal::probes", scope_probes_notify, self,
                             NULL);
     }
-  self->proxy = proxy;
-  if (self->proxy)
+  self->source = source;
+  if (self->source)
     {
-      bse_proxy_connect (self->proxy,
+      bse_proxy_connect (self->source.proxy_id(),
                          "signal::probes", scope_probes_notify, self,
                          NULL);
-      bst_source_queue_probe_request (self->proxy, 0, BST_SOURCE_PROBE_RANGE, 20.0);
-      bst_source_queue_probe_request (self->proxy, 1, BST_SOURCE_PROBE_RANGE, 20.0);
+      bst_source_queue_probe_request (self->source.proxy_id(), 0, BST_SOURCE_PROBE_RANGE, 20.0);
+      bst_source_queue_probe_request (self->source.proxy_id(), 1, BST_SOURCE_PROBE_RANGE, 20.0);
     }
 }
 
diff --git a/beast-gtk/bstsnifferscope.hh b/beast-gtk/bstsnifferscope.hh
index 1b15387..1597758 100644
--- a/beast-gtk/bstsnifferscope.hh
+++ b/beast-gtk/bstsnifferscope.hh
@@ -14,18 +14,17 @@
 
 /* --- API --- */
 typedef struct {
-  GtkWidget parent_instance;
-  SfiProxy  proxy;
-  guint     n_values;
-  float    *lvalues;
-  float    *rvalues;
-  GdkGC    *oshoot_gc;
+  GtkWidget    parent_instance;
+  Bse::SourceH source;
+  guint        n_values;
+  float       *lvalues;
+  float       *rvalues;
+  GdkGC       *oshoot_gc;
 } BstSnifferScope;
 typedef GtkWidgetClass BstSnifferScopeClass;
 GType      bst_sniffer_scope_get_type       (void);
 GtkWidget* bst_sniffer_scope_new            (void);
-void       bst_sniffer_scope_set_sniffer    (BstSnifferScope    *scope,
-                                             SfiProxy            proxy);
+void       bst_sniffer_scope_set_sniffer    (BstSnifferScope *scope, Bse::SourceH source = Bse::SourceH());
 
 typedef enum {
   BST_SOURCE_PROBE_RANGE   = 0x01,
diff --git a/beast-gtk/bsttrackroll.cc b/beast-gtk/bsttrackroll.cc
index a438ff6..ae2dbb3 100644
--- a/beast-gtk/bsttrackroll.cc
+++ b/beast-gtk/bsttrackroll.cc
@@ -448,7 +448,7 @@ scope_set_track (GtkWidget *scope, Bse::TrackH track)
 {
   g_object_set_long (scope, "BstTrackRoll-Track", track.proxy_id());
   if (BST_SNIFFER_SCOPE (scope))
-    bst_sniffer_scope_set_sniffer (BST_SNIFFER_SCOPE (scope), track.get_output_source().proxy_id());
+    bst_sniffer_scope_set_sniffer (BST_SNIFFER_SCOPE (scope), track.get_output_source());
 }
 
 static Bse::TrackH


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