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 submenu in a GtkMenubar.

A short tutorial showing how to build a submenu in GtkMenubar. You can refer to the complete GtkMenubar tutorial for full explanations.

Details

GtkMenubar submenu example To build a submenu, first create (see note numbers on source code):

  1. a standard menu (GtkMenu and object tree, see tutorial about this),
  2. a GtkMenuItem supporting the submenu ($view_zoom_item),
  3. a GtkMenu with associated menu items,
  4. and link the submenu to the menu item using set_submenu() method.

Notes :

  • you can create as many submenu levels as needed. Nested submenus are unlimited,
  • popup submenus are create using the same method.

Visual Tree

  menubar:
    ...
    View
      Line
      Border
      Toolbar
      ---
      Zoom
        50
        100
        150
      ---
      Scrollbar

Logical tree and relationships

  0 - $window  (GtkWindow) -> add()
    1 - $menubar  (GtkMenubar) -> append() or add()
      2 - $view_item  (GtkMenuItem)  -> set_submenu($view_menu)
        3 - $view_menu  (GtkMenu) -> append() or add()
          4 - $view_zoom_item (GtkMenuItem)
            5 - $zoom_menu (GtkMenu) -> append()
              6 - $view_zoom_50_item  (GtkMenuItem)
              6 - $view_zoom_100_item (GtkMenuItem)
              6 - $view_zoom_150_item (GtkMenuItem)

Source code

Here is the relevant part of the source code ; the full source is available as an attachment.

<?php
$menubar
= new GtkMenuBar(); // 1 - note 1
$menubar->append($view_item = new GtkMenuItem('_View')); // 2

 
$view_item->set_submenu($view_menu = new  GtkMenu()); // 3

   
$view_menu->append($view_line_item    = new GtkMenuItem('_Line'));    // 4
   
$view_menu->append($view_border_item  = new GtkMenuItem('_Border'));  // 4
   
$view_menu->append($view_toolbar_item = new GtkMenuItem('_Toolbar')); // 4

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

   
$view_menu->append($view_zoom_item = new GtkMenuItem('_Zoom'));       // 4 - note 2

     
$view_zoom_item->set_submenu($zoom_menu = new  GtkMenu());          // 5 - note 3, 4
     
$zoom_menu->append($view_zoom_50_item  = new GtkMenuItem('_50'));   // 6
     
$zoom_menu->append($view_zoom_100_item = new GtkMenuItem('_100'));  // 6
     
$zoom_menu->append($view_zoom_150_item = new GtkMenuItem('15_0'));  // 6

   
$view_menu->append(new GtkSeparatorMenuItem());

   
$view_menu->append($radio3 = new GtkRadioMenuItem(null, 'Scrollbar'));
?>

Links

PřílohaVelikost
gtk-menubar-overview-submenu.php_.txt3.61 KB