#!/bin/env pike
// -*- pike -*-
// Simple image viewing program. Loads all images on the command line

// Number of windows, and the destroy handler. When all windows are
// gone, exit the program.
int window;
object rootwin;
void window_gone() {  if(!--window) exit(0); }

// The function that loads the image and displays it in a window.

void load_image( string i )
{
  if( mapping image = GTK.Util.load_image( i,({255,255,255}) ) )
  {
    object px = GTK.Pixmap( image->img, @(image->alpha?({image->alpha}):({})) );
    GTK.Window( GTK.WindowToplevel )
      ->add(GTK.ScrolledWindow(GTK.Adjustment(),GTK.Adjustment())->
            add( px )->set_policy(GTK.PolicyAutomatic,GTK.PolicyAutomatic))
      ->set_default_size( min(image->img->xsize()+8, rootwin->xsize()-8), 
                          min(image->img->ysize()+8, rootwin->ysize()-8) )
      ->show_all()->set_title( "PV: "+basename(i)+"   "+image->img->xsize()+
                               "x"+image->img->ysize()+" "+ (image->format||"Unknown type"))
      ->signal_connect( "destroy", window_gone );
  }
  else
    GTK.Alert("Failed to load the image '"+i+"'")
	->signal_connect( "destroy", window_gone );
}

int main(int argc, array argv)
{
  argv = GTK.setup_gtk( argv );
  window = sizeof(argv)-1;
  rootwin = GTK.root_window();
  foreach(argv[1..], string i)
    load_image( i );
 // Let the backend take over. From now on it's all event driven
  return -window;
}
