<< Test1 >>

#include <math.h>
#include <gtk/gtk.h>
#include <gtkwaveview.h>
#include <gtkmemorywavebuffer.h>

/* Quit callback. */
static void
quit (GtkWidget *widget, gpointer user_data)
{
  gtk_main_quit ();
}

/* Button press event. */
static void
press (GtkWidget *widget, GdkEventButton *event, gpointer user_data) 
{
  if (event->button == 3)
    {
      GtkWaveView *waveview = GTK_WAVE_VIEW (widget);
      GtkWaveBuffer *wavebuffer;

      wavebuffer = gtk_wave_view_get_buffer (waveview);
      if (GTK_IS_EDITABLE_WAVE_BUFFER (wavebuffer))
        {
          GtkEditableWaveBuffer *editable = GTK_EDITABLE_WAVE_BUFFER (wavebuffer);
          gint32 start, length;

          gtk_wave_view_get_selection (waveview, &start, &length);
          if (length > 0)
            {
              g_print ("Deleting selection of length %i, buffer length = %in", length, gtk_wave_buffer_get_length (wavebuffer));
              gtk_editable_wave_buffer_delete (editable, start, length);
            }
        }
    }
}

int
main (int argc, char *argv[])
{
  GtkWidget *window, *waveview;
  GtkObject *wavebuffer;
  gint16    *ptr;
  gint       i;

  /* Initialize Gtk+. */
  gtk_init (&argc, &argv);

  /* Create a Gtk+ window. */
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  /* Create a GtkWaveView widget. */
  waveview = gtk_wave_view_new ();
  gtk_wave_view_set_select_channels (GTK_WAVE_VIEW (waveview), 0x03);
  gtk_widget_set_usize (waveview, 300, 200);

  /* Set the zoom factor such that 1 pixel = 5 frames.  A frame is equal
     to n samples at one point in time where n = number of channels. */
  gtk_wave_view_set_zoom (GTK_WAVE_VIEW (waveview), 5.0);

  /* Set the cache size to hold 8192 pixel columns of data.  This means
     the user can scroll the widget's contents back and forth and we
     will cache the most recently displayed 8192 columns of data. */
  gtk_wave_view_set_cache_size (GTK_WAVE_VIEW (waveview), 8192);

  /* Create a data source object. */
  wavebuffer = gtk_memory_wave_buffer_new (2, G_WAVEFILE_TYPE_S16, 44100, 44100);

  /* Write some sample data to memory data source.  Note that normally
     you should call gtk_wave_buffer_set_samples (), but since we just created
     the data source and we know it's not associated with any GtkWaveView
     widgets yet, we can get away with this. */
  ptr = (gint16*) GTK_MEMORY_WAVE_BUFFER (wavebuffer)->data;
  for (i = 0; i < 44100; i++)
    {
      ptr [i << 1] = (int) (sin (i * 0.01) * 32767.0);
      ptr [(i << 1) + 1] = (int) (cos (i * 0.01) * 32767.0);
    }

  /* Add GtkWaveView to the window. */
  gtk_container_add (GTK_CONTAINER (window), waveview);

  /* Set the Waveform widget's data stream to point to our wavebuffer. */
  gtk_wave_view_set_buffer (GTK_WAVE_VIEW (waveview),
                            GTK_WAVE_BUFFER (wavebuffer));

  /* Call the usual Gtk+ cruft. */
  gtk_signal_connect (GTK_OBJECT (window), "delete_event",
                      (GtkSignalFunc) quit, NULL);
  gtk_signal_connect (GTK_OBJECT (waveview), "button_press_event",
                      (GtkSignalFunc) press, NULL);
  gtk_widget_show_all (window);
  gtk_main ();

  return 0;
}

Test1