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)
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
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))
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
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)
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
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)))
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)
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)
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
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)
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)
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)
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
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))
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)
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)
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)
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))