/* This file is a part of XBibFile - a system for handling BibTeX references
 *
 * Author:    Ross Maloney
 * Date:      October 1999
 * Modified:  January 2002
 *
 */

#include  <stdio.h>
#include  <gtk/gtk.h>

#include  "xbibfile.h"

/* This file is a modified copy of inproc.c so that it handles the
 * incollection BibTeX reference style */


GtkWidget  *labelX, *dataX;
GtkWidget  *label0, *data0;
GtkWidget  *label1, *data1;
GtkWidget  *label2, *data2;
GtkWidget  *label3, *data3;
GtkWidget  *label4, *data4;
GtkWidget  *label5, *data5;
GtkWidget  *label6, *data6;
GtkWidget  *label7, *data7;
GtkWidget  *label12, *data12;
GtkWidget  *label13, *data13, *textscroll;
GtkWidget  *label14, *data14;
GtkWidget  *label16, *data16;
GtkWidget  *label17, *data17;
GtkWidget  *label19, *data19;
GtkWidget  *label20, *data20;
GtkWidget  *label21, *data21;
GtkWidget  *label22, *data22;
GtkWidget  *label23, *data23;
GtkWidget  *label24, *data24;
GtkWidget  *label30, *data30;
GtkWidget  *label31, *data31;
GtkWidget  *label32, *data32;
GtkTextBuffer  *text13;
GtkTextIter  start, end;
PangoFontDescription  *font_desc;




/* The procedure to save the incollection style */

void save_incol(GtkWidget *widget)
{
  extern int format;
  extern int length[];
  extern char slate[][];
  extern int lengthX;
  extern char slateX[];
  extern char slate1[];
  extern char slate2[];
  extern char slate3[];
  extern char slate4[];
  extern char slate5[];
  extern char slate6[];
  extern char slate7[];
  extern char slate12[];
  extern char slate13[];
  extern char slate14[];
  extern char slate16[];
  extern char slate17[];
  extern char slate19[];
  extern char slate20[];
  extern char slate21[];
  extern char slate22[];
  extern char slate23[];
  extern char slate24[];
  extern char slate30[];
  extern char slate31[];
  extern char slate32[];
  extern  void error();          /* defined in file error.c */
  extern  FILE *finput;          /* defined in file xbibfile.c */
  extern  void close_window();   /* defined in file cleanup.c */

  if (format != 6) {
    error(widget, GINT_TO_POINTER(5));
    return;
  }
  strcpy(slateX, gtk_entry_get_text(GTK_ENTRY(dataX)));
  lengthX = strlen(slateX);
  strcpy(slate3, gtk_entry_get_text(GTK_ENTRY(data3)));
  length[3] = strlen(slate3);
  strcpy(slate4, gtk_entry_get_text(GTK_ENTRY(data4)));
  length[4] = strlen(slate4);
  strcpy(slate17, gtk_entry_get_text(GTK_ENTRY(data17)));
  length[17] = strlen(slate17);
  strcpy(slate20, gtk_entry_get_text(GTK_ENTRY(data20)));
  length[20] = strlen(slate20);
  strcpy(slate24, gtk_entry_get_text(GTK_ENTRY(data24)));
  length[24] = strlen(slate24);
  if (!(length[3] && length[4] && length[17] && length[20] && length[24]
        && lengthX)) {
    error(widget, GINT_TO_POINTER(3));
    return;
  }
  if (!finput) {
    error(widget, GINT_TO_POINTER(8));
    return;
  }
  /*  finput = stdout; */
  fprintf(finput, "\n@INCOLLECTION{%s,\n", slateX);
  fprintf(finput, "   author = {%s},\n", slate3);
  fprintf(finput, "   title = {%s},\n", slate20);
  fprintf(finput, "   booktitle = {%s},\n", slate4);
  fprintf(finput, "   publisher = {%s},\n", slate17);
  fprintf(finput, "   year = {%s}", slate24);
  if (length[7])
    fprintf(finput, ",\n   editor = {%s}", slate7);
  if (length[23])
    fprintf(finput, ",\n   volume = {%s}", slate23);
  if (length[14])
    fprintf(finput, ",\n   number = {%s}", slate14);
  if (length[19])
    fprintf(finput, ",\n   series = {%s}", slate19);
  if (length[21])
    fprintf(finput, ",\n   type = {%s}", slate21);
  if (length[5])
    fprintf(finput, ",\n   chapter = {%s}", slate5);
  if (length[16])
    fprintf(finput, ",\n   pages = {%s}", slate16);
  if (length[1])
    fprintf(finput, ",\n   address = {%s}", slate1);
  if (length[6])
    fprintf(finput, ",\n   edition = {%s}", slate6);
  if (length[12])
      fprintf(finput, ",\n   month = {%s}", slate12);
  if (length[22])
      fprintf(finput, ",\n   URL = {%s}", slate22);
  if (length[2])
      fprintf(finput, ",\n   note = {%s}", slate2);
  if (length[13])
      fprintf(finput, ",\n   annote = {%s}", slate13);
  if (length[30])
    fprintf(finput, ",\n   uplink = {%s}", slate30);
  if (length[31])
    fprintf(finput, ",\n   crosslink = {%s}", slate31);
  if (length[32])
    fprintf(finput, ",\n   externlink = {%s}", slate32);
  fprintf(finput, " }\n");
                      /* indicate that the reference is saved */
  format = 0;
  length[1] = 0;
  length[2] = 0;
  length[5] = 0;
  length[6] = 0;
  length[7] = 0;
  length[12] = 0;
  length[13] = 0;
  length[14] = 0;
  length[16] = 0;
  length[19] = 0;
  length[21] = 0;
  length[22] = 0;
  length[23] = 0;
  length[30] = 0;
  length[31] = 0;
  length[32] = 0;
  close_window(widget);   /* remove this reference window */
}


/* Save the incollection optional fields for subsequent saving */

void  save_incoloptions(GtkWidget *widget)
{
  extern  void close_window();
  extern  int length[];
  extern  char slate1[];
  extern  char slate2[];
  extern  char slate5[];
  extern  char slate6[];
  extern  char slate7[];
  extern  char slate12[];
  extern  char slate13[];
  extern  char slate14[];
  extern  char slate16[];
  extern  char slate19[];
  extern  char slate21[];
  extern  char slate22[];
  extern  char slate23[];
  char  *text_in_field;
  int   count;

  strcpy(slate1, gtk_entry_get_text(GTK_ENTRY(data1)));
  length[1] = strlen(slate1);
  strcpy(slate5, gtk_entry_get_text(GTK_ENTRY(data5)));
  length[5] = strlen(slate5);
  strcpy(slate6, gtk_entry_get_text(GTK_ENTRY(data6)));
  length[6] = strlen(slate6);
  strcpy(slate7, gtk_entry_get_text(GTK_ENTRY(data7)));
  length[7] = strlen(slate7);
  strcpy(slate12, gtk_entry_get_text(GTK_ENTRY(data12)));
  length[12] = strlen(slate12);
  strcpy(slate14, gtk_entry_get_text(GTK_ENTRY(data14)));
  length[14] = strlen(slate14);
  strcpy(slate16, gtk_entry_get_text(GTK_ENTRY(data16)));
  length[16] = strlen(slate16);
  strcpy(slate19, gtk_entry_get_text(GTK_ENTRY(data19)));
  length[19] = strlen(slate19);
  strcpy(slate21, gtk_entry_get_text(GTK_ENTRY(data21)));
  length[21] = strlen(slate21);
  strcpy(slate23, gtk_entry_get_text(GTK_ENTRY(data23)));
  length[23] = strlen(slate23);
  strcpy(slate22, gtk_entry_get_text(GTK_ENTRY(data22)));
  length[22] = strlen(slate22);
  strcpy(slate2, gtk_entry_get_text(GTK_ENTRY(data2)));
  length[2] = strlen(slate2);
  count = gtk_text_buffer_get_char_count(text13);
  gtk_text_buffer_get_iter_at_offset(text13, &end, count);
  gtk_text_buffer_get_iter_at_offset(text13, &start, 0);
  strcpy(slate13, gtk_text_buffer_get_text(text13, &start, &end, FALSE)); 
  length[13] = count;

  close_window(widget);
}
 



/* Close the option entry window, but first delete the entries */

void  close_incoloptions(GtkWidget *widget)
{
  extern  void  close_window();
  extern  int length[];

  length[23] = 0;
  length[22] = 0;
  length[21] = 0;
  length[19] = 0;
  length[16] = 0;
  length[14] = 0;
  length[13] = 0;
  length[12] = 0;  
  length[7] = 0;  
  length[6] = 0;  
  length[5] = 0;  
  length[2] = 0;  
  length[1] = 0;  
  close_window(widget);
}


/* The procedure to put the optional incollection style fields
 * on the screen */

void incoloptions(GtkWidget *widget)
{
  extern  int format;
  GtkTooltips *tooltips;
  GtkWidget  *window;
  GtkWidget  *decoration;
  GtkWidget  *totalPane;
  GtkWidget  *field0;
  GtkWidget  *field1;
  GtkWidget  *field2;
  GtkWidget  *field3;
  GtkWidget  *field4;
  GtkWidget  *field5;
  GtkWidget  *field6;
  GtkWidget  *field7;
  GtkWidget  *field8;
  GtkWidget  *field9;
  GtkWidget  *field10;
  GtkWidget  *field11;
  GtkWidget  *field12;
  GtkWidget  *key0;
  GtkWidget  *key1;

  void close_incoloptions();
  void save_incoloptions();

  if (format == 0) {
    error (widget, GINT_TO_POINTER(6));
    return;
  }

                    /* create the tooltip help feature */

  tooltips = gtk_tooltips_new();

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
  gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
  gtk_widget_set_usize(GTK_WIDGET(window), 400, 760);
  decoration = gtk_frame_new("Optional InCollection fields");
  gtk_container_add(GTK_CONTAINER(window), decoration);
  totalPane = gtk_vbox_new(FALSE, 5);
  gtk_container_add(GTK_CONTAINER(decoration), totalPane);

                         /* put the text fields in place */
  field1 = gtk_hbox_new(FALSE, 0);
  data7 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data7), LARGE);
  label7 = gtk_label_new("Editor/s:");
  gtk_widget_set_usize(GTK_WIDGET(label7), 75, -1);
  gtk_box_pack_start(GTK_BOX(field1), label7, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field1), data7, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);

  field2 = gtk_hbox_new(FALSE, 0);
  data23 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data23), TINY);
  label23 = gtk_label_new("|| Volume:");
  gtk_widget_set_usize(GTK_WIDGET(label23), 75, -1);
  gtk_box_pack_start(GTK_BOX(field2), label23, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field2), data23, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);

  field3 = gtk_hbox_new(FALSE, 0);
  data14 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data14), TINY);
  label14 = gtk_label_new("|| Number:");
  gtk_widget_set_usize(GTK_WIDGET(label14), 75, -1);
  gtk_box_pack_start(GTK_BOX(field3), label14, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field3), data14, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);

  field4 = gtk_hbox_new(FALSE, 0);
  data19 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data19), SMALL);
  label19 = gtk_label_new("Series:");
  gtk_widget_set_usize(GTK_WIDGET(label19), 75, -1);
  gtk_box_pack_start(GTK_BOX(field4), label19, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field4), data19, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);

  field5 = gtk_hbox_new(FALSE, 0);
  data21 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data21), TINY);
  label21 = gtk_label_new("Type:");
  gtk_widget_set_usize(GTK_WIDGET(label21), 75, -1);
  gtk_box_pack_start(GTK_BOX(field5), label21, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field5), data21, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);

  field6 = gtk_hbox_new(FALSE, 0);
  data5 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data5), TINY);
  label5 = gtk_label_new("Chapter:");
  gtk_widget_set_usize(GTK_WIDGET(label5), 75, -1);
  gtk_box_pack_start(GTK_BOX(field6), label5, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field6), data5, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);

  field7 = gtk_hbox_new(FALSE, 0);
  data16 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data16), LARGE);
  label16 = gtk_label_new("Pages:");
  gtk_widget_set_usize(GTK_WIDGET(label16), 75, -1);
  gtk_box_pack_start(GTK_BOX(field7), label16, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field7), data16, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field7, FALSE, TRUE, 2);

  field8 = gtk_hbox_new(FALSE, 0);
  data1 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data1), LARGE);
  label1 = gtk_label_new("Address:");
  gtk_widget_set_usize(GTK_WIDGET(label1), 75, -1);
  gtk_box_pack_start(GTK_BOX(field8), label1, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field8), data1, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field8, FALSE, TRUE, 2);

  field9 = gtk_hbox_new(FALSE, 0);
  data6 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data6), SMALL);
  label6 = gtk_label_new("Edition:");
  gtk_widget_set_usize(GTK_WIDGET(label6), 75, -1);
  gtk_box_pack_start(GTK_BOX(field9), label6, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field9), data6, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field9, FALSE, TRUE, 2);

  field10 = gtk_hbox_new(FALSE, 0);
  data12 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data12), TINY);
  label12 = gtk_label_new("Month:");
  gtk_widget_set_usize(GTK_WIDGET(label12), 75, -1);
  gtk_box_pack_start(GTK_BOX(field10), label12, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field10), data12, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field10, FALSE, TRUE, 2);

  field11 = gtk_hbox_new(FALSE, 0);
  data22 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data22), LARGE);
  label22 = gtk_label_new("URL:");
  gtk_widget_set_usize(GTK_WIDGET(label22), 75, -1);
  gtk_box_pack_start(GTK_BOX(field11), label22, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field11), data22, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field11, FALSE, TRUE, 2);

  field12 = gtk_hbox_new(FALSE, 0);
  data2 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data2), LARGE);
  label2 = gtk_label_new("note:");
  gtk_widget_set_usize(GTK_WIDGET(label2), 75, -1);
  gtk_box_pack_start(GTK_BOX(field12), label2, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field12), data2, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field12, FALSE, TRUE, 2);

  text13 = gtk_text_buffer_new(NULL);
  data13 = gtk_text_view_new_with_buffer(text13);
  textscroll = gtk_scrolled_window_new(NULL, NULL);
  font_desc = pango_font_description_from_string("Sans 12");
  gtk_widget_modify_font(data13, font_desc);
  gtk_container_add(GTK_CONTAINER(textscroll), data13);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscroll),
                                 GTK_POLICY_AUTOMATIC,
				 GTK_POLICY_AUTOMATIC);
  gtk_widget_set_usize(GTK_WIDGET(data13), 30, 250);
  label13 = gtk_label_new("Annotation:");
  gtk_box_pack_start(GTK_BOX(totalPane), label13, FALSE, TRUE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), textscroll, FALSE, TRUE, 2);

                          /* finally, put the cancel button in place */
  field0 = gtk_hbox_new(FALSE, 0);
  key0 = gtk_button_new_with_label("CANCEL");
  gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1);
  g_signal_connect(GTK_OBJECT(key0), "clicked",
                   G_CALLBACK(close_incoloptions), NULL);
  gtk_tooltips_set_tip(tooltips, key0,
                       "Discard the contents of this window", NULL);
  gtk_box_pack_end(GTK_BOX(field0), key0, FALSE, FALSE, 10);
  key1 = gtk_button_new_with_label("Save");
  gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
  g_signal_connect(GTK_OBJECT(key1), "clicked",
                   G_CALLBACK(save_incoloptions), NULL);
  gtk_tooltips_set_tip(tooltips, key1,
                       "Store the contents of this window", NULL);
  gtk_box_pack_end(GTK_BOX(field0), key1, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 10);

                         /* put the composite window on the screen */
  gtk_widget_show_all(window);
}



/* The procedure to put the basic incollection style on the screen */

void incol(GtkWidget *widget)
{
  GtkTooltips *tooltips;
  GtkWidget  *window;
  GtkWidget  *decoration;
  GtkWidget  *totalPane;
  GtkWidget  *opDecoration;
  GtkWidget  *field0;
  GtkWidget  *field1;
  GtkWidget  *option;
  GtkWidget  *controls;
  GtkWidget  *key1;
  GtkWidget  *key2;
  GtkWidget  *key3;
  GtkWidget  *key4;
  GtkWidget  *field2;
  GtkWidget  *field3;
  GtkWidget  *field4; 
  GtkWidget  *field5;
  GtkWidget  *field6;
  extern int  format;
  extern char slate0[];

  extern  void linkwindow();
  extern void closure_check();  /* defined in file cleanup.c */
  extern void close_window();   /* defined in file cleanup.c */
  void  incoloptions();
  void  save_incol();

                         /* create the tooltip help feature */

  tooltips = gtk_tooltips_new();

  format = 6;            /* indicate processing of an INCOLLECTION */

                         /* create the wondow and its top panel */
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "XBibFile create");
  gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
  decoration = gtk_frame_new("InCollection type - required fields");
  gtk_widget_set_usize(GTK_WIDGET(window), 450, 355);
  gtk_container_add(GTK_CONTAINER(window), decoration);
  totalPane = gtk_vbox_new(FALSE, 5);
  gtk_container_add(GTK_CONTAINER(decoration), totalPane);

  field1 = gtk_hbox_new(FALSE,0);
  dataX = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(dataX), SMALL);
  gtk_widget_set_usize(GTK_WIDGET(dataX), 345, -1);
  labelX = gtk_label_new("Tag/s:");
  gtk_widget_set_usize(GTK_WIDGET(labelX), 65, -1);
  gtk_box_pack_start(GTK_BOX(field1), labelX, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field1), dataX, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field1, FALSE, TRUE, 10);

  field0 = gtk_hbox_new(FALSE, 0);
  data0 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data0), LARGE);
  gtk_widget_set_usize(GTK_WIDGET(data0), 345, -1);
  label0 = gtk_label_new("File used:");
  gtk_widget_set_usize(GTK_WIDGET(label0), 65, -1);
  gtk_entry_set_text(GTK_ENTRY(data0), slate0);
  gtk_box_pack_start(GTK_BOX(field0), label0, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field0), data0, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field0, FALSE, TRUE, 2);

                         /* position the remaining field entries */
  field2 = gtk_hbox_new(FALSE, 0);
  data3 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data3), LARGE);
  gtk_widget_set_usize(GTK_WIDGET(data3), 345, -1);
  label3 = gtk_label_new("Authors/s:");
  gtk_widget_set_usize(GTK_WIDGET(label3), 65, -1);
  gtk_box_pack_start(GTK_BOX(field2), label3, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field2), data3, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field2, FALSE, TRUE, 2);

  field3 = gtk_hbox_new(FALSE, 0);
  data20 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data20), LARGE);
  gtk_widget_set_usize(GTK_WIDGET(data20), 345, -1);
  label20 = gtk_label_new("Title:");
  gtk_widget_set_usize(GTK_WIDGET(label20), 65, -1);
  gtk_box_pack_start(GTK_BOX(field3), label20, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field3), data20, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field3, FALSE, TRUE, 2);

  field4 = gtk_hbox_new(FALSE, 0);
  data4 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data4), LARGE);
  gtk_widget_set_usize(GTK_WIDGET(data4), 345, -1);
  label4 = gtk_label_new("BookTitle:");
  gtk_widget_set_usize(GTK_WIDGET(label4), 65, -1);
  gtk_box_pack_start(GTK_BOX(field4), label4, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field4), data4, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field4, FALSE, TRUE, 2);

  field5 = gtk_hbox_new(FALSE, 0);
  data17 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data17), LARGE);
  gtk_widget_set_usize(GTK_WIDGET(data4), 345, -1);
  label17 = gtk_label_new("Publisher:");
  gtk_widget_set_usize(GTK_WIDGET(label17), 65, -1);
  gtk_box_pack_start(GTK_BOX(field5), label17, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field5), data17, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field5, FALSE, TRUE, 2);

  field6 = gtk_hbox_new(FALSE, 0);
  data24 = gtk_entry_new();
  gtk_entry_set_max_length(GTK_ENTRY(data24), TINY);
  gtk_widget_set_usize(GTK_WIDGET(data24), 200, -1);
  label24 = gtk_label_new("Year:");
  gtk_widget_set_usize(GTK_WIDGET(label24), 65, -1);
  gtk_box_pack_start(GTK_BOX(field6), label24, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(field6), data24, FALSE, FALSE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), field6, FALSE, TRUE, 2);

                         /* put the control keys on to the window */
  option = gtk_hbox_new(FALSE, 0);
  key2 = gtk_button_new_with_label("Optional fields");
  gtk_widget_set_usize(GTK_WIDGET(key2), 130, -1);
  g_signal_connect(GTK_OBJECT(key2), "clicked",
                   G_CALLBACK(incoloptions), NULL);
  gtk_tooltips_set_tip(tooltips, key2,
           "Click here to get window containing remaining Incollection fields",
                       NULL);
  gtk_box_pack_start(GTK_BOX(option), key2, FALSE, FALSE, 10);
  controls = gtk_hbox_new(FALSE, 0);
  key1 = gtk_button_new_with_label("Save");
  gtk_widget_set_usize(GTK_WIDGET(key1), 90, -1);
  g_signal_connect(GTK_OBJECT(key1), "clicked",
                   G_CALLBACK(save_incol), NULL);
  gtk_tooltips_set_tip(tooltips, key1,
                       "Store this Incollection reference in database", NULL);
  gtk_box_pack_start(GTK_BOX(controls), key1, FALSE, FALSE, 30);
  key3 = gtk_button_new_with_label("Cancel");
  gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1);
  g_signal_connect(GTK_OBJECT(key3), "clicked",
                   G_CALLBACK(closure_check), NULL);
  gtk_tooltips_set_tip(tooltips, key3,
                       "Discard this Incollection entry", NULL);
  gtk_box_pack_start(GTK_BOX(controls), key3, FALSE, FALSE, 30);
  key4 = gtk_button_new_with_label("Linking");
  gtk_widget_set_usize(GTK_WIDGET(key4), 90, -1);
  g_signal_connect(GTK_OBJECT(key4), "clicked",
                   G_CALLBACK(linkwindow), NULL);
  gtk_tooltips_set_tip(tooltips, key4,
                 "Click here for window to create links for this Incollection",
                        NULL);
  gtk_box_pack_start(GTK_BOX(controls), key4, FALSE, FALSE, 30);
  gtk_box_pack_start(GTK_BOX(totalPane), option, FALSE, TRUE, 10);
  gtk_box_pack_start(GTK_BOX(totalPane), controls, FALSE, TRUE, 10);


  format = 6;

                         /* make the composite visible on screen */
  gtk_widget_show_all(window);
}