#!/usr/bin/env python
'''Menu

This example demonstrates the use of various menu types in gtk.  It
demonstrates the new submenu navigation and scrolling menu features of
gtk 2.0.'''

import gtk

def create_menu(depth, length=5):
    if depth < 1:
        return None

    menu = gtk.Menu()
    group= None

    for i in range(length):
        menuitem = gtk.RadioMenuItem(group, 'item %2d - %d' % (depth, i))
        group = menuitem
        menu.add(menuitem)
        menuitem.show()
        if depth > 1:
            submenu = create_menu(depth - 1)
            menuitem.set_submenu(submenu)
    return menu

class MenuDemo(gtk.Window):
    def __init__(self, parent=None):
        # Create the toplevel window
        gtk.Window.__init__(self)
        try:
            self.set_screen(parent.get_screen())
        except AttributeError:
            self.connect('destroy', lambda *w: gtk.main_quit())

        self.set_title(self.__class__.__name__)

        vbox = gtk.VBox()
        self.add(vbox)

        menubar = gtk.MenuBar()
        vbox.pack_start(menubar, expand=False)

        menuitem = gtk.MenuItem('test\nline2')
        menuitem.set_submenu(create_menu(2, 50))
        menubar.add(menuitem)

        menuitem = gtk.MenuItem('foo')
        menuitem.set_submenu(create_menu(2))
        menubar.add(menuitem)

        menuitem = gtk.MenuItem('bar')
        menuitem.set_submenu(create_menu(2))
        menuitem.set_right_justified(True)
        menubar.add(menuitem)

        vbox2 = gtk.VBox(spacing=10)
        vbox2.set_border_width(10)
        vbox.pack_start(vbox2)

        combo_box = gtk.combo_box_new_text()
        combo_box.set_wrap_width(2)
        for i in range(50):
            combo_box.append_text('item - %d' % i)
        combo_box.set_active(0)
        vbox2.pack_start(combo_box)

        separator = gtk.HSeparator()
        vbox.pack_start(separator, expand=False)

        vbox2 = gtk.VBox(spacing=10)
        vbox2.set_border_width(10)
        vbox.pack_start(vbox2, expand=False)

        button = gtk.Button('close')
        button.connect('clicked', lambda button, w=self: w.destroy())
        vbox2.pack_start(button)
        button.set_flags(gtk.CAN_DEFAULT)
        button.grab_default()

        self.show_all()

def main():
    MenuDemo()
    gtk.main()

if __name__ == '__main__':
    main()
