#include <unicap.h>
#include <unicapgtk.h>
#include <string.h>

static void
device_change_cb (UnicapgtkDeviceSelection * selection, gchar * device_id,
                  GtkWidget * ugtk_display)
{
  unicap_device_t device;
  unicap_handle_t handle;

  unicap_void_device (&device); // (4)
  strcpy (device.identifier, device_id);

  if (!SUCCESS (unicap_enumerate_devices (&device, &device, 0)) ||      // (5)
      !SUCCESS (unicap_open (&handle, &device)))
    {
      // device is not available anymore
      g_printerr ("device '%s' not available!\n", device_id);
      return;
    }

  unicapgtk_video_display_stop (UNICAPGTK_VIDEO_DISPLAY (ugtk_display));
  unicapgtk_video_display_set_handle (UNICAPGTK_VIDEO_DISPLAY (ugtk_display),
                                      handle);
  unicapgtk_video_display_start (UNICAPGTK_VIDEO_DISPLAY (ugtk_display));
}


int
main (int argc, char **argv)
{
  GtkWidget *window;
  GtkWidget *vbox;
  GtkWidget *ugtk_display;
  GtkWidget *device_selection;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit),
                    NULL);

  vbox = gtk_vbox_new (FALSE, 10);
  gtk_container_add (GTK_CONTAINER (window), vbox);

  ugtk_display = unicapgtk_video_display_new ();

  device_selection = unicapgtk_device_selection_new (TRUE);     // (1)
  gtk_box_pack_start_defaults (GTK_BOX (vbox), device_selection);
  unicapgtk_device_selection_rescan (UNICAPGTK_DEVICE_SELECTION (device_selection));    // (2)
  g_signal_connect (G_OBJECT (device_selection), "unicapgtk_device_selection_changed", G_CALLBACK (device_change_cb), ugtk_display);    // (3)
  gtk_combo_box_set_active (GTK_COMBO_BOX (device_selection), 0);

  gtk_box_pack_start_defaults (GTK_BOX (vbox), ugtk_display);

  gtk_widget_show_all (window);
  gtk_main ();

  return 0;
}

