Home   |   Guides and Tutorials   |   What's New?   |   Comments   |   About
 

GtkCheckMenuItem - Menu Item With Check Box

by Brent Fox
Last Modified: Wednesday, 19-May-2004 11:54:20 EDT

Introduction
    The GtkCheckMenuItem widget is embedded inside a GtkMenu widget. It places a checkbox by a menu item that allows the user to leave a menu item permanently selected.
Screenshot



Source Code
Source code for this example is also available in the file checkmenu.c
/*
 *File name: checkmenu.c
 */

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

/*-- This function allows the program to exit properly when the window is closed --*/
gint destroyapp (GtkWidget *widget, gpointer gdata)
{
  g_print ("Quitting...\n");
  gtk_main_quit();
  return (FALSE);
}

/*-- This function allows the program to exit properly when the window is closed --*/
gint ClosingAppWindow (GtkWidget *widget, gpointer gdata)
{
  g_print ("Quitting...\n");
  gtk_main_quit();
  return (FALSE);
}

int main (int argc, char *argv[])
{
  /*-- Declare the GTK Widgets used in the program --*/
  GtkWidget *window;
  GtkWidget *menuFile;
  GtkWidget *menuEdit;
  GtkWidget *menuView;  
  GtkWidget *menuHelp;  
  GtkWidget *menubar;
  GtkWidget *menu;
  GtkWidget *menuitem;
  GtkWidget *vbox;
  GtkWidget *text;

  gchar *buffer = "Go to the file menu and select Exit to close the application.";

  /*--  Initialize GTK --*/
  gtk_init (&argc, &argv);

  /*-- Create the new window --*/
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

  /*-- Create the vbox --*/
  vbox = gtk_vbox_new(FALSE, 0);

  /*-- Create a text area --*/
  text = gtk_text_new(NULL, NULL);

  /*-- Set text area to be editable --*/
  gtk_text_set_editable(GTK_TEXT (text), TRUE);

  /*-- Connect the window to the destroyapp function  --*/
  gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(destroyapp), NULL);

  /*-- Create the menu bar --*/
  menubar = gtk_menu_bar_new();

  /*-- Add the menubar to the vbox --*/
  gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
  gtk_widget_show(menubar);

  /*-- Add the text area to the window --*/
  gtk_container_add(GTK_CONTAINER(vbox), text);  

  /*-- Add the vbox to the main window --*/
  gtk_container_add(GTK_CONTAINER(window), vbox);
  
  /*---------------- Create File menu items ------------------*/

  menuFile = gtk_menu_item_new_with_label ("File");
  gtk_menu_bar_append (GTK_MENU_BAR(menubar), menuFile);
  gtk_widget_show(menuFile);

  /*-- Create File submenu  --*/
  menu = gtk_menu_new();
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuFile), menu);

  /*-- Create New menu item under File submenu --*/
  menuitem = gtk_menu_item_new_with_label ("New");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);

  /*-- Create Open menu item under File submenu --*/
  menuitem = gtk_menu_item_new_with_label ("Open");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);

  /*-- Create Exit menu item under File submenu --*/
  menuitem = gtk_menu_item_new_with_label ("Exit");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_signal_connect(GTK_OBJECT (menuitem), "activate", GTK_SIGNAL_FUNC (ClosingAppWindow), NULL);
  gtk_widget_show (menuitem);
  /*---------------- End File menu declarations ----------------*/

  /*---------------- Create Edit menu items --------------------*/

  menuEdit = gtk_menu_item_new_with_label ("Edit");
  gtk_menu_bar_append (GTK_MENU_BAR(menubar), menuEdit);
  gtk_widget_show(menuEdit);

  /*-- Create File submenu --*/
  menu = gtk_menu_new();
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuEdit), menu);

  /*-- Create Undo menu item under Edit submenu --*/
  menuitem = gtk_menu_item_new_with_label ("Undo");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);

  /*-- Create Copy menu item under File submenu --*/
  menuitem = gtk_menu_item_new_with_label ("Copy");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);

  /*-- Create Cut menu item under File submenu --*/
  menuitem = gtk_menu_item_new_with_label ("Cut");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);
  /*---------------- End Edit menu declarations ----------------*/

  /*---------------- Create View menu items --------------------*/

  menuView = gtk_menu_item_new_with_label ("View");
  gtk_menu_bar_append (GTK_MENU_BAR(menubar), menuView);
  gtk_widget_show(menuView);

  /*-- Create File submenu --*/
  menu = gtk_menu_new();
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuView), menu);

  /*-- Create Refresh menu item under File submenu --*/
  menuitem = gtk_menu_item_new_with_label ("Refresh");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);

  /*-- Create Menubar item under Edit submenu --*/
  menuitem = gtk_check_menu_item_new_with_label ("View Menubar");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);

  /*-- Create Toolbar item under File submenu --*/
  menuitem = gtk_check_menu_item_new_with_label ("View Toolbar");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);
  /*---------------- End Edit menu declarations ----------------*/

  /*---------------- Start Help menu declarations ----------------*/
  menuHelp = gtk_menu_item_new_with_label ("Help");
  gtk_menu_bar_append (GTK_MENU_BAR(menubar), menuHelp);
  gtk_widget_show(menuHelp);

  /*-- Create Help submenu --*/
  menu = gtk_menu_new();
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuHelp), menu);

  /*-- Create About menu item under Help submenu --*/
  menuitem = gtk_menu_item_new_with_label ("About");
  gtk_menu_append(GTK_MENU(menu), menuitem);
  gtk_widget_show (menuitem);
  /*---------------- End Help menu declarations ----------------*/

  /*-- Add some text to the window --*/
  gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, buffer, strlen(buffer));

  /*-- Set window border to zero so that text area takes up the whole window --*/
  gtk_container_border_width (GTK_CONTAINER (window), 0);

  /*-- Set the window to be 640 x 480 pixels --*/
  gtk_window_set_default_size (GTK_WINDOW(window), 640, 200);

  /*-- Set the window title --*/
  gtk_window_set_title(GTK_WINDOW (window), "Menu");

  /*-- Display the widgets --*/
  gtk_widget_show(text);
  gtk_widget_show(menuitem);
  gtk_widget_show(menuFile);
  gtk_widget_show(menuEdit);    
  gtk_widget_show(menuView);  
  gtk_widget_show(menuHelp);      
  gtk_widget_show(vbox);
  gtk_widget_show(window);

  /*-- Start the GTK event loop --*/
  gtk_main();

  /*-- Return 0 if exit is successful --*/
  return 0;
}

Compile the Source Code
gcc -Wall -g checkmenu.c -o checkmenu `gtk-config --cflags` `gtk-config --libs`

Execute the Program
./checkmenu

What's Related


All Rights Reserved Linux Headquarters © 2000-2007
Linux is a registered trademark of Linus Torvalds
All logos are registered trademarks of their respective owners
Last modified: Wednesday, May 19, 2004