def __init__(self):
        """Creates a new mathogen tutorial display, with a clickable
        list of avaliable tutorials."""
        gtk.VBox.__init__(self, False, 0)

        self._tute = MathogenTute()

        self._menu = self._build_menu(self._tute)
        self._menu.show()  #TODO make a toggle function?
        self.pack_start(self._menu, True, True, 0)

        self._viewer = gtk.VBox(False, 0)
        #viewer stays hidden until an option is selected
        self.pack_start(self._viewer, True, True, 0)

        self._page_window = gtk.ScrolledWindow()
        self._page_window.set_size_request(1000, 500)
        self._page_window.set_policy(gtk.POLICY_AUTOMATIC,
                                     gtk.POLICY_AUTOMATIC)
        self._page_window.show()
        self._viewer.pack_start(self._page_window, True, True, 0)

        self._control_strip = gtk.HBox(True, 5)
        self._control_strip.show()
        self._viewer.pack_end(self._control_strip, False, False, 0)

        self._btn_menu = gtk.Button("Menu")
        self._btn_menu.connect('clicked', self._btn_menu_clicked_cb)
        self._btn_menu.show()
        self._control_strip.pack_start(self._btn_menu, True, False, 0)

        self._page_buttons = gtk.HBox(True, 5)
        self._page_buttons.show()
        #page buttons will be added to this
        self._control_strip.pack_start(self._page_buttons, True, True, 0)

        self.show()
class MathogenTuteGui(gtk.VBox):
    """Handles GUI display for a mathogen tutorials"""
    def __init__(self):
        """Creates a new mathogen tutorial display, with a clickable
        list of avaliable tutorials."""
        gtk.VBox.__init__(self, False, 0)

        self._tute = MathogenTute()

        self._menu = self._build_menu(self._tute)
        self._menu.show()  #TODO make a toggle function?
        self.pack_start(self._menu, True, True, 0)

        self._viewer = gtk.VBox(False, 0)
        #viewer stays hidden until an option is selected
        self.pack_start(self._viewer, True, True, 0)

        self._page_window = gtk.ScrolledWindow()
        self._page_window.set_size_request(1000, 500)
        self._page_window.set_policy(gtk.POLICY_AUTOMATIC,
                                     gtk.POLICY_AUTOMATIC)
        self._page_window.show()
        self._viewer.pack_start(self._page_window, True, True, 0)

        self._control_strip = gtk.HBox(True, 5)
        self._control_strip.show()
        self._viewer.pack_end(self._control_strip, False, False, 0)

        self._btn_menu = gtk.Button("Menu")
        self._btn_menu.connect('clicked', self._btn_menu_clicked_cb)
        self._btn_menu.show()
        self._control_strip.pack_start(self._btn_menu, True, False, 0)

        self._page_buttons = gtk.HBox(True, 5)
        self._page_buttons.show()
        #page buttons will be added to this
        self._control_strip.pack_start(self._page_buttons, True, True, 0)

        self.show()

    def _btn_menu_clicked_cb(self, widget, data=None):
        self._viewer.hide()
        self._menu.show()

    def _menu_option_clicked_cb(self, widget, data):
        self._show_tutorial(data)

    def _btn_page_clicked_cb(self, widget, data):
        page_number = data
        self._show_page(self._tutorial, page_number)

    def _build_menu(self, tute):
        menu = gtk.VBox(True, 20)
        for tutorial in tute.get_tutorial_list():
            btn = gtk.Button(tutorial)
            _set_font_params(btn.get_child(), scale=_MENU_BUTTON_TEXT_SCALE)
            btn.show()
            btn.connect("clicked", self._menu_option_clicked_cb, tutorial)
            menu.pack_start(btn, True, True, 0)
        return menu

    def _show_tutorial(self, tutorial):
        for child in self._page_buttons.get_children():
            self._page_buttons.remove(child)

        self._tutorial = tutorial
        page_count = self._tute.page_count(tutorial)
        if page_count == 0:
            if len(self._page_window.get_children()) > 0:
                self._page_window.remove(self._page_window.get_children()[0])
            message = gtk.Label("No pages to display")
            message.show()
            self._page_window.add_with_viewport(message)
        else:
            for page_number in range(0, page_count):
                button = gtk.Button(str(page_number))
                _set_font_params(button.get_child(),
                                 scale=_PAGE_NUMBER_BUTTON_TEXT_SCALE)
                button.connect("clicked", self._btn_page_clicked_cb,
                               page_number)
                button.show()
                self._page_buttons.pack_start(button, True, False, 0)
            self._show_page(tutorial, 0)

        self._menu.hide()
        self._viewer.show()

    def _show_page(self, tutorial, page):
        """ Displays the indicated page in the viewing area """
        if len(self._page_window.get_children()) > 0:
            self._page_window.remove(self._page_window.get_children()[0])
        if len(self._page_window.get_children()) > 0:
            self._page_window.remove(
                self._page_window.get_children()[0])  #trying to overcome a bug
        self._page_window.add_with_viewport(self._tute.get_page(
            tutorial, page))