A.32. Tool Bar

function new_pixmap (window_wgt, filename)
{
  local		pixmask;
  
  pixmask = gdk_pixmap_create_from_xpm
    (window_wgt.get_window(),
     window_wgt.get_color_struct (GTK_COLOR_BACKGROUND, GTK_STATE_NORMAL),
     filename);
  
  if (car(pixmask))
    gtk_pixmap_new (car(pixmask), cadr(pixmask));
  else
    nil;
}

method GtkWidget.get_color_struct (where, state)
{
  local		color = new GdkColor();
  color.pixel = .get_color (where, state);
  color;
}

function create_toolbar ()
{
  local toolbar, vbox, toolbar, button, entry;
  
  win_toolbar = new (GtkWindow);
  win_toolbar.signal ("destroy", #win_toolbar = nil);
  win_toolbar.title = "Toolbar test";
  win_toolbar.border_width = 0;
  win_toolbar.set_policy(FALSE, TRUE, TRUE);
  win_toolbar.realize();
  
  vbox = new(GtkVBox);
  win_toolbar.add(vbox);
  vbox.show();
  
  toolbar = new(GtkToolbar);
  toolbar.set_orientation(GTK_ORIENTATION_HORIZONTAL);
  toolbar.set_style(GTK_TOOLBAR_BOTH);
  toolbar.set_button_relief(GTK_RELIEF_NONE);
  vbox.pack_start(toolbar, FALSE, FALSE, 0);
  vbox.show();
  
  button = toolbar.append_item("Horizontal", "Horizontal toolbar layout",
			       "Toolbar/Horizontal",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked",
		`((@toolbar).set_orientation(GTK_ORIENTATION_HORIZONTAL)));
  
  
  button = toolbar.append_item("Vertical", "Vertical toolbar layout",
			       "Toolbar/Vertical",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked",
		`((@toolbar).set_orientation(GTK_ORIENTATION_VERTICAL)));
  
  toolbar.append_space();
  
  button = toolbar.append_item("Icons", "Only show toolbar icons",
			       "Toolbar/Icons",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_style(GTK_TOOLBAR_ICONS)));
  
  button = toolbar.append_item("Text", "Only show toolbar text",
			       "Toolbar/Text",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_style(GTK_TOOLBAR_TEXT)));
  
  button = toolbar.append_item("Both", "Show toolbar icons and text",
			       "Toolbar/Both",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_style(GTK_TOOLBAR_BOTH)));
  
  toolbar.append_space();
  
  entry = new(GtkEntry);
  toolbar.append_widget(entry, "This is an unusable GtkEntry ;-)", nil);
  
  toolbar.append_space();
  
  button = toolbar.append_item("Small", "Use small spaces",
			       "Toolbar/Small",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_space_size(5)));
  
  button = toolbar.append_item("Big", "Use big spaces",
			       "Toolbar/Big",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_space_size(15)));
  
  toolbar.append_space();
  
  button = toolbar.append_item("Enable", "Enable tooltips",
			       "Toolbar/Enable",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_tooltips(TRUE)));
  
  button = toolbar.append_item("Disable", "Disable tooltips",
			       "Toolbar/Disable",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_tooltips(FALSE)));
  
  toolbar.append_space();
  
  button.label = "Borders";
  button = toolbar.append_item("Borders", "Show button borders",
			       "Toolbar/Borders",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_button_relief(GTK_RELIEF_NORMAL)));
  
  button = toolbar.append_item("Borderless", "Hide button borders",
			       "Toolbar/Borderless",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked", `((@toolbar).set_button_relief(GTK_RELIEF_NONE)));
  
  toolbar.append_space();
  
  button.label = "Empty";
  button = toolbar.append_item("Empty", "Empty spaces",
			       "Toolbar/Empty",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked",
		`((@toolbar).set_space_style(GTK_TOOLBAR_SPACE_EMPTY)));
  
  button.label = "Lines";
  button = toolbar.append_item("Lines", "Lines in spaces",
			       "Toolbar/Lines",
			       new_pixmap(win_toolbar, "test.xpm"));
  button.signal("clicked",
		`((@toolbar).set_space_style(GTK_TOOLBAR_SPACE_LINE)));
  
  toolbar.set_tooltips(TRUE);
  
  win_toolbar.show_all();
  win_toolbar;
}

function main ()
{
  local window, win_toolbar;
  TRUE=1;
  FALSE=0;
  window = create_toolbar ();
  window.signal ("destroy", #exit_program(0));
  init_ipc("toolbar", "toolbarq");
  gtk_main ();
}