• 26 May 2013 - Since the new version attracted too many spammy registrations (around 250 fake accounts/day), user registrations are now protected by Mollom's spam protection service. Contact us if this causes some trouble.
  • 01 May 2013 - After the site upgrade, all passwords were reset and you will need to ask the site for a login reset on your first connection.

Building a GtkMenubar

Here is a quick overview of how to build a menu bar using php-gtk2 widgets. Think of it as a cheat sheet on menubar and friends.

GtkMenubar example overview The goal of this page is to list the most important objects and methods needed to build a basic menubar. You can use this document to write your own function or menubar class builder. We try to keep this document as simple as possible, not to show all advanced mechanisms.

Widget tree

Here is a complete widget tree with some useful information

  • tree level ; you can find this level on source code comments,
  • php variable name (sometimes)
  • Gtk class related
  • variable or strings instance in source code below
  • methods available to build object tree
# widget tree (or relations) :
  0 - $window  (GtkWindow) -> add()
    1 - $menubar  (GtkMenubar) -> append() or add()
      2 - $item  (GtkMenuItem) (File, Edit) -> set_submenu()
        3 - $menu  (GtkMenu) ($quit_menu, $file_menu) -> append() or add()
          4 - $menu_item (GtkMenuItem|GtkSeparatorMenuItem|GtkRadioMenuItem)

and here is the expected widget representation on your screen GtkMenubar overview components

  menubar:
    File
      New
      Quit
    Edit
      Cut
      Copy
      Paste
      ---
      - Choice 1
      * Choice 2 (activated)
      - Choice 3

Details

Here is a complete source code example. For this example, code indentation is relative to the object tree hierarchy, not to the code structure as usual. A few points :

  1. to build a group a toggle buttons, give null to first widget in a group, and the first widget in successive widget creations.
  2. you can use either append() or add() methods without significant changes.
  3. default value is "choice 2" for radio buttons ; see the set_active() method,
  4. for button, use "activate" signal,
  5. for toggle buttons, the signal to catch is "toggled",
<?php
$menubar
= new GtkMenuBar(); // 1
$menubar->append($file_item = new GtkMenuItem('_File')); // 2
$menubar->append($edit_item = new GtkMenuItem('_Edit')); // 2

 
$file_item->set_submenu($quit_menu = new  GtkMenu()); // 3

   
$quit_menu->append($file_new_item = new GtkMenuItem('_New'));   // 4
   
$quit_menu->append($file_quit_item = new GtkMenuItem('_Quit')); // 4

 
$edit_item->set_submenu($edit_menu = new  GtkMenu()); // 3

    # create 3 buttons : signal : 'activate'
   
$edit_menu->append($edit_cut_item   = new GtkMenuItem('_Cut'));   // 4
   
$edit_menu->append($edit_copy_item  = new GtkMenuItem('Co_py'));  // 4
   
$edit_menu->append($edit_paste_item = new GtkMenuItem('_Paste')); // 4

   
$edit_menu->append(new GtkSeparatorMenuItem());  // 4

    # create a group of radio buttons : signal : 'toggled' // note 1
   
$edit_menu->append($radio1 = new GtkRadioMenuItem(null,    'Choice _1')); // 4
   
$edit_menu->append($radio2 = new GtkRadioMenuItem($radio1, 'Choice _2')); // 4
   
$edit_menu->append($radio3 = new GtkRadioMenuItem($radio1, 'Choice _3')); // 4
   
$radio2->set_active(true); // note 3

# setup some signal callbacks
$file_quit_item->connect_simple('activate', array('Gtk','main_quit'));  //note 4
$file_new_item->connect  ('activate', 'menu_activate', 'file_new');
$edit_copy_item->connect ('activate', 'menu_activate', 'edit_copy');
$edit_paste_item->connect('activate', 'menu_activate', 'edit_paste');
$edit_cut_item->connect  ('activate', 'menu_activate', 'edit_cut');

$radio1->connect('toggled', 'menu_toggle', 'edit_choice1');  // note 5
$radio2->connect('toggled', 'menu_toggle', 'edit_choice2');
$radio3->connect('toggled', 'menu_toggle', 'edit_choice3');

# php-gtk usual application initialization
$window = new GtkWindow();  // 0
$window->set_size_request(150, -1);
$window->connect_simple('destroy', array('Gtk','main_quit'));
$window->set_position(Gtk::WIN_POS_CENTER);

$window->add($menubar);   // 0

$window->show_all();
Gtk::main();

function
menu_activate($button, $userdata) {
  echo
"button : $userdata\n";
}

function
menu_toggle($button, $userdata) {
 
# if button is active (selected)
 
if ($button->get_active())
    echo
"button toggle : $userdata\n";
}
?>

Links

Examples

API

AttachmentSize
gtk-menubar-overview.php_.txt2.51 KB