def __init__(self, joke, jokebook_title=''): Page.__init__( self, spacing=8, #background_color=theme.COLOR_PAGE.get_int(), padding=4, border_color=theme.COLOR_RED.get_int(), border=0, xalign=hippo.ALIGNMENT_START, orientation=hippo.ORIENTATION_HORIZONTAL) # left column self.left = hippo.CanvasBox(border=0, border_color=theme.COLOR_RED.get_int(), box_width=450, xalign=hippo.ALIGNMENT_START, orientation=hippo.ORIENTATION_VERTICAL) joke_image = self.make_imagebox(joke, 'image', 320, 240, False) self.left.append(joke_image) self.left.append( hippo.CanvasText(text=jokebook_title, xalign=hippo.ALIGNMENT_START, color=theme.COLOR_DARK_GREEN.get_int())) self.left.append( hippo.CanvasText(text=_('Joke') + ' ' + str(joke.id), xalign=hippo.ALIGNMENT_START)) self.left.append( hippo.CanvasText(text=_('By') + ' ' + str(joke.joker), xalign=hippo.ALIGNMENT_START)) # right column self.right = hippo.CanvasBox(border=0, border_color=theme.COLOR_RED.get_int(), box_width=350, xalign=hippo.ALIGNMENT_START, orientation=hippo.ORIENTATION_VERTICAL) self.right.append( hippo.CanvasText(text=_('Question'), xalign=hippo.ALIGNMENT_START, color=theme.COLOR_DARK_GREEN.get_int())) self.right.append(self.make_bodytext(joke.text)) self.right.append(hippo.CanvasBox(box_height=30)) # spacer self.answer_box = hippo.CanvasBox() self.answer_box.append( hippo.CanvasText(text=_('Answer'), xalign=hippo.ALIGNMENT_START, color=theme.COLOR_DARK_GREEN.get_int())) self.answer_box.append(self.make_bodytext(joke.answer)) self.right.append(self.answer_box) self.append(self.left) self.append(self.right)
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 _create_technical(self): vbox = hippo.CanvasBox() vbox.props.spacing = style.DEFAULT_SPACING lines = [ _('Kind: %s') % (self._metadata.get('mime_type') or _('Unknown'), ), _('Date: %s') % (self._format_date(), ), _('Size: %s') % (format_size( int( self._metadata.get( 'filesize', model.get_file_size( self._metadata['uid']))))), ] for line in lines: text = hippo.CanvasText( text=line, font_desc=style.FONT_NORMAL.get_pango_desc()) text.props.color = style.COLOR_BUTTON_GREY.get_int() if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: text.props.xalign = hippo.ALIGNMENT_END else: text.props.xalign = hippo.ALIGNMENT_START vbox.append(text) return vbox
def make_field(self, label, label_width, obj, property, field_width, editable=True): value = self.__get_property_value(obj, property) field_box = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL, xalign=hippo.ALIGNMENT_START, spacing=10) field_box.append( hippo.CanvasText(text=label, box_width=label_width, xalign=hippo.ALIGNMENT_START, color=theme.COLOR_DARK_GREEN.get_int())) #if editable: textfield = self.__textview(value, field_width, -1, editable, False) textfield.control.get_buffer().connect('changed', self.__do_changed_control, obj, property) field_box.append(textfield) #else: # TODO - move to __textview() #glitch_box = CanvasBox(box_width=field_width) #glitch_box.append(hippo.CanvasText(text=value, #size_mode=hippo.CANVAS_SIZE_WRAP_WORD, #box_width=field_width, #xalign=hippo.ALIGNMENT_START)) #field_box.append(glitch_box) return field_box
def __init__(self, parent, **kwargs): hippo.CanvasBox.__init__(self, **kwargs) self.__parent = parent self.props.border = 1 self.props.border_color = theme.COLOR_TAB_ACTIVE.get_int() self.props.background_color = theme.COLOR_PAGE.get_int() self.props.orientation = hippo.ORIENTATION_VERTICAL tab_box = hippo.CanvasBox( background_color=theme.COLOR_TAB_SEPERATOR.get_int(), spacing=2, orientation=hippo.ORIENTATION_HORIZONTAL) self.__tab_1 = hippo.CanvasText( text=_('Edit Jokebook Cover'), padding=theme.PADDING_TAB, xalign=hippo.ALIGNMENT_START, background_color=theme.COLOR_TAB_ACTIVE.get_int(), color=theme.COLOR_TAB_TEXT.get_int()) self.__tab_1.page = EditInfo self.__tab_1.connect('button-press-event', self.__do_clicked_tab) tab_box.append(self.__tab_1, hippo.PACK_EXPAND) self.__tab_2 = hippo.CanvasText( text=_('Edit My Jokes'), padding=theme.PADDING_TAB, xalign=hippo.ALIGNMENT_START, background_color=theme.COLOR_TAB_INACTIVE.get_int(), color=theme.COLOR_TAB_TEXT.get_int()) self.__tab_2.page = EditJokes self.__tab_2.connect('button-press-event', self.__do_clicked_tab) tab_box.append(self.__tab_2, hippo.PACK_EXPAND) self.__tab_3 = hippo.CanvasText( text=_('Review Submitted Jokes'), padding=theme.PADDING_TAB, xalign=hippo.ALIGNMENT_START, background_color=theme.COLOR_TAB_INACTIVE.get_int(), color=theme.COLOR_TAB_TEXT.get_int()) self.__tab_3.page = EditReview self.__tab_3.connect('button-press-event', self.__do_clicked_tab) tab_box.append(self.__tab_3, hippo.PACK_EXPAND) self.append(tab_box) self.__page = hippo.CanvasBox( background_color=theme.COLOR_PAGE.get_int(), orientation=hippo.ORIENTATION_VERTICAL) self.append(self.__page, hippo.PACK_EXPAND)
def make_bodytext(self, text, width=-1, xalign=hippo.ALIGNMENT_START, text_color=theme.COLOR_BLACK): return hippo.CanvasText(text=text, size_mode=hippo.CANVAS_SIZE_WRAP_WORD, box_width=width, xalign=xalign, color=text_color.get_int())
def __init__(self, joke): Page.__init__(self, spacing=8, padding=4, border_color=theme.COLOR_RED.get_int(), border=0, orientation=hippo.ORIENTATION_HORIZONTAL) # left column self.left = hippo.CanvasBox(border=0, border_color=theme.COLOR_RED.get_int(), xalign=hippo.ALIGNMENT_START, orientation=hippo.ORIENTATION_VERTICAL, padding=theme.BORDER_WIDTH_CONTROL / 2) joke_image = self.make_imagebox(joke, 'image', 320, 240, True) self.left.append(joke_image) # right column self.right = hippo.CanvasBox( border=0, border_color=theme.COLOR_RED.get_int(), padding=theme.SPACER_HORIZONTAL, orientation=hippo.ORIENTATION_VERTICAL, padding_bottom=theme.BORDER_WIDTH_CONTROL / 2, spacing=theme.BORDER_WIDTH_CONTROL / 2) self.right.append( hippo.CanvasText(text=_('Question'), xalign=hippo.ALIGNMENT_START, color=theme.COLOR_DARK_GREEN.get_int())) self.right.append(self.make_textbox(joke, 'text')) self.right.append(hippo.CanvasBox(box_height=theme.SPACER_VERTICAL)) self.right.append( hippo.CanvasText(text=_('Answer'), xalign=hippo.ALIGNMENT_START, color=theme.COLOR_DARK_GREEN.get_int())) self.right.append(self.make_textbox(joke, 'answer')) self.append(self.left) self.append(self.right, hippo.PACK_EXPAND)
def __init__(self, cal, event, **kwargs): """ Constructor. """ self.cal = cal self.event = event self.rulers = [] CanvasRectangle.__init__(self, **kwargs) # Create canvas items. self.text = hippo.CanvasText(xalign=hippo.ALIGNMENT_CENTER, yalign=hippo.ALIGNMENT_CENTER, size_mode=hippo.CANVAS_SIZE_ELLIPSIZE_END) self.append(self.text, hippo.PACK_EXPAND)
def _add_buddy(self, buddy): box = hippo.CanvasBox( orientation = hippo.ORIENTATION_HORIZONTAL, background_color = BUDDIES_COLOR.get_int(), spacing = ENTRY_YPAD ) buddy_face, buddy_widget = self._new_face(buddy, BUDDIES_COLOR) char_box = hippo.CanvasBox( orientation = hippo.ORIENTATION_VERTICAL, ) nick = hippo.CanvasText( text = buddy.props.nick, xalign = hippo.ALIGNMENT_START, yalign = hippo.ALIGNMENT_START ) lang = hippo.CanvasText( text = '', xalign = hippo.ALIGNMENT_START, yalign = hippo.ALIGNMENT_START ) char_box.append(nick) char_box.append(lang) box.append(buddy_widget) box.append(char_box, hippo.PACK_EXPAND) self._buddies[buddy] = { 'box': box, 'face': buddy_face, 'lang': lang } self._buddies_list.append(box) if len(self._buddies) == 1: self._desk.append(self._buddies_box)
def labelize(text, widget): box = hippo.CanvasBox() box.props.spacing = style.DEFAULT_SPACING text = hippo.CanvasText(text=text) text.props.color = style.COLOR_SELECTION_GREY.get_int() if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: text.props.xalign = hippo.ALIGNMENT_END else: text.props.xalign = hippo.ALIGNMENT_START box.append(text) box.append(widget, hippo.PACK_EXPAND) return box
def __init__(self): Page.__init__(self) # page title self.append( hippo.CanvasText(text=_('Choose a Jokebook to read:'), xalign=hippo.ALIGNMENT_START, padding=10)) # list of Jokebooks allow_edit = Globals.JokeMachineActivity.is_initiator jokebooks_div = CanvasListBox() for jokebook in Globals.JokeMachineState.jokebooks: jokebooks_div.append(self.__make_jokebook_div( jokebook, allow_edit)) self.append(jokebooks_div, hippo.PACK_EXPAND)
def update(self): date = self.range[0] days = (self.range[1] - self.range[0]).days + 1 rows = int(math.ceil(float(days) / 7.0)) cols = days today = datetime.date(*time.localtime(time.time())[:3]) if days > 7: cols = int(math.ceil(float(days) / float(rows))) # Update the timeline. self.timeline.set_visible(rows == 1) # Show captions for the day. if cols == 7 or rows == 1: for child in self.day_captions.get_children(): self.day_captions.remove(child) for col in range(cols): this_date = self.range[0] + datetime.timedelta(col) day_name = self.cal.model.get_day_name(this_date) text = hippo.CanvasText( text=day_name, xalign=hippo.ALIGNMENT_CENTER, size_mode=hippo.CANVAS_SIZE_ELLIPSIZE_END) self.day_captions.add(text, col, col + 1, 0, 1) self.day_captions.set_column_expand(col, True) self.day_captions.set_visible(True) else: self.day_captions.set_visible(False) # Update the grid. self.grid.set_size(rows, cols) for row in range(rows): self.grid.set_row_expand(row, True) for child in self.grid.get_children(): child.set_active(self.is_active(date)) child.set_show_title(rows != 1) child.set_show_rulers(rows == 1) child.set_selected(date == self.selected) child.set_highlighted(date == today) child.set_date(date) child.update() date = util.next_day(date) if rows == 1: self.update_one_row() else: self.update_multi_row()
def _create_preview(self): width = style.zoom(320) height = style.zoom(240) box = hippo.CanvasBox() if len(self._metadata.get('preview', '')) > 4: if self._metadata['preview'][1:4] == 'PNG': preview_data = self._metadata['preview'] else: # TODO: We are close to be able to drop this. import base64 preview_data = base64.b64decode(self._metadata['preview']) png_file = StringIO.StringIO(preview_data) try: surface = cairo.ImageSurface.create_from_png(png_file) has_preview = True except Exception: logging.exception('Error while loading the preview') has_preview = False else: has_preview = False if has_preview: preview_box = hippo.CanvasImage( image=surface, border=style.LINE_WIDTH, border_color=style.COLOR_BUTTON_GREY.get_int(), xalign=hippo.ALIGNMENT_CENTER, yalign=hippo.ALIGNMENT_CENTER, scale_width=width, scale_height=height) else: preview_box = hippo.CanvasText( text=_('No preview'), font_desc=style.FONT_NORMAL.get_pango_desc(), xalign=hippo.ALIGNMENT_CENTER, yalign=hippo.ALIGNMENT_CENTER, border=style.LINE_WIDTH, border_color=style.COLOR_BUTTON_GREY.get_int(), color=style.COLOR_BUTTON_GREY.get_int(), box_width=width, box_height=height) preview_box.connect_after('button-release-event', self._preview_box_button_release_event_cb) box.append(preview_box) return box
def make_audiobox(self, obj, property, width): image_file = os.path.join(Globals.pwd, theme.AUDIO_CHOOSE) if not os.path.exists(image_file): logging.debug('cannot find %s' % image_file) return hippo.CanvasBox() surface = cairo.ImageSurface.create_from_png(image_file) preview_sound = hippo.CanvasImage(image=surface, xalign=hippo.ALIGNMENT_START, yalign=hippo.ALIGNMENT_CENTER) preview_sound.connect('button-press-event', self.__do_clicked_preview_sound, obj, property) if hasattr(obj, property) and getattr(obj, property) != None: sound_name = getattr(obj, property) else: sound_name = _('Click to choose a sound') choose_sound = hippo.CanvasText(text=sound_name, xalign=hippo.ALIGNMENT_START) choose_sound.connect('button-press-event', self.__do_clicked_choose_sound, obj, property) sound_box = RoundBox() sound_box.props.padding = 2 sound_box.props.spacing = 10 sound_box.props.box_width = width sound_box.props.border = theme.BORDER_WIDTH_CONTROL / 2 sound_box.props.border_color = theme.COLOR_DARK_GREEN.get_int() sound_box.props.background_color = theme.COLOR_WHITE.get_int() sound_box.props.orientation = hippo.ORIENTATION_HORIZONTAL sound_box.props.xalign = hippo.ALIGNMENT_START sound_box.set_clickable(True) sound_box.append(preview_sound) sound_box.append(choose_sound) deglitch_box = hippo.CanvasBox(xalign=hippo.ALIGNMENT_START, box_width=width) deglitch_box.append(sound_box) return deglitch_box
def __init__(self, cal, **kwargs): """ Constructor. """ hippo.CanvasBox.__init__(self, **kwargs) self.cal = cal self.text = {} # Create canvas items. for n in range(0, 24): if n == -1: caption = ' ' else: caption = '%d' % n box = hippo.CanvasGradient(padding_right=5) text = hippo.CanvasText(text=caption, xalign=hippo.ALIGNMENT_END, yalign=hippo.ALIGNMENT_START) box.append(text, hippo.PACK_EXPAND) self.append(box, hippo.PACK_EXPAND)
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 _create_buddy_list(self): vbox = hippo.CanvasBox() vbox.props.spacing = style.DEFAULT_SPACING text = hippo.CanvasText(text=_('Participants:'), font_desc=style.FONT_NORMAL.get_pango_desc()) text.props.color = style.COLOR_BUTTON_GREY.get_int() if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: text.props.xalign = hippo.ALIGNMENT_END else: text.props.xalign = hippo.ALIGNMENT_START vbox.append(text) if self._metadata.get('buddies'): buddies = simplejson.loads(self._metadata['buddies']).values() vbox.append(BuddyList(buddies)) return vbox else: return vbox
def set_column_count(self, count): if count == self.columns: return self.columns = count self.table.set_column_count(count) # Hide all overflow indicators. for child in self.get_children(): if child != self.table: self.remove(child) for col in range(count): font = self.cal.font.copy() font.set_style(pango.STYLE_ITALIC) text = hippo.CanvasText(text=' ', font=font.to_string(), xalign=hippo.ALIGNMENT_CENTER) self.append(text, hippo.PACK_FIXED) self.overflow_indic.append(text) text.set_visible(False) self.allocs[text] = (0, 0, 0, 0)
def _create_tags(self): vbox = hippo.CanvasBox() vbox.props.spacing = style.DEFAULT_SPACING text = hippo.CanvasText(text=_('Tags:'), font_desc=style.FONT_NORMAL.get_pango_desc()) text.props.color = style.COLOR_BUTTON_GREY.get_int() if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: text.props.xalign = hippo.ALIGNMENT_END else: text.props.xalign = hippo.ALIGNMENT_START vbox.append(text) tags = self._activity.metadata.get('tags', '') text_view = CanvasTextView(tags, box_height=style.GRID_CELL_SIZE * 2) vbox.append(text_view, hippo.PACK_EXPAND) text_view.text_view_widget.props.accepts_tab = False return vbox, text_view
def idle_cb(): global countdown for i in range(0, 100): entry = hippo.CanvasBox(border=2, border_color=0x000000ff, orientation=hippo.ORIENTATION_HORIZONTAL, padding=10, spacing=10) for j in range(0, 3): icon = CanvasIcon(icon_name='go-left') entry.append(icon) for j in range(0, 2): text = hippo.CanvasText(text='Text %s %s' % (countdown, j)) entry.append(text) box.append(entry) countdown -= 1 return countdown > 0
def _create_description(self): vbox = hippo.CanvasBox() vbox.props.spacing = style.DEFAULT_SPACING text = hippo.CanvasText(text=_('Description:'), font_desc=style.FONT_NORMAL.get_pango_desc()) text.props.color = style.COLOR_BUTTON_GREY.get_int() if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: text.props.xalign = hippo.ALIGNMENT_END else: text.props.xalign = hippo.ALIGNMENT_START vbox.append(text) text_view = CanvasTextView('', box_height=style.GRID_CELL_SIZE * 2) vbox.append(text_view, hippo.PACK_EXPAND) text_view.text_view_widget.props.accepts_tab = False text_view.text_view_widget.connect( 'focus-out-event', self._description_focus_out_event_cb) return vbox, text_view
def __init__(self, cal, **kwargs): """ Constructor. """ hippo.CanvasBox.__init__(self, **kwargs) self.cal = cal self.date = kwargs.get('date') self.active = True self.selected = False self.highlighted = False self.show_rulers = False # Create canvas items. self.box = hippo.CanvasGradient(padding=2, padding_right=5) self.text = hippo.CanvasText(xalign=hippo.ALIGNMENT_END, size_mode=hippo.CANVAS_SIZE_ELLIPSIZE_END) self.body = hippo.CanvasGradient() self.box.append(self.text, hippo.PACK_EXPAND) self.append(self.box) self.append(self.body, hippo.PACK_EXPAND) self.box.set_visible(True)
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 __init__(self): hippo.CanvasBox.__init__( self, orientation=hippo.ORIENTATION_HORIZONTAL, border=style.LINE_WIDTH, background_color=style.COLOR_PANEL_GREY.get_int(), border_color=style.COLOR_SELECTION_GREY.get_int(), padding=style.DEFAULT_PADDING, padding_left=style.DEFAULT_SPACING, spacing=style.DEFAULT_SPACING) icon = CanvasIcon(icon_name='go-previous', size=style.SMALL_ICON_SIZE, fill_color=style.COLOR_TOOLBAR_GREY.get_svg()) self.append(icon) label = hippo.CanvasText(text=_('Back'), font_desc=style.FONT_NORMAL.get_pango_desc()) self.append(label) if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: self.reverse() self.connect('motion-notify-event', self.__motion_notify_event_cb)
def __init__(self): hippo.Canvas.__init__(self) global this this = self self.metadata = None workspace = hippo.CanvasBox( background_color=style.COLOR_WHITE.get_int(), padding=style.DEFAULT_SPACING, spacing=style.DEFAULT_SPACING) self.set_root(workspace) # title upper_box = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL, spacing=style.DEFAULT_SPACING) workspace.append(upper_box) self.icon = port.widgets.Image() self.icon.connect('button-release-event', self._activate_cb) upper_box.append(self.icon) self.title = port.widgets.Entry() upper_box.append(self.title, hippo.PACK_EXPAND) self.mtime = hippo.CanvasText() upper_box.append(self.mtime) bottom_box = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL, spacing=style.DEFAULT_SPACING) workspace.append(bottom_box, hippo.PACK_EXPAND) # preview self.preview = port.widgets.Image() self.preview.connect('button-release-event', self._activate_cb) preview_box = hippo.CanvasBox() preview_box.append(self.preview) bottom_box.append(preview_box) # description right_box = hippo.CanvasBox(spacing=style.DEFAULT_SPACING) bottom_box.append(right_box, hippo.PACK_EXPAND) self.description = port.widgets.TextView( box_height=gtk.gdk.screen_height() / 4) right_box.append( port.widgets.labelize(_('Description:'), self.description)) # tags tags_box = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL, spacing=style.DEFAULT_SPACING) right_box.append(tags_box, hippo.PACK_EXPAND) self.traits = TraitsView() self.traits_box = port.widgets.labelize(_('Traits:'), self.traits) tags_box.append(self.traits_box, hippo.PACK_EXPAND) self.tags = TagsView() tags_box.append(port.widgets.labelize(_('Tags:'), self.tags), hippo.PACK_EXPAND) # buddies self.buddies = hippo.CanvasBox( xalign=hippo.ALIGNMENT_START, orientation=hippo.ORIENTATION_HORIZONTAL) right_box.append( port.widgets.labelize(_('Participants:'), self.buddies))
def _create_date(self): date = hippo.CanvasText(xalign=hippo.ALIGNMENT_START, font_desc=style.FONT_NORMAL.get_pango_desc()) return date
def add_text(self, buddy, text, status_message=False): """Display text on screen, with name and colors. buddy -- buddy object or dict {nick: string, color: string} (The dict is for loading the chat log from the journal, when we don't have the buddy object any more.) text -- string, what the buddy said status_message -- boolean False: show what buddy said True: show what buddy did hippo layout: .------------- rb ---------------. | +name_vbox+ +----msg_vbox----+ | | | | | | | | | nick: | | +--msg_hbox--+ | | | | | | | text | | | | +---------+ | +------------+ | | | | | | | | +--msg_hbox--+ | | | | | text | url | | | | | +------------+ | | | +----------------+ | `--------------------------------' """ if not buddy: buddy = self.owner if type(buddy) is dict: # dict required for loading chat log from journal nick = buddy['nick'] color = buddy['color'] else: nick = buddy.props.nick color = buddy.props.color try: color_stroke_html, color_fill_html = color.split(',') except ValueError: color_stroke_html, color_fill_html = ('#000000', '#888888') # Select text color based on fill color: color_fill_rgba = Color(color_fill_html).get_rgba() color_fill_gray = (color_fill_rgba[0] + color_fill_rgba[1] + color_fill_rgba[2]) / 3 color_stroke = Color(color_stroke_html).get_int() color_fill = Color(color_fill_html).get_int() if color_fill_gray < 0.5: text_color = COLOR_WHITE.get_int() else: text_color = COLOR_BLACK.get_int() self._add_log(nick, color, text, status_message) # Check for Right-To-Left languages: if pango.find_base_dir(nick, -1) == pango.DIRECTION_RTL: lang_rtl = True else: lang_rtl = False # Check if new message box or add text to previous: new_msg = True if self._last_msg_sender: if not status_message: if buddy == self._last_msg_sender: # Add text to previous message new_msg = False if not new_msg: rb = self._last_msg msg_vbox = rb.get_children()[1] msg_hbox = hippo.CanvasBox( orientation=hippo.ORIENTATION_HORIZONTAL) msg_vbox.append(msg_hbox) else: rb = CanvasRoundBox(background_color=color_fill, border_color=color_stroke, padding=4) rb.props.border_color = color_stroke # Bug #3742 self._last_msg = rb self._last_msg_sender = buddy if not status_message: name = hippo.CanvasText(text=nick + ': ', color=text_color) name_vbox = hippo.CanvasBox( orientation=hippo.ORIENTATION_VERTICAL) name_vbox.append(name) rb.append(name_vbox) msg_vbox = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL) rb.append(msg_vbox) msg_hbox = hippo.CanvasBox( orientation=hippo.ORIENTATION_HORIZONTAL) msg_vbox.append(msg_hbox) if status_message: self._last_msg_sender = None match = URL_REGEXP.search(text) while match: # there is a URL in the text starttext = text[:match.start()] if starttext: message = hippo.CanvasText( text=starttext, size_mode=hippo.CANVAS_SIZE_WRAP_WORD, color=text_color, xalign=hippo.ALIGNMENT_START) msg_hbox.append(message) url = text[match.start():match.end()] message = CanvasLink(text=url, color=text_color) attrs = pango.AttrList() attrs.insert(pango.AttrUnderline(pango.UNDERLINE_SINGLE, 0, 32767)) message.set_property("attributes", attrs) message.connect('activated', self._link_activated_cb) # call interior magic which should mean just: # CanvasInvoker().parent = message CanvasInvoker(message) msg_hbox.append(message) text = text[match.end():] match = URL_REGEXP.search(text) if text: message = hippo.CanvasText(text=text, size_mode=hippo.CANVAS_SIZE_WRAP_WORD, color=text_color, xalign=hippo.ALIGNMENT_START) msg_hbox.append(message) # Order of boxes for RTL languages: if lang_rtl: msg_hbox.reverse() if new_msg: rb.reverse() if new_msg: box = hippo.CanvasBox(padding=2) box.append(rb) self._conversation.append(box)
def add_text(self, buddy, text, status_message=False): """Display text on screen, with name and colors. buddy -- buddy object text -- string, what the buddy said status_message -- boolean False: show what buddy said True: show what buddy did hippo layout: .------------- rb ---------------. | +name_vbox+ +----msg_vbox----+ | | | | | | | | | nick: | | +--msg_hbox--+ | | | | | | | text | | | | +---------+ | +------------+ | | | | | | | | +--msg_hbox--+ | | | | | text | | | | | +------------+ | | | +----------------+ | `--------------------------------' """ if buddy: nick = buddy.props.nick color = buddy.props.color try: color_stroke_html, color_fill_html = color.split(',') except ValueError: color_stroke_html, color_fill_html = ('#000000', '#888888') # Select text color based on fill color: color_fill_rgba = Color(color_fill_html).get_rgba() color_fill_gray = (color_fill_rgba[0] + color_fill_rgba[1] + color_fill_rgba[2]) / 3 color_stroke = Color(color_stroke_html).get_int() color_fill = Color(color_fill_html).get_int() if color_fill_gray < 0.5: text_color = COLOR_WHITE.get_int() else: text_color = COLOR_BLACK.get_int() else: nick = '???' # XXX: should be '' but leave for debugging color_stroke = COLOR_BLACK.get_int() color_fill = COLOR_WHITE.get_int() text_color = COLOR_BLACK.get_int() color = '#000000,#FFFFFF' # Check for Right-To-Left languages: if pango.find_base_dir(nick, -1) == pango.DIRECTION_RTL: lang_rtl = True else: lang_rtl = False # Check if new message box or add text to previous: new_msg = True if self._last_msg_sender: if not status_message: if buddy == self._last_msg_sender: # Add text to previous message new_msg = False if not new_msg: rb = self._last_msg msg_vbox = rb.get_children()[1] msg_hbox = hippo.CanvasBox( orientation=hippo.ORIENTATION_HORIZONTAL) msg_vbox.append(msg_hbox) else: rb = CanvasRoundBox(background_color=color_fill, border_color=color_stroke, padding=4) rb.props.border_color = color_stroke # Bug #3742 self._last_msg = rb self._last_msg_sender = buddy if not status_message: name = hippo.CanvasText(text=nick + ': ', color=text_color, font_desc=FONT_BOLD.get_pango_desc()) name_vbox = hippo.CanvasBox( orientation=hippo.ORIENTATION_VERTICAL) name_vbox.append(name) rb.append(name_vbox) msg_vbox = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL) rb.append(msg_vbox) msg_hbox = hippo.CanvasBox( orientation=hippo.ORIENTATION_HORIZONTAL) msg_vbox.append(msg_hbox) if status_message: self._last_msg_sender = None if text: message = hippo.CanvasText(text=text, size_mode=hippo.CANVAS_SIZE_WRAP_WORD, color=text_color, font_desc=FONT_NORMAL.get_pango_desc(), xalign=hippo.ALIGNMENT_START) msg_hbox.append(message) # Order of boxes for RTL languages: if lang_rtl: msg_hbox.reverse() if new_msg: rb.reverse() if new_msg: box = hippo.CanvasBox(padding=2) box.append(rb) self.conversation.append(box)
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))