Esempio n. 1
0
    def __init__(self, jokebook, parent):
        Page.__init__(self)

        self.__parent = parent

        # list of jokes
        jokes_div = CanvasListBox()
        jokes_div.props.border = 0
        for joke in jokebook.jokes:
            button = gtk.Button(' ' + _('Delete') + ' ')
            button.connect('clicked', self.__do_clicked_delete, jokebook, joke)
            list_row = self.make_listrow(JokeEditor(joke), hippo.PACK_EXPAND)
            list_row.append(
                hippo.CanvasWidget(widget=theme.theme_widget(button),
                                   padding=5), hippo.PACK_END)
            jokes_div.append(list_row)
        self.append(jokes_div, hippo.PACK_EXPAND)

        # new joke button
        buttons = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL,
                                  xalign=hippo.ALIGNMENT_START)
        button = gtk.Button(_('Add New Joke'))
        button.connect('clicked', self.do_clicked_add_joke, jokebook)
        buttons.append(hippo.CanvasWidget(widget=theme.theme_widget(button)))
        jokes_div.append(buttons)
Esempio n. 2
0
    def __init__(self, model, column_name):
        hippo.CanvasBox.__init__(self)

        self.toolbar = gtk.Toolbar()
        self.toolbar.modify_bg(gtk.STATE_NORMAL,
                               style.COLOR_SELECTION_GREY.get_gdk_color())
        self.append(hippo.CanvasWidget(widget=self.toolbar))

        self.view = gtk.TreeView(model)
        self.view.show()
        self.view.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
        self.view.props.enable_search = False

        scrolled_window = gtk.ScrolledWindow()
        scrolled_window.set_shadow_type(gtk.SHADOW_OUT)
        scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scrolled_window.add(self.view)
        self.append(hippo.CanvasWidget(widget=scrolled_window),
                    hippo.PACK_EXPAND)

        cell = gtk.CellRendererText()
        cell.props.editable = True
        #cell.props.cell_background_gdk = style.COLOR_WHITE.get_gdk_color()
        cell.connect('edited', self._cell_edited_cb)
        self.value_column = self.view.insert_column_with_attributes(
            0, column_name, cell, text=0)
        self.value_column.props.expand = True
Esempio n. 3
0
    def __do_clicked_answer(self, button, jokebook, joke_id):
        # play a sound if the jokebook has one
        player = AudioPlayer()
        if jokebook.sound_blob != None:
            player.raw = jokebook.sound_blob
        else:  # default laugh
            logging.debug('Playing default sound: %s', Globals.laugh_uri)
            player.uri = Globals.laugh_uri
        player.play()

        # show the answer
        self.joke_box.answer_box.set_visible(True)

        # reconfigure navigation box
        self.navigation_box.clear()

        # check if there are any more jokes left
        if len(jokebook.jokes) > joke_id + 1:
            button = gtk.Button(_('Next'))
            button.connect('clicked', self.__do_clicked_next, jokebook,
                           joke_id + 1)
            self.navigation_box.append(
                hippo.CanvasWidget(widget=theme.theme_widget(button),
                                   padding_right=10,
                                   padding_top=20))

        # only allow submitting a joke if activity is shared and you are the one joining
        if not Globals.JokeMachineActivity.is_initiator:
            button = gtk.Button(_('Submit a Joke'))
            button.connect('clicked', self.__do_clicked_submit, jokebook,
                           joke_id)
            self.navigation_box.append(
                hippo.CanvasWidget(widget=theme.theme_widget(button),
                                   padding_top=20))
Esempio n. 4
0
    def __make_header(self):
        ret = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL)

        # logo
        logo = gtk.Image()
        logo.set_from_file(Globals.logo)
        ret.append(hippo.CanvasWidget(widget=logo))

        # lesson plans
        lesson_plans = hippo.CanvasWidget(
            background_color=theme.COLOR_BACKGROUND.get_int(),
            border_top=theme.BORDER_WIDTH,
            border_left=theme.BORDER_WIDTH,
            border_right=theme.BORDER_WIDTH,
            border_color=theme.COLOR_FRAME.get_int(),
            padding_top=12,
            padding_bottom=12,
            padding_left=30,
            padding_right=30,
            yalign=hippo.ALIGNMENT_CENTER,
            orientation=hippo.ORIENTATION_VERTICAL)
        button = gtk.Button(_('Lesson Plans'))
        button.set_size_request(200, -1)
        button.active = False
        button.connect('clicked', self.__do_clicked_lessonplans)
        lesson_plans.props.widget = theme.theme_widget(button)
        ret.append(lesson_plans, hippo.PACK_EXPAND)

        return ret
Esempio n. 5
0
    def __init__(self, jokebook, parent):
        Page.__init__(self)

        self.__parent = parent

        jokes_div = CanvasListBox()
        jokes_div.props.border = 0
        for joke in jokebook.submissions:
            list_row = self.make_listrow(JokeViewer(joke, jokebook.title))
            list_row.props.orientation = hippo.ORIENTATION_VERTICAL

            buttons = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL,
                                      xalign=hippo.ALIGNMENT_END,
                                      spacing=10,
                                      padding=10)

            button = gtk.Button(' ' + _('Reject') + ' ')
            button.connect('clicked', self.__do_clicked_reject, jokebook, joke)
            buttons.append(
                hippo.CanvasWidget(widget=theme.theme_widget(button),
                                   border_color=theme.COLOR_RED.get_int(),
                                   border=0,
                                   xalign=hippo.ALIGNMENT_CENTER))

            button = gtk.Button(' ' + _('Accept') + ' ')
            button.connect('clicked', self.__do_clicked_accept, jokebook, joke)
            buttons.append(
                hippo.CanvasWidget(widget=theme.theme_widget(button),
                                   border_color=theme.COLOR_RED.get_int(),
                                   border=0,
                                   xalign=hippo.ALIGNMENT_CENTER))

            list_row.append(buttons)

            #list_row.props.orientation=hippo.ORIENTATION_VERTICAL
            #status_box = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL,
            #padding_top=4,
            #padding_left=4)
            #status_box.append(hippo.CanvasText(text=_('Status:'),
            #color=theme.COLOR_DARK_GREEN.get_int(),
            #box_width=100,
            #xalign=hippo.ALIGNMENT_START))
            ##button = None
            #button = gtk.RadioButton()
            #button = gtk.RadioButton(button, _('Approved'))
            #button.set_size_request(200, -1)
            #status_box.append(hippo.CanvasWidget(widget = button))
            #button = gtk.RadioButton(button, _('Rejected'))
            #button.set_size_request(200, -1)
            #status_box.append(hippo.CanvasWidget(widget = button))
            #button = gtk.RadioButton(button, _('Not Reviewed'))
            #button.set_size_request(200, -1)
            #button.set_active(True)
            #status_box.append(hippo.CanvasWidget(widget = button))
            #list_row.append(status_box)

            jokes_div.append(list_row)

        self.append(jokes_div)
Esempio n. 6
0
    def __textview(self,
                   text,
                   width=300,
                   height=-1,
                   editable=True,
                   multiline=False):
        textview = gtk.TextView()
        textview.get_buffer().set_text(text)

        # control props
        textview.set_wrap_mode(gtk.WRAP_WORD)
        textview.modify_base(gtk.STATE_NORMAL,
                             theme.COLOR_TEXTBOX.get_gdk_color())
        textview.set_editable(editable)
        textview.set_cursor_visible(editable)
        if height == -1:
            context = textview.create_pango_context()
            layout = pango.Layout(context)
            layout.set_text(text[:text.find('\n')])
            (w, h) = layout.get_pixel_size()
            height = h  #+ theme.BORDER_WIDTH_CONTROL / 2 # fudge factor - on the XO-1 hardware all known solutions evaporate
        textview.set_size_request(width, height)
        textview.set_border_window_size(gtk.TEXT_WINDOW_LEFT, 0)
        textview.set_border_window_size(gtk.TEXT_WINDOW_RIGHT, 0)
        textview.set_border_window_size(gtk.TEXT_WINDOW_TOP, 0)
        textview.set_border_window_size(gtk.TEXT_WINDOW_BOTTOM, 0)
        textview.show()

        if editable:  # because rounded corners are well... pretty
            border_box = RoundBox()
            border_box.control = textview
            border_box.props.padding = 2
            border_box.props.spacing = 0
            border_box.props.border = theme.BORDER_WIDTH_CONTROL / 2
            border_box.props.border_color = theme.COLOR_DARK_GREEN.get_int()
            border_box.props.background_color = theme.COLOR_TEXTBOX.get_int()
            border_box.props.xalign = hippo.ALIGNMENT_START
            #border_box.props.box_width = width
            #border_box.props.box_height = height

            # TODO - File bug: RoundBox seriously messes with TextView's
            #                  (and other things) width !!
            deglitch_box = hippo.CanvasBox()
            deglitch_box.append(hippo.CanvasWidget(widget=textview))
            border_box.append(deglitch_box)
            return border_box

        no_edit_box = hippo.CanvasWidget(widget=textview)
        no_edit_box.control = textview
        return no_edit_box
Esempio n. 7
0
 def __init__(self, jokebook):
   Page.__init__(self, xalign=hippo.ALIGNMENT_CENTER)
   
   preview_box = CanvasListBox()
   
   # cover
   cover = self.make_listrow()
   cover.props.orientation=hippo.ORIENTATION_VERTICAL
   cover.append(hippo.CanvasText(text='"' + (jokebook.title or '')+ '" ' +
       _('started by') + ' ' + (jokebook.owner or ''),
                                xalign=hippo.ALIGNMENT_CENTER,
                                padding_top=10))
   cover.append(hippo.CanvasBox(box_height=theme.SPACER_VERTICAL))      
   cover_picture = self.make_imagebox(jokebook, 'image', 480, 360, False)    
   cover.append(cover_picture)
   cover.append(hippo.CanvasBox(box_height=theme.SPACER_VERTICAL))
   preview_box.append(cover)
   
   # jokes
   for joke in jokebook.jokes:
     list_row = self.make_listrow(JokeViewer(joke, jokebook.title))
     preview_box.append(list_row)
   self.append(preview_box, hippo.PACK_EXPAND)
   
   self.append(hippo.CanvasBox(box_height=theme.SPACER_VERTICAL))
   
   button = gtk.Button(_('Edit'))
   button.connect('clicked', self.__do_clicked_edit, jokebook)    
   self.append(hippo.CanvasWidget(widget=theme.theme_widget(button)))
Esempio n. 8
0
    def _show_message(self, message, show_clear_query=False):
        canvas = hippo.Canvas()
        self.remove(self.child)
        self.add(canvas)
        canvas.show()

        box = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL,
                              background_color=style.COLOR_WHITE.get_int(),
                              yalign=hippo.ALIGNMENT_CENTER,
                              spacing=style.DEFAULT_SPACING,
                              padding_bottom=style.GRID_CELL_SIZE)
        canvas.set_root(box)

        icon = CanvasIcon(size=style.LARGE_ICON_SIZE,
                          icon_name='activity-journal',
                          stroke_color=style.COLOR_BUTTON_GREY.get_svg(),
                          fill_color=style.COLOR_TRANSPARENT.get_svg())
        box.append(icon)

        text = hippo.CanvasText(text=message,
                                xalign=hippo.ALIGNMENT_CENTER,
                                font_desc=style.FONT_BOLD.get_pango_desc(),
                                color=style.COLOR_BUTTON_GREY.get_int())
        box.append(text)

        if show_clear_query:
            button = gtk.Button(label=_('Clear search'))
            button.connect('clicked', self.__clear_button_clicked_cb)
            button.props.image = Icon(icon_name='dialog-cancel',
                                      icon_size=gtk.ICON_SIZE_BUTTON)
            canvas_button = hippo.CanvasWidget(widget=button,
                                               xalign=hippo.ALIGNMENT_CENTER)
            box.append(canvas_button)
Esempio n. 9
0
    def _new_face(self, buddy, color):
        stroke_color, fill_color = buddy.props.color.split(',')
        stroke_color = style.Color(stroke_color)
        fill_color = style.Color(fill_color)

        buddy_face = face.View(fill_color)
        buddy_face.show_all()

        inner = CanvasRoundBox(
                background_color = fill_color.get_int(),
                )
        inner.props.border_color = fill_color.get_int()
        inner.append(hippo.CanvasWidget(widget=buddy_face), hippo.PACK_EXPAND)
        inner.props.border = BUDDY_PAD

        outer = CanvasRoundBox(
                background_color = stroke_color.get_int(),
                box_width = BUDDY_SIZE,
                box_height = BUDDY_SIZE,
                )
        outer.props.border_color = stroke_color.get_int()
        outer.append(inner, hippo.PACK_EXPAND)
        outer.props.border = BUDDY_PAD

        return (buddy_face, outer)
Esempio n. 10
0
 def __make_footer(self):
     ret = hippo.CanvasBox(padding_right=8,
                           padding_top=8,
                           padding_bottom=0,
                           spacing=8,
                           orientation=hippo.ORIENTATION_HORIZONTAL)
     button = gtk.Button(_('Read Jokebooks'))
     button.connect('clicked', self.__do_clicked_read)
     self.__button_read = hippo.CanvasWidget(
         widget=theme.theme_widget(button))
     ret.append(self.__button_read)
     button = gtk.Button(_('Make Jokebook'))
     button.connect('clicked', self.__do_clicked_make)
     self.__button_make = hippo.CanvasWidget(
         widget=theme.theme_widget(button))
     ret.append(self.__button_make)
     return ret
Esempio n. 11
0
    def _create_title(self):
        entry = gtk.Entry()
        entry.connect('focus-out-event', self._title_focus_out_event_cb)

        bg_color = style.COLOR_WHITE.get_gdk_color()
        entry.modify_bg(gtk.STATE_INSENSITIVE, bg_color)
        entry.modify_base(gtk.STATE_INSENSITIVE, bg_color)

        return hippo.CanvasWidget(widget=entry)
Esempio n. 12
0
    def __init__(self, jokebook, joke_id=0):
        Page.__init__(self)

        # handle empty jokebook
        if len(jokebook.jokes) <= joke_id:
            self.append(self.make_bodytext(_('This Jokebook is empty')))
            if not Globals.JokeMachineActivity.is_initiator:
                button = gtk.Button(_('Submit a Joke'))
                button.connect('clicked', self.__do_clicked_submit, jokebook,
                               joke_id)
                self.append(
                    hippo.CanvasWidget(widget=theme.theme_widget(button),
                                       padding_top=20))
            else:
                button = gtk.Button(_('Add Jokes'))
                button.connect('clicked', self.__do_clicked_add, jokebook,
                               joke_id)
                self.append(
                    hippo.CanvasWidget(widget=theme.theme_widget(button),
                                       padding_top=20))
            return

        # the joke box
        joke = jokebook.jokes[joke_id]
        self.joke_box = JokeViewer(joke, jokebook.title)
        self.joke_box.answer_box.set_visible(False)

        # the navigation box
        self.navigation_box = hippo.CanvasBox(
            padding_right=8,
            padding_top=8,
            spacing=18,
            orientation=hippo.ORIENTATION_HORIZONTAL)

        # the answer button
        button = gtk.Button(_('Answer'))
        button.connect('clicked', self.__do_clicked_answer, jokebook, joke_id)
        self.navigation_box.append(
            hippo.CanvasWidget(widget=theme.theme_widget(button),
                               padding_top=20))
        self.joke_box.right.append(self.navigation_box)
        self.append(self.joke_box)
Esempio n. 13
0
    def __init__(self,
                 jokebook,
                 last_joke=0):  # last_joke is for 'back' button
        Page.__init__(self, spacing=10)

        # create a new joke
        joke = Joke()
        joke.id = jokebook.next_joke_id
        logging.info('Created new joke with id: %d' % joke.id)
        joke.joker = Globals.nickname

        # info
        self.append(
            self.make_field(_('Submission For:'), 250, jokebook, 'title', 300,
                            False))
        self.append(
            self.make_field(_('Your Name:'), 250, joke, 'joker', 300, True))

        self.append(
            hippo.CanvasBox(box_height=theme.SPACER_VERTICAL))  # spacer

        # joke editor
        jokebox = JokeEditor(joke)
        nav = hippo.CanvasBox(padding_right=8,
                              padding_top=8,
                              spacing=18,
                              orientation=hippo.ORIENTATION_HORIZONTAL)
        button = gtk.Button(_('Submit'))
        button.connect('clicked', self.__do_clicked_submit, jokebook, joke)
        nav.append(
            hippo.CanvasWidget(widget=theme.theme_widget(button),
                               padding_right=10,
                               padding_top=20))
        button = gtk.Button(_('Back'))
        button.connect('clicked', self.__do_clicked_back, jokebook, last_joke)
        nav.append(
            hippo.CanvasWidget(widget=theme.theme_widget(button),
                               padding_top=20))
        jokebox.right.append(nav)
        self.append(jokebox)
Esempio n. 14
0
    def __make_jokebook_div(self, jokebook, edit=False):
        list_row = self.make_listrow()

        # thumbnail
        thumbnail = self.make_imagebox(jokebook, 'image', 80, 60, False, 10)
        list_row.append(self.__make_column_div(100, thumbnail))

        # title
        title = hippo.CanvasText(text=(jokebook.title or '') + "\n" +
                                 (jokebook.owner or ''),
                                 padding_left=20,
                                 xalign=hippo.ALIGNMENT_START,
                                 color=theme.COLOR_LINK.get_int())
        title.set_clickable(True)
        title.connect('button-press-event', self.__do_clicked_title, jokebook)
        list_row.append(self.__make_column_div(-1, title), hippo.PACK_EXPAND)

        list_row.append(
            hippo.CanvasBox(box_width=theme.SPACER_HORIZONTAL))  # TODO spacer

        # buttons
        if edit:
            button = gtk.Button(_('Edit'))
            button.connect('clicked', self.__do_clicked_edit, jokebook)
            list_row.append(
                self.__make_column_div(
                    100,
                    hippo.CanvasWidget(widget=theme.theme_widget(button))))
            list_row.append(hippo.CanvasBox(
                box_width=theme.SPACER_HORIZONTAL))  # TODO spacer
            button = gtk.Button(_('Delete'))
            button.connect('clicked', self.__do_clicked_delete, jokebook)
            list_row.append(
                self.__make_column_div(
                    100,
                    hippo.CanvasWidget(widget=theme.theme_widget(button))))
            list_row.append(hippo.CanvasBox(
                box_width=theme.SPACER_HORIZONTAL))  # TODO spacer

        return list_row
Esempio n. 15
0
    def __init__(self, jokebook):
        Page.__init__(self)

        self.__jokebook = jokebook

        self.__page_selector = PageSelector(self)
        self.append(self.__page_selector, hippo.PACK_EXPAND)
        self.__page_selector.page = EditInfo(jokebook, self)

        button = gtk.Button(_('Preview'))
        button.connect('clicked', self.__do_clicked_preview, jokebook)
        self.append(
            hippo.CanvasWidget(widget=theme.theme_widget(button),
                               padding_top=theme.SPACER_VERTICAL))
Esempio n. 16
0
 def __do_clicked_lessonplans(self, button):
     if button.active:
         button.set_label(_('Lesson Plans'))
         button.active = False
         Globals.JokeMachineActivity.set_page(pages.choose.Choose)
     else:
         button.set_label(_('Close Lessons'))
         button.active = True
         widget_box = hippo.CanvasBox(
             border=0, border_color=theme.COLOR_BLUE.get_int())
         widget_box.append(
             hippo.CanvasText(text=_('Lesson Plans:'),
                              xalign=hippo.ALIGNMENT_START,
                              padding=10))
         lesson_plans = LessonPlanWidget(Globals.pwd)
         widget_box.append(
             hippo.CanvasWidget(
                 widget=lesson_plans,
                 border=0,
                 border_color=theme.COLOR_DARK_GREEN.get_int()),
             hippo.PACK_EXPAND)
         self.page = widget_box
         self.__button_read.set_visible(False)
         self.__button_make.set_visible(False)
Esempio n. 17
0
 def add_alert(self, alert):
     if self._alert is not None:
         self.remove_alert()
     alert.set_size_request(gtk.gdk.screen_width(), -1)
     self._alert = hippo.CanvasWidget(widget=alert)
     self._box.append(self._alert, hippo.PACK_FIXED)
Esempio n. 18
0
    def __init__(self):
        hippo.Canvas.__init__(self)

        self.messenger = None
        self.me = None
        self.quiet = False

        self._buddies = {}

        # buddies box

        self._buddies_list = hippo.CanvasBox(
                background_color = BUDDIES_COLOR.get_int(),
                box_width = BUDDIES_WIDTH,
                padding = ENTRY_YPAD,
                spacing = ENTRY_YPAD
                )

        self._buddies_box = hippo.CanvasScrollbars()
        self._buddies_box.set_policy(hippo.ORIENTATION_HORIZONTAL,
                hippo.SCROLLBAR_NEVER)
        self._buddies_box.set_root(self._buddies_list)

        # chat entry

        self._chat = ChatBox()
        self.me, my_face_widget = self._new_face(self._chat.owner,
                ENTRY_COLOR)

        chat_post = gtk.TextView()
        chat_post.modify_bg(gtk.STATE_INSENSITIVE,
                style.COLOR_WHITE.get_gdk_color())
        chat_post.modify_base(gtk.STATE_INSENSITIVE,
                style.COLOR_WHITE.get_gdk_color())
        chat_post.connect('key-press-event', self._key_press_cb)
        chat_post.props.wrap_mode = gtk.WRAP_WORD_CHAR
        chat_post.set_size_request(-1, BUDDY_SIZE - ENTRY_YPAD * 2)
        chat_post_box = CanvasRoundBox(
                background_color = style.COLOR_WHITE.get_int(),
                padding_left = ENTRY_XPAD,
                padding_right = ENTRY_XPAD,
                padding_top = ENTRY_YPAD,
                padding_bottom = ENTRY_YPAD
                )
        chat_post_box.props.border_color = ENTRY_COLOR.get_int()
        chat_post_box.append(hippo.CanvasWidget(widget=chat_post),
                hippo.PACK_EXPAND)

        chat_entry = CanvasRoundBox(
                background_color = ENTRY_COLOR.get_int(),
                padding_left = ENTRY_XPAD,
                padding_right = ENTRY_XPAD,
                padding_top = ENTRY_YPAD,
                padding_bottom = ENTRY_YPAD,
                spacing = ENTRY_YPAD
                )
        chat_entry.props.orientation = hippo.ORIENTATION_HORIZONTAL
        chat_entry.props.border_color = style.COLOR_WHITE.get_int()
        chat_entry.append(my_face_widget)
        chat_entry.append(chat_post_box, hippo.PACK_EXPAND)

        chat_box = hippo.CanvasBox(
                orientation = hippo.ORIENTATION_VERTICAL,
                background_color = style.COLOR_WHITE.get_int(),
                )
        chat_box.append(self._chat, hippo.PACK_EXPAND)
        chat_box.append(chat_entry)

        # desk

        self._desk = hippo.CanvasBox()
        self._desk.props.orientation = hippo.ORIENTATION_HORIZONTAL
        self._desk.append(chat_box, hippo.PACK_EXPAND)

        self.set_root(self._desk)
Esempio n. 19
0
    def __init__(self, flask, verbose_messages):
        hippo.CanvasBox.__init__(self)
        self.props.spacing = style.DEFAULT_SPACING

        flask.connect('verbose', self.__verbose_cb)
        flask.connect('progress', self.__progress_cb)
        flask.connect('key_confirm', self.__key_confirm_cb)

        self._page = None
        self._key = None

        # verbose

        self._verbose = gtk.TextView()
        self._verbose.props.wrap_mode = gtk.WRAP_WORD
        self._verbose.props.editable = False
        self._verbose.props.buffer.props.text = verbose_messages

        scrolled = gtk.ScrolledWindow()
        scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        scrolled.add(self._verbose)
        scrolled.show_all()

        expander = gtk.Expander(_('Details'))
        expander.add(scrolled)
        self.append(hippo.CanvasWidget(widget=expander), hippo.PACK_EXPAND)

        # progress page

        self._progress_page = hippo.CanvasBox(
                spacing=style.DEFAULT_SPACING,
                orientation=hippo.ORIENTATION_VERTICAL)

        self._progress = gtk.ProgressBar()
        self._progress.set_size_request(-1, style.SMALL_ICON_SIZE)
        self._progress.modify_bg(gtk.STATE_INSENSITIVE,
                style.COLOR_WHITE.get_gdk_color())
        self._progress_page.append(hippo.CanvasWidget(widget=self._progress))

        cancel_button = gtk.Button(stock=gtk.STOCK_CANCEL)
        cancel_button.connect('clicked', self.__cancel_button_clicked_cb,
                flask)
        self._progress_page.append(hippo.CanvasWidget(
                widget=cancel_button,
                xalign=hippo.ALIGNMENT_CENTER))

        # confirm page

        self._confirm_page = hippo.CanvasBox(
                spacing=style.DEFAULT_SPACING,
                orientation=hippo.ORIENTATION_HORIZONTAL,
                xalign=hippo.ALIGNMENT_CENTER)

        self._confirm_caption = hippo.CanvasText()
        self._confirm_page.append(self._confirm_caption)

        self._accept_button = gtk.Button(stock=gtk.STOCK_YES)
        self._accept_button.connect('clicked',
                self.__accept_button_clicked_cb, flask)
        self._confirm_page.append(hippo.CanvasWidget(
                widget=self._accept_button))

        deny_button = gtk.Button(stock=gtk.STOCK_NO)
        deny_button.connect('clicked', self.__deny_button_clicked_cb, flask)
        self._confirm_page.append(hippo.CanvasWidget(widget=deny_button))

        # complete page

        self._complete_page = hippo.CanvasBox(
                spacing=style.DEFAULT_SPACING,
                orientation=hippo.ORIENTATION_VERTICAL)

        stop_button = gtk.Button(stock=gtk.STOCK_STOP)
        stop_button.connect('clicked', lambda button: self.emit('stop'))
        self._complete_page.append(hippo.CanvasWidget(
                widget=stop_button,
                xalign=hippo.ALIGNMENT_CENTER))

        # error page

        self._error_page = hippo.CanvasBox(
                spacing=style.DEFAULT_SPACING,
                orientation=hippo.ORIENTATION_VERTICAL)

        stop_button = gtk.Button(stock=gtk.STOCK_DIALOG_ERROR)
        stop_button.connect('clicked', lambda button: self.emit('stop'))
        self._error_page.append(hippo.CanvasWidget(
                widget=stop_button,
                xalign=hippo.ALIGNMENT_CENTER))