Remove hippo from naming alert

Reimplement the favorite icon as a ToggleButton, and use standard
boxes, entrys and textviews for the other aspects.
master
Daniel Drake 13 years ago
parent d39a813969
commit 720b33ab30

@ -21,17 +21,13 @@ import os
import gio import gio
import gtk import gtk
import gobject import gobject
import hippo
import gconf import gconf
from sugar.graphics import style from sugar.graphics import style
from sugar.graphics.icon import Icon from sugar.graphics.icon import Icon
from sugar.graphics.xocolor import XoColor from sugar.graphics.xocolor import XoColor
from sugar.graphics.icon import CanvasIcon
from sugar.graphics.icon import get_icon_file_name from sugar.graphics.icon import get_icon_file_name
from sugar.graphics.entry import CanvasEntry
from sugar.graphics.toolbutton import ToolButton from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.canvastextview import CanvasTextView
from sugar.bundle.activitybundle import ActivityBundle from sugar.bundle.activitybundle import ActivityBundle
@ -114,45 +110,37 @@ class NamingToolbar(gtk.Toolbar):
self.emit('keep-clicked') self.emit('keep-clicked')
class FavoriteIcon(CanvasIcon): class FavoriteIcon(gtk.ToggleButton):
def __init__(self, favorite): def __init__(self):
CanvasIcon.__init__(self, icon_name='emblem-favorite', gtk.ToggleButton.__init__(self)
box_width=style.GRID_CELL_SIZE * 3 / 5, self.set_relief(gtk.RELIEF_NONE)
size=style.SMALL_ICON_SIZE) self.set_focus_on_click(False)
self._favorite = None
self.set_favorite(favorite) self._icon = Icon(icon_name='emblem-favorite',
self.connect('button-release-event', self.__release_event_cb) pixel_size=style.SMALL_ICON_SIZE)
self.connect('motion-notify-event', self.__motion_notify_event_cb) self.set_image(self._icon)
def set_favorite(self, favorite): self.connect('toggled', self.__toggled_cb)
if favorite == self._favorite: self.connect('leave-notify-event', self.__leave_notify_event_cb)
return self.connect('enter-notify-event', self.__enter_notify_event_cb)
self._favorite = favorite def __toggled_cb(self, widget):
if favorite: if self.get_active():
client = gconf.client_get_default() client = gconf.client_get_default()
color = XoColor(client.get_string('/desktop/sugar/user/color')) color = XoColor(client.get_string('/desktop/sugar/user/color'))
self.props.xo_color = color self._icon.props.xo_color = color
else: else:
self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg() self._icon.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg()
self.props.fill_color = style.COLOR_WHITE.get_svg() self._icon.props.fill_color = style.COLOR_WHITE.get_svg()
def get_favorite(self):
return self._favorite
favorite = gobject.property(
type=bool, default=False, getter=get_favorite, setter=set_favorite)
def __release_event_cb(self, icon, event): def __enter_notify_event_cb(self, icon, event):
self.props.favorite = not self.props.favorite if not self.get_active():
self._icon.props.fill_color = style.COLOR_BUTTON_GREY.get_svg()
def __motion_notify_event_cb(self, icon, event): def __leave_notify_event_cb(self, icon, event):
if not self._favorite: if not self.get_active():
if event.detail == hippo.MOTION_DETAIL_ENTER: self._icon.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
icon.props.fill_color = style.COLOR_BUTTON_GREY.get_svg()
elif event.detail == hippo.MOTION_DETAIL_LEAVE:
icon.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
class NamingAlert(gtk.Window): class NamingAlert(gtk.Window):
@ -194,71 +182,66 @@ class NamingAlert(gtk.Window):
vbox.pack_start(toolbar, False) vbox.pack_start(toolbar, False)
toolbar.show() toolbar.show()
canvas = hippo.Canvas()
self._root = hippo.CanvasBox()
self._root.props.background_color = style.COLOR_WHITE.get_int()
canvas.set_root(self._root)
vbox.pack_start(canvas)
canvas.show()
body = self._create_body() body = self._create_body()
self._root.append(body, hippo.PACK_EXPAND) vbox.pack_start(body, expand=True, fill=True)
body.show()
widget = self._title.get_property('widget') self._title.grab_focus()
widget.grab_focus()
def _create_body(self): def _create_body(self):
body = hippo.CanvasBox() body = gtk.VBox(spacing=style.DEFAULT_SPACING)
body.props.orientation = hippo.ORIENTATION_VERTICAL body.set_border_width(style.DEFAULT_SPACING * 3)
body.props.background_color = style.COLOR_WHITE.get_int() header = self._create_header()
body.props.padding_top = style.DEFAULT_SPACING * 3 body.pack_start(header, expand=False, padding=style.DEFAULT_PADDING)
header = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL, body.pack_start(self._create_separator(style.DEFAULT_SPACING),
padding=style.DEFAULT_PADDING, expand=False)
padding_right=style.GRID_CELL_SIZE,
spacing=style.DEFAULT_SPACING)
body.append(header)
descriptions = hippo.CanvasBox( body.pack_start(self._create_label(_('Description:')), expand=False)
orientation=hippo.ORIENTATION_HORIZONTAL,
spacing=style.DEFAULT_SPACING * 3,
padding_left=style.GRID_CELL_SIZE,
padding_right=style.GRID_CELL_SIZE,
padding_top=style.DEFAULT_SPACING * 3)
body.append(descriptions, hippo.PACK_EXPAND) description = self._activity.metadata.get('description', '')
description_box, self._description = self._create_text_view(description)
body.pack_start(description_box, expand=True, fill=True)
first_column = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL, body.pack_start(self._create_separator(style.DEFAULT_PADDING),
spacing=style.DEFAULT_SPACING) expand=False)
descriptions.append(first_column)
second_column = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL,
spacing=style.DEFAULT_SPACING)
descriptions.append(second_column, hippo.PACK_EXPAND)
self._favorite_icon = self._create_favorite_icon() body.pack_start(self._create_label(_('Tags:')), expand=False)
header.append(self._favorite_icon)
entry_icon = self._create_entry_icon() tags = self._activity.metadata.get('tags', '')
header.append(entry_icon) tags_box, self._tags = self._create_text_view(tags)
body.pack_start(tags_box, expand=True, fill=True)
self._title = self._create_title() body.show_all()
header.append(self._title, hippo.PACK_EXPAND) return body
if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: def _create_label(self, text):
header.reverse() text = gtk.Label(text)
text.set_alignment(0, 0.5)
text.modify_fg(gtk.STATE_NORMAL,
style.COLOR_BUTTON_GREY.get_gdk_color())
return text
description_box, self._description = self._create_description() def _create_separator(self, height):
second_column.append(description_box) separator = gtk.HSeparator()
separator.modify_bg(gtk.STATE_NORMAL, style.COLOR_WHITE.get_gdk_color())
separator.set_size_request(-1, height)
return separator
tags_box, self._tags = self._create_tags() def _create_header(self):
second_column.append(tags_box) header = gtk.HBox(spacing=style.DEFAULT_SPACING)
return body self._favorite_icon = FavoriteIcon()
header.pack_start(self._favorite_icon, expand=False)
entry_icon = self._create_entry_icon()
header.pack_start(entry_icon, expand=False)
self._title = self._create_title()
header.pack_start(self._title, expand=True)
def _create_favorite_icon(self): return header
favorite_icon = FavoriteIcon(False)
return favorite_icon
def _create_entry_icon(self): def _create_entry_icon(self):
bundle_id = self._activity.metadata.get('activity', '') bundle_id = self._activity.metadata.get('activity', '')
@ -270,83 +253,52 @@ class NamingAlert(gtk.Window):
else: else:
activity_bundle = ActivityBundle(self._bundle_path) activity_bundle = ActivityBundle(self._bundle_path)
file_name = activity_bundle.get_icon() file_name = activity_bundle.get_icon()
entry_icon = CanvasIcon(file_name=file_name) entry_icon = Icon(file=file_name, icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR)
if self._activity.metadata.get('icon-color'): if self._activity.metadata.get('icon-color'):
entry_icon.props.xo_color = XoColor( \ entry_icon.props.xo_color = XoColor( \
self._activity.metadata['icon-color']) self._activity.metadata['icon-color'])
return entry_icon return entry_icon
def _create_title(self): def _create_title(self):
title = CanvasEntry() title = gtk.Entry()
title.set_background(style.COLOR_WHITE.get_html()) title.set_text(self._activity.metadata.get('title', _('Untitled')))
title.props.text = self._activity.metadata.get('title', _('Untitled'))
return title return title
def _create_description(self): def _create_text_view(self, text):
vbox = hippo.CanvasBox() scrolled_window = gtk.ScrolledWindow()
vbox.props.spacing = style.DEFAULT_SPACING scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
scrolled_window.set_border_width(style.LINE_WIDTH)
text = hippo.CanvasText(text=_('Description:'), scrolled_window.set_shadow_type(gtk.SHADOW_IN)
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)
description = self._activity.metadata.get('description', '')
text_view = CanvasTextView(description,
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 _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 text_view = gtk.TextView()
text_view.set_left_margin(style.DEFAULT_PADDING)
text_view.set_wrap_mode(gtk.WRAP_WORD_CHAR)
text_view.set_accepts_tab(False)
text_view.get_buffer().set_text(text)
scrolled_window.add(text_view)
return vbox, text_view return scrolled_window, text_view
def __realize_cb(self, widget): def __realize_cb(self, widget):
self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
self.window.set_accept_focus(True) self.window.set_accept_focus(True)
def __keep_cb(self, widget): def __keep_cb(self, widget):
is_favorite = self._favorite_icon.get_favorite() if self._favorite_icon.get_active():
if is_favorite:
self._activity.metadata['keep'] = 1 self._activity.metadata['keep'] = 1
else: else:
self._activity.metadata['keep'] = 0 self._activity.metadata['keep'] = 0
self._activity.metadata['title'] = self._title.props.text self._activity.metadata['title'] = self._title.get_text()
new_tags = self._tags.text_view_widget.props.buffer.props.text text_buffer = self._tags.get_buffer()
start, end = text_buffer.get_bounds()
new_tags = text_buffer.get_text(start, end)
self._activity.metadata['tags'] = new_tags self._activity.metadata['tags'] = new_tags
new_description = \ text_buffer = self._description.get_buffer()
self._description.text_view_widget.props.buffer.props.text start, end = text_buffer.get_bounds()
new_description = text_buffer.get_text(start, end)
self._activity.metadata['description'] = new_description self._activity.metadata['description'] = new_description
self._activity.metadata['title_set_by_user'] = '1' self._activity.metadata['title_set_by_user'] = '1'

Loading…
Cancel
Save