[beast: 10/13] BST: adjust to use EditableSample methods



commit bcd5d692fa302a2afa5860be9cb53421aeb226d0
Author: Tim Janik <timj gnu org>
Date:   Fri Sep 1 00:13:10 2017 +0200

    BST: adjust to use EditableSample methods
    
    Signed-off-by: Tim Janik <timj gnu org>

 beast-gtk/bstqsampler.cc     |   46 ++++++++------------
 beast-gtk/bstqsampler.hh     |    4 +-
 beast-gtk/bstsampleeditor.cc |   99 +++++++-----------------------------------
 beast-gtk/bstsampleeditor.hh |    8 ++--
 beast-gtk/bstwaveeditor.cc   |   35 ++++++++------
 beast-gtk/bstwaveeditor.hh   |    6 +-
 6 files changed, 62 insertions(+), 136 deletions(-)
---
diff --git a/beast-gtk/bstqsampler.cc b/beast-gtk/bstqsampler.cc
index 3db9336..6ea3a43 100644
--- a/beast-gtk/bstqsampler.cc
+++ b/beast-gtk/bstqsampler.cc
@@ -1313,14 +1313,14 @@ bst_qsampler_set_adjustment (BstQSampler   *qsampler,
 }
 
 
-typedef struct {
-  SfiProxy esample;
-  guint    nth_channel;
-  guint    n_channels;
-} ESampleFiller;
+struct ESampleFiller {
+  Bse::EditableSampleH esample;
+  uint                 nth_channel = 0;
+  uint                 n_channels = 0;
+};
 
 static guint
-qsampler_esample_filler (gpointer         data,
+qsampler_esample_filler (void            *data,
                         guint            voffset,
                         gdouble          offset_scale,
                         guint            block_size,
@@ -1328,10 +1328,10 @@ qsampler_esample_filler (gpointer         data,
                         BstQSamplerPeak *values,
                         BstQSampler     *qsampler)
 {
-  ESampleFiller *fill = (ESampleFiller*) data;
+  ESampleFiller *fill = static_cast<ESampleFiller*> (data);
   BseFlo4tSeq *fseq;
   voffset = voffset * fill->n_channels + fill->nth_channel;
-  fseq = bse_editable_sample_collect_stats (fill->esample,
+  fseq = bse_editable_sample_collect_stats (fill->esample.proxy_id(),
                                             voffset,
                                             offset_scale * fill->n_channels,
                                             block_size * fill->n_channels,
@@ -1347,33 +1347,23 @@ qsampler_esample_filler (gpointer         data,
   return i;
 }
 
-static void
-free_esample_filler (gpointer data)
-{
-  ESampleFiller *fill = (ESampleFiller*) data;
-
-  bse_item_unuse (fill->esample);
-  g_free (data);
-}
-
 void
-bst_qsampler_set_source_from_esample (BstQSampler *qsampler,
-                                     SfiProxy     esample,
-                                     guint        nth_channel)
+bst_qsampler_set_source_from_esample (BstQSampler *qsampler, Bse::EditableSampleH esample, uint nth_channel)
 {
-  ESampleFiller *fill;
-
   assert_return (BST_IS_QSAMPLER (qsampler));
-  assert_return (BSE_IS_EDITABLE_SAMPLE (esample));
+  assert_return (esample != NULL);
 
-  fill = g_new (ESampleFiller, 1);
+  ESampleFiller *fill = new ESampleFiller();
   fill->esample = esample;
-  bse_item_use (fill->esample);
-  fill->n_channels = bse_editable_sample_get_n_channels (fill->esample);
+  fill->n_channels = fill->esample.get_n_channels();
   fill->nth_channel = nth_channel;
 
+  auto delete_esample_filler = [] (void *data) {
+    ESampleFiller *fill = static_cast<ESampleFiller*> (data);
+    delete fill;
+  };
   bst_qsampler_set_source (qsampler,
-                          bse_editable_sample_get_length (fill->esample) / fill->n_channels,
+                          fill->esample.get_length() / fill->n_channels,
                           qsampler_esample_filler,
-                          fill, free_esample_filler);
+                          fill, delete_esample_filler);
 }
diff --git a/beast-gtk/bstqsampler.hh b/beast-gtk/bstqsampler.hh
index f6e1172..1f75d85 100644
--- a/beast-gtk/bstqsampler.hh
+++ b/beast-gtk/bstqsampler.hh
@@ -173,8 +173,6 @@ void           bst_qsampler_set_draw_mode   (BstQSampler *qsampler, Bst::QSamplerDrawMode
 void      bst_qsampler_set_adjustment  (BstQSampler                    *qsampler,
                                         GtkAdjustment                  *adjustment);
 
-void      bst_qsampler_set_source_from_esample (BstQSampler            *qsampler,
-                                                SfiProxy                esample,
-                                                guint                   nth_channel);
+void       bst_qsampler_set_source_from_esample (BstQSampler *qsampler, Bse::EditableSampleH esample, uint 
nth_channel);
 
 #endif /* __BST_QSAMPLER_H__ */
diff --git a/beast-gtk/bstsampleeditor.cc b/beast-gtk/bstsampleeditor.cc
index 3b55e8a..17ca430 100644
--- a/beast-gtk/bstsampleeditor.cc
+++ b/beast-gtk/bstsampleeditor.cc
@@ -6,27 +6,11 @@
 #include       <gdk/gdkkeysyms.h>
 
 
-/* --- parameters --- */
-enum
-{
-  PARAM_0,
-  PARAM_SAMPLE
-};
-
-
 /* --- prototypes --- */
 static void    bst_sample_editor_class_init    (BstSampleEditorClass   *klass);
 static void    bst_sample_editor_init          (BstSampleEditor        *sample_editor);
 static void    bst_sample_editor_destroy       (GtkObject              *object);
 static void    bst_sample_editor_finalize      (GObject                *object);
-static void    bst_sample_editor_set_property  (GObject                *object,
-                                                guint                   prop_id,
-                                                const GValue           *value,
-                                                GParamSpec             *pspec);
-static void    bst_sample_editor_get_property  (GObject                *object,
-                                                guint                   prop_id,
-                                                GValue                 *value,
-                                                GParamSpec             *pspec);
 
 
 /* --- static variables --- */
@@ -68,83 +52,31 @@ bst_sample_editor_class_init (BstSampleEditorClass *klass)
 
   parent_class = g_type_class_peek_parent (klass);
 
-  gobject_class->set_property = bst_sample_editor_set_property;
-  gobject_class->get_property = bst_sample_editor_get_property;
   gobject_class->finalize = bst_sample_editor_finalize;
 
   object_class->destroy = bst_sample_editor_destroy;
-
-  g_object_class_install_property (gobject_class, PARAM_SAMPLE,
-                                  sfi_pspec_proxy ("sample", NULL, NULL,
-                                                   SFI_PARAM_READWRITE));
 }
 
 static void
-bst_sample_editor_init (BstSampleEditor *editor)
+bst_sample_editor_init (BstSampleEditor *self)
 {
+  new (&self->esample) Bse::EditableSampleH();
   /* setup main container */
-  editor->main_vbox = GTK_WIDGET (editor);
-}
-
-static void
-bst_sample_editor_set_property (GObject      *object,
-                               guint         prop_id,
-                               const GValue *value,
-                               GParamSpec   *pspec)
-{
-  BstSampleEditor *editor = BST_SAMPLE_EDITOR (object);
-
-  switch (prop_id)
-    {
-    case PARAM_SAMPLE:
-      bst_sample_editor_set_sample (editor, sfi_value_get_proxy (value));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-bst_sample_editor_get_property (GObject    *object,
-                             guint       prop_id,
-                             GValue     *value,
-                             GParamSpec *pspec)
-{
-  BstSampleEditor *editor = BST_SAMPLE_EDITOR (object);
-
-  switch (prop_id)
-    {
-    case PARAM_SAMPLE:
-      sfi_value_set_proxy (value, editor->esample);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
+  self->main_vbox = GTK_WIDGET (self);
 }
 
 void
-bst_sample_editor_set_sample (BstSampleEditor *editor,
-                             SfiProxy         sample)
+bst_sample_editor_set_sample (BstSampleEditor *editor, Bse::EditableSampleH sample)
 {
   assert_return (BST_IS_SAMPLE_EDITOR (editor));
-  if (sample)
-    assert_return (BSE_IS_EDITABLE_SAMPLE (sample));
 
   if (sample != editor->esample)
     {
-      if (editor->esample)
-       bse_item_unuse (editor->esample);
       editor->esample = sample;
       editor->n_channels = 0;
       if (editor->esample)
-       {
-         bse_item_use (editor->esample);
-         editor->n_channels = bse_editable_sample_get_n_channels (editor->esample);
-       }
+        editor->n_channels = editor->esample.get_n_channels();
       bst_sample_editor_rebuild (editor);
-      g_object_notify (G_OBJECT (editor), "sample");
     }
 }
 
@@ -153,7 +85,7 @@ bst_sample_editor_destroy (GtkObject *object)
 {
   BstSampleEditor *editor = BST_SAMPLE_EDITOR (object);
 
-  bst_sample_editor_set_sample (editor, 0);
+  bst_sample_editor_unset_sample (editor);
 
   if (editor->play_back)
     bst_play_back_handle_destroy (editor->play_back);
@@ -165,18 +97,19 @@ bst_sample_editor_destroy (GtkObject *object)
 static void
 bst_sample_editor_finalize (GObject *object)
 {
-  // BstSampleEditor *editor = BST_SAMPLE_EDITOR (object);
+  BstSampleEditor *self = BST_SAMPLE_EDITOR (object);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
+
+  using namespace Bse;
+  self->esample.~EditableSampleH();
 }
 
 GtkWidget*
-bst_sample_editor_new (SfiProxy sample)
+bst_sample_editor_new (Bse::EditableSampleH esample)
 {
-  GtkWidget *widget;
-
-  widget = gtk_widget_new (BST_TYPE_SAMPLE_EDITOR, "sample", sample, NULL);
-
+  GtkWidget *widget = gtk_widget_new (BST_TYPE_SAMPLE_EDITOR, NULL);
+  bst_sample_editor_set_sample (BST_SAMPLE_EDITOR (widget), esample);
   return widget;
 }
 
@@ -190,7 +123,7 @@ qsampler_set_selection (BstQSampler *qsampler,
                        gboolean     visible_mark)
 {
   BstSampleEditor *editor = BST_SAMPLE_EDITOR (qsampler->owner);
-  guint i, length = bse_editable_sample_get_length (editor->esample);
+  guint i, length = editor->esample.get_length();
 
   m1 = CLAMP (m1, 0, (gint) (length / editor->n_channels));
   m2 = CLAMP (m2, 0, (gint) (length / editor->n_channels));
@@ -356,8 +289,8 @@ play_back_wchunk (BstSampleEditor *editor)
     {
       editor->play_back = bst_play_back_handle_new ();
       bst_play_back_handle_set (editor->play_back,
-                               editor->esample,
-                               bse_editable_sample_get_osc_freq (editor->esample));
+                               editor->esample.proxy_id(),
+                               editor->esample.get_osc_freq());
     }
   bst_play_back_handle_toggle (editor->play_back);
   if (bst_play_back_handle_is_playing (editor->play_back))
diff --git a/beast-gtk/bstsampleeditor.hh b/beast-gtk/bstsampleeditor.hh
index a23e1c2..f2b6721 100644
--- a/beast-gtk/bstsampleeditor.hh
+++ b/beast-gtk/bstsampleeditor.hh
@@ -22,7 +22,7 @@ struct _BstSampleEditor
 {
   GtkVBox       parent_object;
 
-  SfiProxy      esample;
+  Bse::EditableSampleH esample;
   guint                 n_channels;
 
   GtkWidget    *main_vbox;
@@ -44,10 +44,10 @@ struct _BstSampleEditorClass
 
 /* --- prototypes --- */
 GtkType                bst_sample_editor_get_type      (void);
-GtkWidget*     bst_sample_editor_new           (SfiProxy         sample);
-void           bst_sample_editor_set_sample    (BstSampleEditor *sample_editor,
-                                                SfiProxy         editable_sample);
+GtkWidget*     bst_sample_editor_new           (Bse::EditableSampleH esample);
 void           bst_sample_editor_rebuild       (BstSampleEditor *sample_editor);
+void           bst_sample_editor_set_sample    (BstSampleEditor *sample_editor, Bse::EditableSampleH 
editable_sample);
+inline void     bst_sample_editor_unset_sample  (BstSampleEditor *self) { bst_sample_editor_set_sample 
(self, Bse::EditableSampleH()); }
 
 
 #endif /* __BST_SAMPLE_EDITOR_H__ */
diff --git a/beast-gtk/bstwaveeditor.cc b/beast-gtk/bstwaveeditor.cc
index fb8aa3c..2410ff1 100644
--- a/beast-gtk/bstwaveeditor.cc
+++ b/beast-gtk/bstwaveeditor.cc
@@ -99,6 +99,8 @@ bst_wave_editor_class_init (BstWaveEditorClass *klass)
 static void
 bst_wave_editor_init (BstWaveEditor *self)
 {
+  new (&self->esample) Bse::EditableSampleH();
+
   GtkTreeSelection *tsel;
   GtkWidget *any, *paned;
   gpointer gmask;
@@ -253,7 +255,7 @@ bst_wave_editor_destroy (GtkObject *object)
 {
   BstWaveEditor *self = BST_WAVE_EDITOR (object);
 
-  bst_wave_editor_set_esample (self, 0);
+  bst_wave_editor_unset_esample (self);
   if (self->phandle)
     {
       bst_play_back_handle_destroy (self->phandle);
@@ -271,9 +273,14 @@ bst_wave_editor_finalize (GObject *object)
 
   assert_return (self->qsamplers == NULL);
 
+  bst_wave_editor_unset_esample (self);
+
   g_object_unref (self->chunk_wrapper);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
+
+  using namespace Bse;
+  self->esample.~EditableSampleH();
 }
 
 void
@@ -289,7 +296,7 @@ bst_wave_editor_set_wave (BstWaveEditor *self,
          bse_item_unuse (self->wave);
          gxk_list_wrapper_notify_clear (self->chunk_wrapper);
        }
-      bst_wave_editor_set_esample (self, 0);
+      bst_wave_editor_unset_esample (self);
       if (BSE_IS_WAVE (wave))
        self->wave = wave;
       else
@@ -405,10 +412,10 @@ play_back_wchunk_on (BstWaveEditor *self)
   bst_play_back_handle_stop (self->phandle);
   if (self->esample && self->esample_open)
     {
-      self->playback_length = bse_editable_sample_get_length (self->esample);
+      self->playback_length = self->esample.get_length();
       bst_play_back_handle_set (self->phandle,
-                               self->esample,
-                               bse_editable_sample_get_osc_freq (self->esample));
+                               self->esample.proxy_id(),
+                               self->esample.get_osc_freq());
       bst_play_back_handle_start (self->phandle);
       /* request updates */
       bst_play_back_handle_pcm_notify (self->phandle, 40, update_play_back_marks, self); /* request quick 
update */
@@ -505,12 +512,9 @@ wave_editor_set_n_qsamplers (BstWaveEditor *self,
 }
 
 void
-bst_wave_editor_set_esample (BstWaveEditor *self,
-                            SfiProxy       esample)
+bst_wave_editor_set_esample (BstWaveEditor *self, Bse::EditableSampleH esample)
 {
   assert_return (BST_IS_WAVE_EDITOR (self));
-  if (esample)
-    assert_return (BSE_IS_EDITABLE_SAMPLE (esample));
 
   if (esample != self->esample)
     {
@@ -522,20 +526,20 @@ bst_wave_editor_set_esample (BstWaveEditor *self,
       if (self->esample)
        {
          if (self->esample_open)
-           bse_editable_sample_close (self->esample);
-         bse_item_unuse (self->esample);
+           self->esample.close();
+          bse_item_unuse (self->esample.proxy_id()); // FIXME: Item.use_count is only needed to keep a 
container's children
        }
       self->esample = esample;
       if (self->esample)
        {
+          bse_item_use (self->esample.proxy_id()); // FIXME: Item.use_count is only needed to keep a 
container's children
          Bse::Error error;
-         bse_item_use (self->esample);
-         error = bse_editable_sample_open (self->esample);
+         error = self->esample.open();
          self->esample_open = error == Bse::Error::NONE;
          if (error != 0)
            g_message ("failed to open sample: %s", Bse::error_blurb (error));
        }
-      wave_editor_set_n_qsamplers (self, self->esample ? bse_editable_sample_get_n_channels (self->esample) 
: 0);
+      wave_editor_set_n_qsamplers (self, self->esample ? self->esample.get_n_channels() : 0);
 
       for (i = 0; i < self->n_qsamplers; i++)
        if (self->esample)
@@ -582,7 +586,8 @@ tree_selection_changed (BstWaveEditor    *self,
       g_free (mix_str);
       Bse::WaveH wave = Bse::WaveH::down_cast (bse_server.from_proxy (self->wave));
       Bse::EditableSampleHandle esample = wave.use_editable (gxk_list_wrapper_get_index 
(self->chunk_wrapper, &iter));
-      bst_wave_editor_set_esample (self, esample.proxy_id());
+      bst_wave_editor_set_esample (self, esample);
+      bse_item_unuse (esample.proxy_id()); // FIXME: change use_editable()
     }
 }
 
diff --git a/beast-gtk/bstwaveeditor.hh b/beast-gtk/bstwaveeditor.hh
index ed93e49..1ce8674 100644
--- a/beast-gtk/bstwaveeditor.hh
+++ b/beast-gtk/bstwaveeditor.hh
@@ -45,7 +45,7 @@ struct _BstWaveEditor
   SfiProxy          wave;
 
   /* editable sample view */
-  SfiProxy          esample;
+  Bse::EditableSampleH esample;
   guint              esample_open : 1;
   guint              ignore_playpos : 1;
   GtkWidget        *qsampler_hscroll;
@@ -65,8 +65,8 @@ GtkWidget*    bst_wave_editor_new             (SfiProxy        wave);
 void           bst_wave_editor_set_wave        (BstWaveEditor  *self,
                                                 SfiProxy        wave);
 void           bst_wave_editor_rebuild         (BstWaveEditor *wave_editor);
-void           bst_wave_editor_set_esample     (BstWaveEditor  *self,
-                                                SfiProxy        editable_sample);
+void           bst_wave_editor_set_esample     (BstWaveEditor  *self, Bse::EditableSampleH editable_sample);
+inline void    bst_wave_editor_unset_esample   (BstWaveEditor *self) { bst_wave_editor_set_esample (self, 
Bse::EditableSampleH()); }
 
 
 #endif /* __BST_WAVE_EDITOR_H__ */


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