class Image(hippo.CanvasWidget): def __init__(self, palette=None, tooltip=None, pixbuf=None, **kwargs): self.image = gtk.Image() self._invoker = CanvasInvoker() hippo.CanvasBox.__init__(self, widget=self.image, **kwargs) self._invoker._position_hint = self._invoker.AT_CURSOR self._invoker.attach(self) self.connect('destroy', self._destroy_cb) if palette: self.palette = palette if tooltip: self.tooltip = tooltip if pixbuf: self.pixbuf = pixbuf def _destroy_cb(self, widget): if self._invoker is not None: self._invoker.detach() def create_palette(self): return None def get_palette(self): return self._invoker.palette def set_palette(self, palette): self._invoker.palette = palette palette = gobject.property(type=object, setter=set_palette, getter=get_palette) palette = property(get_palette, set_palette) def get_tooltip(self): return self._invoker.palette and self._invoker.palette.primary_text def set_tooltip(self, text): self.set_palette(Palette(text)) tooltip = gobject.property(type=str, setter=set_tooltip, getter=get_tooltip) tooltip = property(get_tooltip, set_tooltip) def set_pixbuf(self, value): self.image.set_from_pixbuf(value) self.props.box_width = value.get_width() self.props.box_height = value.get_height() pixbuf = gobject.property(type=object, setter=set_pixbuf, getter=None) pixbuf = property(None, set_pixbuf)
def __init__(self, **kwargs): from sugar.graphics.palette import CanvasInvoker self._buffer = _IconBuffer() self._palette_invoker = CanvasInvoker() self._alpha = 1.0 hippo.CanvasBox.__init__(self, **kwargs) self._palette_invoker.attach(self) self.connect('destroy', self.__destroy_cb)
def __init__(self, palette=None, tooltip=None, pixbuf=None, **kwargs): self.image = gtk.Image() self._invoker = CanvasInvoker() hippo.CanvasBox.__init__(self, widget=self.image, **kwargs) self._invoker._position_hint = self._invoker.AT_CURSOR self._invoker.attach(self) self.connect('destroy', self._destroy_cb) if palette: self.palette = palette if tooltip: self.tooltip = tooltip if pixbuf: self.pixbuf = pixbuf
def __init__(self, **kwargs): from sugar.graphics.palette import CanvasInvoker self._buffer = _IconBuffer() self._palette_invoker = CanvasInvoker() hippo.CanvasBox.__init__(self, **kwargs) self._palette_invoker.attach(self) self.connect('destroy', self.__destroy_cb)
class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'CanvasIcon' def __init__(self, **kwargs): from sugar.graphics.palette import CanvasInvoker self._buffer = _IconBuffer() self._palette_invoker = CanvasInvoker() hippo.CanvasBox.__init__(self, **kwargs) self._palette_invoker.attach(self) self.connect('destroy', self.__destroy_cb) def _emit_paint_needed_icon_area(self): surface = self._buffer.get_surface() if surface: width, height = self.get_allocation() s_width = surface.get_width() s_height = surface.get_height() x = (width - s_width) / 2 y = (height - s_height) / 2 self.emit_paint_needed(x, y, s_width, s_height) def __destroy_cb(self, icon): if self._palette_invoker is not None: self._palette_invoker.detach() def set_file_name(self, value): """ Parameters ---------- value: Returns ------- None \"\"\" """ if self._buffer.file_name != value: self._buffer.file_name = value self.emit_paint_needed(0, 0, -1, -1) def get_file_name(self): """ Parameters ---------- None Returns ------- file name : """ return self._buffer.file_name file_name = gobject.property( type=object, getter=get_file_name, setter=set_file_name) def set_icon_name(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.icon_name != value: self._buffer.icon_name = value self.emit_paint_needed(0, 0, -1, -1) def get_icon_name(self): """ Parameters ---------- None Returns ------- icon name : """ return self._buffer.icon_name icon_name = gobject.property( type=object, getter=get_icon_name, setter=set_icon_name) def set_xo_color(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.xo_color != value: self._buffer.xo_color = value self._emit_paint_needed_icon_area() xo_color = gobject.property( type=object, getter=None, setter=set_xo_color) def set_fill_color(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.fill_color != value: self._buffer.fill_color = value self._emit_paint_needed_icon_area() def get_fill_color(self): """ Parameters ---------- None Returns ------- fill color : """ return self._buffer.fill_color fill_color = gobject.property( type=object, getter=get_fill_color, setter=set_fill_color) def set_stroke_color(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.stroke_color != value: self._buffer.stroke_color = value self._emit_paint_needed_icon_area() def get_stroke_color(self): """ Parameters ---------- None Returns ------- stroke color : """ return self._buffer.stroke_color stroke_color = gobject.property( type=object, getter=get_stroke_color, setter=set_stroke_color) def set_background_color(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.background_color != value: self._buffer.background_color = value self.emit_paint_needed(0, 0, -1, -1) def get_background_color(self): """ Parameters ---------- None Returns ------- fill color : """ return self._buffer.background_color background_color = gobject.property( type=object, getter=get_background_color, setter=set_background_color) def set_size(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.width != value: self._buffer.width = value self._buffer.height = value self.emit_request_changed() def get_size(self): """ Parameters ---------- None Returns ------- size : """ return self._buffer.width size = gobject.property( type=object, getter=get_size, setter=set_size) def set_scale(self, value): """ Parameters ---------- value: Returns ------- None """ logging.warning( 'CanvasIcon: the scale parameter is currently unsupported') if self._buffer.scale != value: self._buffer.scale = value self.emit_request_changed() def get_scale(self): """ Parameters ---------- None Returns ------- scale : """ return self._buffer.scale scale = gobject.property( type=float, getter=get_scale, setter=set_scale) def set_cache(self, value): """ Parameters ---------- cache Returns ------- None """ self._buffer.cache = value def get_cache(self): """ Parameters ---------- None Returns ------- cache : """ return self._buffer.cache cache = gobject.property( type=bool, default=False, getter=get_cache, setter=set_cache) def set_badge_name(self, value): """ Parameters ---------- value : Returns ------- None """ if self._buffer.badge_name != value: self._buffer.badge_name = value self.emit_paint_needed(0, 0, -1, -1) def get_badge_name(self): """ Parameters ---------- None Returns ------- badge name : """ return self._buffer.badge_name badge_name = gobject.property( type=object, getter=get_badge_name, setter=set_badge_name) def do_paint_below_children(self, cr, damaged_box): """ Parameters ---------- cr : damaged_box : Returns ------- None """ surface = self._buffer.get_surface() if surface: width, height = self.get_allocation() x = (width - surface.get_width()) / 2 y = (height - surface.get_height()) / 2 cr.set_source_surface(surface, x, y) cr.paint() def do_get_content_width_request(self): """ Parameters ---------- None Returns ------- width : """ surface = self._buffer.get_surface() if surface: size = surface.get_width() elif self._buffer.width: size = self._buffer.width else: size = 0 return size, size def do_get_content_height_request(self, for_width): surface = self._buffer.get_surface() if surface: size = surface.get_height() elif self._buffer.height: size = self._buffer.height else: size = 0 return size, size def do_button_press_event(self, event): if event.button == 1: self.emit_activated() return True else: return False def create_palette(self): return None def get_palette(self): return self._palette_invoker.palette def set_palette(self, palette): self._palette_invoker.palette = palette palette = gobject.property( type=object, setter=set_palette, getter=get_palette) def get_palette_invoker(self): return self._palette_invoker def set_palette_invoker(self, palette_invoker): self._palette_invoker.detach() self._palette_invoker = palette_invoker palette_invoker = gobject.property( type=object, setter=set_palette_invoker, getter=get_palette_invoker) def set_tooltip(self, text): from sugar.graphics.palette import Palette self.set_palette(Palette(text))
class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'CanvasIcon' def __init__(self, **kwargs): from sugar.graphics.palette import CanvasInvoker self._buffer = _IconBuffer() self._palette_invoker = CanvasInvoker() self._alpha = 1.0 hippo.CanvasBox.__init__(self, **kwargs) self._palette_invoker.attach(self) self.connect('destroy', self.__destroy_cb) def _emit_paint_needed_icon_area(self): surface = self._buffer.get_surface() if surface: width, height = self.get_allocation() s_width = surface.get_width() s_height = surface.get_height() x = (width - s_width) / 2 y = (height - s_height) / 2 self.emit_paint_needed(x, y, s_width, s_height) def __destroy_cb(self, icon): if self._palette_invoker is not None: self._palette_invoker.detach() def set_file_name(self, value): """ Parameters ---------- value: Returns ------- None \"\"\" """ if self._buffer.file_name != value: self._buffer.file_name = value self.emit_paint_needed(0, 0, -1, -1) def get_file_name(self): """ Parameters ---------- None Returns ------- file name : """ return self._buffer.file_name file_name = gobject.property( type=object, getter=get_file_name, setter=set_file_name) def set_icon_name(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.icon_name != value: self._buffer.icon_name = value self.emit_paint_needed(0, 0, -1, -1) def get_icon_name(self): """ Parameters ---------- None Returns ------- icon name : """ return self._buffer.icon_name icon_name = gobject.property( type=object, getter=get_icon_name, setter=set_icon_name) def set_xo_color(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.xo_color != value: self._buffer.xo_color = value self._emit_paint_needed_icon_area() xo_color = gobject.property( type=object, getter=None, setter=set_xo_color) def set_fill_color(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.fill_color != value: self._buffer.fill_color = value self._emit_paint_needed_icon_area() def get_fill_color(self): """ Parameters ---------- None Returns ------- fill color : """ return self._buffer.fill_color fill_color = gobject.property( type=object, getter=get_fill_color, setter=set_fill_color) def set_stroke_color(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.stroke_color != value: self._buffer.stroke_color = value self._emit_paint_needed_icon_area() def get_stroke_color(self): """ Parameters ---------- None Returns ------- stroke color : """ return self._buffer.stroke_color stroke_color = gobject.property( type=object, getter=get_stroke_color, setter=set_stroke_color) def set_background_color(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.background_color != value: self._buffer.background_color = value self.emit_paint_needed(0, 0, -1, -1) def get_background_color(self): """ Parameters ---------- None Returns ------- fill color : """ return self._buffer.background_color background_color = gobject.property( type=object, getter=get_background_color, setter=set_background_color) def set_size(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.width != value: self._buffer.width = value self._buffer.height = value self.emit_request_changed() def get_size(self): """ Parameters ---------- None Returns ------- size : """ return self._buffer.width size = gobject.property( type=object, getter=get_size, setter=set_size) def set_scale(self, value): """ Parameters ---------- value: Returns ------- None """ if self._buffer.scale != value: self._buffer.scale = value self.emit_request_changed() def get_scale(self): """ Parameters ---------- None Returns ------- scale : """ return self._buffer.scale scale = gobject.property( type=float, getter=get_scale, setter=set_scale) def set_alpha(self, alpha): if self._alpha != alpha: self._alpha = alpha self.emit_paint_needed(0, 0, -1, -1) alpha = gobject.property( type=float, setter=set_alpha) def set_cache(self, value): """ Parameters ---------- cache Returns ------- None """ self._buffer.cache = value def get_cache(self): """ Parameters ---------- None Returns ------- cache : """ return self._buffer.cache cache = gobject.property( type=bool, default=False, getter=get_cache, setter=set_cache) def set_badge_name(self, value): """ Parameters ---------- value : Returns ------- None """ if self._buffer.badge_name != value: self._buffer.badge_name = value self.emit_paint_needed(0, 0, -1, -1) def get_badge_name(self): """ Parameters ---------- None Returns ------- badge name : """ return self._buffer.badge_name badge_name = gobject.property( type=object, getter=get_badge_name, setter=set_badge_name) def do_paint_below_children(self, cr, damaged_box): """ Parameters ---------- cr : damaged_box : Returns ------- None """ surface = self._buffer.get_surface() if surface: width, height = self.get_allocation() x = (width - surface.get_width()) / 2 y = (height - surface.get_height()) / 2 cr.set_source_surface(surface, x, y) if self._alpha == 1.0: cr.paint() else: cr.paint_with_alpha(self._alpha) def do_get_content_width_request(self): """ Parameters ---------- None Returns ------- width : """ surface = self._buffer.get_surface() if surface: size = surface.get_width() elif self._buffer.width: size = self._buffer.width else: size = 0 return size, size def do_get_content_height_request(self, for_width): surface = self._buffer.get_surface() if surface: size = surface.get_height() elif self._buffer.height: size = self._buffer.height else: size = 0 return size, size def do_button_press_event(self, event): if event.button == 1: self.emit_activated() return True else: return False def create_palette(self): return None def get_palette(self): return self._palette_invoker.palette def set_palette(self, palette): self._palette_invoker.palette = palette palette = gobject.property( type=object, setter=set_palette, getter=get_palette) def get_palette_invoker(self): return self._palette_invoker def set_palette_invoker(self, palette_invoker): self._palette_invoker.detach() self._palette_invoker = palette_invoker palette_invoker = gobject.property( type=object, setter=set_palette_invoker, getter=get_palette_invoker) def set_tooltip(self, text): from sugar.graphics.palette import Palette self.set_palette(Palette(text))
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)