/*
 * Copyright 1988, 1989, 1990, 1991 Massachusetts Institute of Technology
 */
#include"xpointer.h"
#include<stdio.h>
#include"../../Glib/Glib.h"

create_windows()
{
  extern Display *dpy;
  extern Server *serv;
  extern int event_mask, border_width;
  extern Window root, *volume_windows, icon, left_enable,
  right_enable, video_enable, shuttlebar, rjog, stop, fjog, play, 
  index_win, search, frame_win, exit_win, load_win, unload_win, audio_one,
  audio_two, speed_win, speed_in_win, message_window;

#ifdef PLX
  extern Window livevideo, save_query_win, ok_win, cancel_win, filename_win;
  extern Pixmap grab_pix;
  extern char save_filename[];
  extern int do_grab(), cancel_save(), save_image();
#endif PLX
/* These next are the controller buttons */
  extern GC gc;
  extern XFontStruct *normfont;
  extern Colormap cmap;
  extern Cursor lightcursor;
  extern int screen, *the_which_tree, tempdolive(), realheight, 
  show_volumes(), switch_volumes(), show_enable(), switch_enable(),
  do_shuttle(), show_shuttle(), show_rjog(), show_stop(), show_fjog(),
  show_play(), show_index_win(), show_search(), do_control(), show_frame(),
  enter_key(), show_exit(), show_icon(), show_load(), show_unload(),
  show_audio_one(), show_audio_two(), max_volumes, show_message(),
  cancel_message();
  extern short DEBUG;
  extern Visual *visual;
  extern XColor background, border, foreground, nonhighlight, black,
  highlight;
  extern XContext button_context, expose_context, which_context, 
  enter_context, leave_context, string_context, key_context;
  extern char frameinput[], speedinput[], cur_speed_string[];

  XSetWindowAttributes setattributes;
  unsigned long valuemask;
  int i;
  XWMHints xwmhints;
#ifdef PLX
  extern int plx;
#endif PLX
  setattributes.colormap = cmap;
  setattributes.background_pixel = background.pixel;
  setattributes.event_mask = ButtonPressMask | ExposureMask;
  setattributes.override_redirect = True;
  setattributes.cursor = lightcursor;
  setattributes.border_pixel = border.pixel;
  setattributes.background_pixel = background.pixel;
  valuemask = CWColormap | CWEventMask | CWOverrideRedirect | 
    CWBackPixel | CWBorderPixel | CWCursor;

  icon = XCreateWindow(dpy, DefaultRootWindow(dpy), 0, 0,
		       275, 85, border_width, 0, InputOutput, visual, 
		       valuemask, &setattributes);
#ifdef PLX
  if (plx) {
    livevideo = XCreateSimpleWindow(dpy, root, 30, 10,
				    640, 480, 1, foreground.pixel,
				    BlackPixel(dpy, screen));
    
    XSaveContext( dpy, livevideo, expose_context, tempdolive);
    XSaveContext(dpy, livevideo, button_context, do_grab);
    
    XSelectInput( dpy, livevideo, ExposureMask | ButtonPressMask);
    setattributes.event_mask = ExposureMask;
    save_query_win = XCreateWindow( dpy, DefaultRootWindow(dpy), 0, 0, 
				   500, 85, 1, 0, InputOutput, 
				   visual, valuemask, &setattributes);
    XSaveContext(dpy, save_query_win, string_context, "Save video image");
    XSaveContext(dpy, save_query_win, expose_context, show_frame);
    setattributes.event_mask = ExposureMask | ButtonPressMask;
    message_window = XCreateWindow( dpy, DefaultRootWindow(dpy), 0, 0, 
				   500, 85, 1, 0, InputOutput, 
				   visual, valuemask, &setattributes);
    XSaveContext(dpy, message_window, expose_context, show_message);
    XSaveContext(dpy, message_window, button_context, cancel_message);
    ok_win = XCreateSimpleWindow(dpy, save_query_win, 450, 60, 40, 20,
				 0, 0, background.pixel);
    XSelectInput( dpy, ok_win, ExposureMask | ButtonPressMask |
		 EnterWindowMask | LeaveWindowMask);
    XSaveContext(dpy, ok_win, string_context, "OK");
    XSaveContext(dpy, ok_win, expose_context, show_enable);
    XSaveContext(dpy, ok_win, enter_context, show_enable);
    XSaveContext(dpy, ok_win, leave_context, show_enable);
    XSaveContext(dpy, ok_win, button_context, save_image);
    cancel_win = XCreateSimpleWindow(dpy, save_query_win, 380, 60, 60, 20,
				 0, 0, background.pixel);
    XSelectInput( dpy, cancel_win, ExposureMask | ButtonPressMask |
		 EnterWindowMask | LeaveWindowMask);
    XSaveContext(dpy, cancel_win, string_context, "Cancel");
    XSaveContext(dpy, cancel_win, enter_context, show_enable);
    XSaveContext(dpy, cancel_win, leave_context, show_enable);
    XSaveContext(dpy, cancel_win, expose_context, show_enable);
    XSaveContext(dpy, cancel_win, button_context, cancel_save);
    filename_win = XCreateSimpleWindow(dpy, save_query_win, 10, 30, 480, 20,
				 1, foreground.pixel, background.pixel);
    XSelectInput( dpy, filename_win, ExposureMask | KeyPressMask);
    XSaveContext(dpy, filename_win, string_context, save_filename);
    XSaveContext(dpy, filename_win, expose_context, show_frame);
    XSaveContext(dpy, filename_win, key_context, enter_key);
    XMapSubwindows(dpy, save_query_win);
#ifndef BAD_SERVER
    grab_pix = XCreatePixmap(dpy, root, 640, 482, 8);
#else
    valuemask = CWColormap | CWOverrideRedirect | CWBackPixel | 
      CWBorderPixel;
    grab_pix = XCreateWindow(dpy, DefaultRootWindow(dpy),
			     0, 0, 640, 482, 0, 0, InputOutput,
			     visual, valuemask, &setattributes);
#endif
  }
#endif PLX
  max_volumes = GNumberVolumes(serv);
  volume_windows = (Window *)malloc(max_volumes * sizeof(Window));

  for ( i = 0; i < max_volumes; i++) {
    create_volume_window(i);
  }

  left_enable = XCreateSimpleWindow( dpy, root, 490, realheight, 13, 
				    normfont->ascent+normfont->descent,
				    0, 0, background.pixel);
  video_enable = XCreateSimpleWindow( dpy, root, 505, realheight, 15, 
				    normfont->ascent+normfont->descent,
				    0, 0, background.pixel);
  right_enable = XCreateSimpleWindow( dpy, root, 522, realheight, 13, 
				    normfont->ascent+normfont->descent,
				    0, 0, background.pixel);
  XSelectInput( dpy, left_enable, ExposureMask | EnterWindowMask |
	       LeaveWindowMask | ButtonPressMask);
  XSelectInput( dpy, video_enable, ExposureMask | EnterWindowMask |
	       LeaveWindowMask | ButtonPressMask);
  XSelectInput( dpy, right_enable, ExposureMask | EnterWindowMask |
	       LeaveWindowMask | ButtonPressMask);
  XSaveContext( dpy, left_enable, string_context, "L");
  XSaveContext( dpy, video_enable, string_context, "V");
  XSaveContext( dpy, right_enable, string_context, "R");
  XSaveContext( dpy, left_enable, expose_context, show_enable);
  XSaveContext( dpy, video_enable, expose_context, show_enable);
  XSaveContext( dpy, right_enable, expose_context, show_enable);
  XSaveContext( dpy, left_enable, button_context, switch_enable);
  XSaveContext( dpy, video_enable, button_context, switch_enable);
  XSaveContext( dpy, right_enable, button_context, switch_enable);
  XSaveContext( dpy, left_enable, which_context, &the_which_tree[LEFT_CHAN]);
  XSaveContext( dpy, video_enable, which_context, 
	       &the_which_tree[VIDEO_CHAN]);
  XSaveContext( dpy, right_enable, which_context, 
	       &the_which_tree[RIGHT_CHAN]);
  XSaveContext( dpy, left_enable, enter_context, show_enable);
  XSaveContext( dpy, left_enable, leave_context, show_enable);
  XSaveContext( dpy, video_enable, enter_context, show_enable);
  XSaveContext( dpy, video_enable, leave_context, show_enable);
  XSaveContext( dpy, right_enable, enter_context, show_enable);
  XSaveContext( dpy, right_enable, leave_context, show_enable);
  
  shuttlebar = XCreateSimpleWindow( dpy, root, 30, realheight,
				   400, 30, 1, foreground.pixel,
				   black.pixel);
  XSelectInput(dpy, shuttlebar, ExposureMask | ButtonPressMask |
	       ButtonReleaseMask | ButtonMotionMask);
  XSaveContext( dpy, shuttlebar, button_context, do_shuttle);
  XSaveContext( dpy, shuttlebar, expose_context, show_shuttle);

  speed_win = XCreateSimpleWindow ( dpy, root, 434, realheight ,
				   40, normfont->ascent+normfont->descent+5,
				   0, 0, background.pixel);
  XSelectInput(dpy, speed_win, 
	       ExposureMask | ButtonPressMask);
  XSaveContext( dpy, speed_win, expose_context, show_frame);
  XSaveContext( dpy, speed_win, string_context, cur_speed_string);

  speed_in_win = XCreateSimpleWindow ( dpy, root, 434, realheight + 20,
				   40, normfont->ascent+normfont->descent+5,
				   1, highlight.pixel,
				      background.pixel);
  XSelectInput(dpy, speed_in_win,  
	       ExposureMask | ButtonPressMask | KeyPressMask);
  XSaveContext( dpy, speed_in_win, string_context, speedinput);  
  XSaveContext( dpy, speed_in_win, expose_context, show_frame);
  XSaveContext( dpy, speed_in_win, key_context, enter_key);

  rjog = XCreateSimpleWindow(dpy, root, 30, realheight+ 50, 60, 40,
			     0, 0, background.pixel); 
  stop = XCreateSimpleWindow(dpy, root, 100, realheight + 50, 60, 40,
			     0, 0, background.pixel); 
  fjog = XCreateSimpleWindow(dpy, root, 170, realheight + 50, 60, 40,
			     0, 0, background.pixel); 
  play = XCreateSimpleWindow(dpy, root, 240, realheight + 50, 60, 40,
			     0, 0, background.pixel); 
  index_win = XCreateSimpleWindow(dpy, root, 310, realheight + 50, 60, 40,
			     0, 0, background.pixel); 
  search = XCreateSimpleWindow(dpy, root, 380, realheight + 50, 60, 40,
			     0, 0, background.pixel); 
  frame_win = XCreateSimpleWindow( dpy, root, 380, realheight + 100, 70, 
				  normfont->ascent+normfont->descent+5,
				  1, highlight.pixel, background.pixel);
  exit_win = XCreateSimpleWindow( dpy, root, 30, realheight + 100, 60, 40,
				 0, 0, background.pixel);

  load_win = XCreateSimpleWindow( dpy, root, 100, realheight + 100, 60, 40,
				 0, 0, background.pixel);

  unload_win = XCreateSimpleWindow( dpy, root, 170, realheight + 100, 60, 40,
				 0, 0, background.pixel);

  audio_one = XCreateSimpleWindow(dpy, root, 240, realheight + 100, 60, 40,
			     0, 0, background.pixel); 

  audio_two = XCreateSimpleWindow(dpy, root, 310, realheight + 100, 60, 40,
			     0, 0, background.pixel); 

  XSelectInput(dpy, rjog, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, stop, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, fjog, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, play, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, index_win, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, search, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, frame_win, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask | KeyPressMask);
  XSelectInput(dpy, exit_win, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, load_win, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, unload_win, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, audio_one, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);
  XSelectInput(dpy, audio_two, EnterWindowMask | LeaveWindowMask |
	       ButtonPressMask | ExposureMask);

  XSaveContext( dpy, rjog, enter_context, show_rjog);
  XSaveContext( dpy, rjog, leave_context, show_rjog);
  XSaveContext( dpy, rjog, expose_context, show_rjog);
  XSaveContext( dpy, rjog, button_context, do_control);
  XSaveContext( dpy, rjog, which_context, &the_which_tree[0]);
  XSaveContext( dpy, stop, enter_context, show_stop);
  XSaveContext( dpy, stop, leave_context, show_stop);
  XSaveContext( dpy, stop, expose_context, show_stop);
  XSaveContext( dpy, stop, button_context, do_control);
  XSaveContext( dpy, stop, which_context, &the_which_tree[1]);
  XSaveContext( dpy, fjog, enter_context, show_fjog);
  XSaveContext( dpy, fjog, leave_context, show_fjog);
  XSaveContext( dpy, fjog, expose_context, show_fjog);
  XSaveContext( dpy, fjog, button_context, do_control);
  XSaveContext( dpy, fjog, which_context, &the_which_tree[2]);
  XSaveContext( dpy, play, enter_context, show_play);
  XSaveContext( dpy, play, leave_context, show_play);
  XSaveContext( dpy, play, expose_context, show_play);
  XSaveContext( dpy, play, button_context, do_control);
  XSaveContext( dpy, play, which_context, &the_which_tree[3]);
  XSaveContext( dpy, index_win, enter_context, show_index_win);
  XSaveContext( dpy, index_win, leave_context, show_index_win);
  XSaveContext( dpy, index_win, expose_context, show_index_win);
  XSaveContext( dpy, index_win, button_context, do_control);
  XSaveContext( dpy, index_win, which_context, &the_which_tree[4]);
  XSaveContext( dpy, search, enter_context, show_search);
  XSaveContext( dpy, search, leave_context, show_search);
  XSaveContext( dpy, search, expose_context, show_search);
  XSaveContext( dpy, search, button_context, do_control);
  XSaveContext( dpy, search, which_context, &the_which_tree[5]);
  XSaveContext( dpy, exit_win, enter_context, show_exit);
  XSaveContext( dpy, exit_win, leave_context, show_exit);
  XSaveContext( dpy, exit_win, expose_context, show_exit);
  XSaveContext( dpy, exit_win, button_context, do_control);
  XSaveContext( dpy, exit_win, which_context, &the_which_tree[6]);
  XSaveContext( dpy, load_win, enter_context, show_load);
  XSaveContext( dpy, load_win, leave_context, show_load);
  XSaveContext( dpy, load_win, expose_context, show_load);
  XSaveContext( dpy, load_win, button_context, do_control);
  XSaveContext( dpy, load_win, which_context, &the_which_tree[7]);
  XSaveContext( dpy, unload_win, enter_context, show_unload);
  XSaveContext( dpy, unload_win, leave_context, show_unload);
  XSaveContext( dpy, unload_win, expose_context, show_unload);
  XSaveContext( dpy, unload_win, button_context, do_control);
  XSaveContext( dpy, unload_win, which_context, &the_which_tree[8]);
  XSaveContext( dpy, audio_one, enter_context, show_audio_one);
  XSaveContext( dpy, audio_one, leave_context, show_audio_one);
  XSaveContext( dpy, audio_one, expose_context, show_audio_one);
  XSaveContext( dpy, audio_one, button_context, do_control);
  XSaveContext( dpy, audio_one, which_context, &the_which_tree[9]);
  XSaveContext( dpy, audio_two, enter_context, show_audio_two);
  XSaveContext( dpy, audio_two, leave_context, show_audio_two);
  XSaveContext( dpy, audio_two, expose_context, show_audio_two);
  XSaveContext( dpy, audio_two, button_context, do_control);
  XSaveContext( dpy, audio_two, which_context, &the_which_tree[10]);

  XSaveContext( dpy, frame_win, expose_context, show_frame);
/*  XSaveContext( dpy, frame_win, button_context, do_control);*/
  XSaveContext( dpy, frame_win, string_context, frameinput);  
  XSaveContext( dpy, frame_win, key_context, enter_key);

  XSaveContext( dpy, icon, expose_context, show_icon);
/*  XStoreName(dpy, root, "Video Controller");*/
  XMapRaised( dpy, root);
  XMapSubwindows(dpy, root);
  xwmhints.flags = IconWindowHint;
  xwmhints.icon_window = icon;
/*  XSetWMHints( dpy, root, &xwmhints);*/
  xwmhints.flags = InputHint;
  xwmhints.input = True;
  XSetWMHints( dpy, root, &xwmhints);
}

create_volume_window(i)
     int i;
{
    
  extern Display *dpy;
  extern Window root;
  extern Window *volume_windows;
  extern XFontStruct *normfont;
  extern int realheight, *the_which_tree, show_volumes(), switch_volumes();
  extern XColor background;
  


  volume_windows[i] = 
    XCreateSimpleWindow(dpy, root, 540, 
			realheight+(i+1)*(normfont->ascent+normfont->descent+2),
			120, normfont->ascent+normfont->descent, 
			0,0, background.pixel);
  XSelectInput( dpy, volume_windows[i], ExposureMask | 
	       EnterWindowMask | LeaveWindowMask | ButtonPressMask);
  XSaveContext( dpy, volume_windows[i], which_context, &the_which_tree[i]);
  XSaveContext( dpy, volume_windows[i], expose_context, show_volumes);
  XSaveContext( dpy, volume_windows[i], button_context, switch_volumes);
  XSaveContext( dpy, volume_windows[i], enter_context, show_volumes);
  XSaveContext( dpy, volume_windows[i], leave_context, show_volumes);
}
