From af4e4870b43bf9559ecf1248dc428811a919d618 Mon Sep 17 00:00:00 2001
From: Eben Eliason <[EMAIL PROTECTED]>
Date: Fri, 18 Apr 2008 18:00:07 -0400
Subject: [PATCH] Add palettes to people and objects in Journal
---
collapsedentry.py | 7 +++
expandedentry.py | 10 ++++-
journalactivity.py | 8 ++--
journaltoolbox.py | 9 ----
palettes.py | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 143 insertions(+), 14 deletions(-)
create mode 100644 palettes.py
diff --git a/collapsedentry.py b/collapsedentry.py
index 8584ac4..ee37d46 100644
--- a/collapsedentry.py
+++ b/collapsedentry.py
@@ -31,6 +31,7 @@ from sugar.graphics.roundbox import CanvasRoundBox
from sugar.graphics.entry import CanvasEntry
from keepicon import KeepIcon
+from palettes import JobjectPalette, BuddyPalette
import misc
class BuddyList(hippo.CanvasBox):
@@ -50,6 +51,7 @@ class BuddyList(hippo.CanvasBox):
icon = CanvasIcon(icon_name='computer-xo',
xo_color=XoColor(color),
cache=True)
+ icon.set_palette(BuddyPalette(buddy))
self.append(icon)
class CollapsedEntry(hippo.CanvasBox):
@@ -76,6 +78,7 @@ class CollapsedEntry(hippo.CanvasBox):
orientation=hippo.ORIENTATION_HORIZONTAL)
self._jobject = None
+ self._jobject_palette = None
self._allow_resume = allow_resume
self._is_selected = False
@@ -266,6 +269,7 @@ class CollapsedEntry(hippo.CanvasBox):
self._title_entry.props.text = self._title.props.text
elif self._title.props.text != title:
self._title.props.text = title
+ self._jobject_palette.props.primary_text = title
self._jobject.metadata['title'] = title
self._jobject.metadata['title_set_by_user'] = '1'
datastore.write(self._jobject, update_mtime=False,
@@ -328,6 +332,9 @@ class CollapsedEntry(hippo.CanvasBox):
self._title.props.text = self._format_title()
self._title_entry.props.text = self._format_title()
+ self._jobject_palette = JobjectPalette(jobject)
+ self._icon.set_palette(self._jobject_palette)
+
self._buddies_list.set_model(self._decode_buddies())
if jobject.metadata.has_key('progress'):
diff --git a/expandedentry.py b/expandedentry.py
index 1bb7993..67d8b81 100644
--- a/expandedentry.py
+++ b/expandedentry.py
@@ -34,6 +34,8 @@ from sugar.datastore import datastore
from tagbox import TagBox
from keepicon import KeepIcon
+from palettes import JobjectPalette, BuddyPalette
+
import misc
class Separator(hippo.CanvasBox, hippo.CanvasItem):
@@ -75,6 +77,7 @@ class BuddyList(hippo.CanvasBox):
icon = CanvasIcon(icon_name='computer-xo',
xo_color=XoColor(color),
size=style.STANDARD_ICON_SIZE)
+ icon.set_palette(BuddyPalette(buddy))
hbox.append(icon)
self.append(hbox)
@@ -86,6 +89,7 @@ class ExpandedEntry(hippo.CanvasBox):
self.props.padding_top = style.DEFAULT_SPACING * 3
self._jobject = datastore.get(object_id)
+ self._jobject_palette = None
self._update_title_sid = None
# Create header
@@ -163,7 +167,10 @@ class ExpandedEntry(hippo.CanvasBox):
self._jobject.metadata['icon-color']:
icon.props.xo_color = XoColor( \
self._jobject.metadata['icon-color'])
-
+
+ self._jobject_palette = JobjectPalette(self._jobject)
+ icon.set_palette(self._jobject_palette)
+
return icon
def _create_title(self):
@@ -343,6 +350,7 @@ class ExpandedEntry(hippo.CanvasBox):
old_title = self._jobject.metadata.get('title', None)
if old_title != self._title.props.text:
+ self._jobject_palette.props.primary_text = self._title.props.text
self._jobject.metadata['title'] = self._title.props.text
self._jobject.metadata['title_set_by_user'] = '1'
needs_update = True
diff --git a/journalactivity.py b/journalactivity.py
index 061105d..bff1f7d 100755
--- a/journalactivity.py
+++ b/journalactivity.py
@@ -136,6 +136,7 @@ class JournalActivity(activity.Activity):
bus.get_object(DS_DBUS_SERVICE, DS_DBUS_PATH), DS_DBUS_INTERFACE)
data_store.connect_to_signal('Created', self._data_store_created_cb)
data_store.connect_to_signal('Updated', self._data_store_updated_cb)
+ data_store.connect_to_signal('Deleted', self._data_store_deleted_cb)
self._dbus_service = JournalActivityDBusService(self)
@@ -164,7 +165,6 @@ class JournalActivity(activity.Activity):
self._detail_toolbox = DetailToolbox()
entry_toolbar = self._detail_toolbox.entry_toolbar
- entry_toolbar.connect('entry-erased', self._entry_erased_cb)
self._detail_view = DetailView()
self._detail_view.connect('go-back-clicked', self._go_back_clicked_cb)
@@ -228,9 +228,6 @@ class JournalActivity(activity.Activity):
self._show_secondary_view(jobject)
return True
- def _entry_erased_cb(self, toolbar):
- self._show_main_view()
-
def _volume_changed_cb(self, volume_toolbar, volume_id):
logging.debug('Selected volume: %r.' % volume_id)
self._main_toolbox.search_toolbar.set_volume_id(volume_id)
@@ -255,6 +252,9 @@ class JournalActivity(activity.Activity):
finally:
jobject.destroy()
+ def _data_store_deleted_cb(self, uid):
+ self._show_main_view()
+
def _focus_in_event_cb(self, window, event):
self.search_grab_focus()
self._list_view.update_dates()
diff --git a/journaltoolbox.py b/journaltoolbox.py
index 98d549b..08b6157 100644
--- a/journaltoolbox.py
+++ b/journaltoolbox.py
@@ -317,14 +317,6 @@ class DetailToolbox(Toolbox):
self.entry_toolbar.show()
class EntryToolbar(gtk.Toolbar):
- __gtype_name__ = 'EntryToolbar'
-
- __gsignals__ = {
- 'entry-erased' : (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
- ([]))
- }
-
def __init__(self):
gtk.Toolbar.__init__(self)
@@ -381,7 +373,6 @@ class EntryToolbar(gtk.Toolbar):
if bundle is not None and bundle.is_installed():
bundle.uninstall()
datastore.delete(self._jobject.object_id)
- self.emit('entry-erased')
def _resume_menu_item_activate_cb(self, menu_item, service_name):
if self._jobject:
diff --git a/palettes.py b/palettes.py
new file mode 100644
index 0000000..a2b169b
--- /dev/null
+++ b/palettes.py
@@ -0,0 +1,123 @@
+# Copyright (C) 2008 One Laptop Per Child
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+import statvfs
+import logging
+from gettext import gettext as _
+
+import gtk
+
+from sugar import env
+from sugar import profile
+from sugar.graphics import style
+from sugar.graphics.palette import Palette
+from sugar.graphics.menuitem import MenuItem
+from sugar.graphics.icon import Icon
+from sugar.datastore import datastore
+from sugar.graphics.xocolor import XoColor
+
+import misc
+
+class JobjectPalette(Palette):
+ def __init__(self, jobject):
+
+ self._jobject = jobject
+
+ activity_icon = Icon(icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR)
+ activity_icon.props.file = misc.get_icon_name(jobject)
+ if jobject.metadata.has_key('icon-color') and \
+ jobject.metadata['icon-color']:
+ activity_icon.props.xo_color = \
+ XoColor(jobject.metadata['icon-color'])
+ else:
+ avtivity_icon.props.xo_color = \
+ XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(),
+ style.COLOR_TRANSPARENT.get_svg()))
+
+ if jobject.metadata.has_key('title'):
+ title = jobject.metadata['title']
+ else:
+ title = _('Untitled')
+
+ Palette.__init__(self, primary_text=title,
+ icon=activity_icon)
+
+ if jobject.metadata.get('activity_id', ''):
+ resume_label = _('Resume')
+ else:
+ resume_label = _('Start')
+ menu_item = MenuItem(resume_label, 'activity-start')
+ menu_item.connect('activate', self.__start_activate_cb)
+ self.menu.append(menu_item)
+ menu_item.show()
+
+ """
+ menu_item = MenuItem(_('Start with'), 'activity-start')
+ menu_item.props.sensitive = False
+ #menu_item.connect('activate', self.__start_with_activate_cb)
+ self.menu.append(menu_item)
+ menu_item.show()
+ """
+
+ menu_item = MenuItem(_('Copy'))
+ icon = Icon(icon_name='edit-copy', xo_color=profile.get_color(),
+ icon_size=gtk.ICON_SIZE_MENU)
+ menu_item.set_image(icon)
+ menu_item.connect('activate', self.__copy_activate_cb)
+ self.menu.append(menu_item)
+ menu_item.show()
+
+ menu_item = MenuItem(_('Erase'), 'dialog-cancel')
+ menu_item.connect('activate', self.__erase_activate_cb)
+ self.menu.append(menu_item)
+ menu_item.show()
+
+ def __start_activate_cb(self, menu_item):
+ self._jobject.resume()
+
+ def __copy_activate_cb(self, menu_item):
+ clipboard = gtk.Clipboard()
+ clipboard.set_with_data([('text/uri-list', 0, 0)],
+ self.__clipboard_get_func_cb,
+ self.__clipboard_clear_func_cb)
+
+ def __clipboard_get_func_cb(self, clipboard, selection_data, info, data):
+ selection_data.set('text/uri-list', 8, self._jobject.file_path)
+
+ def __clipboard_clear_func_cb(self, clipboard, data):
+ pass
+
+ def __erase_activate_cb(self, menu_item):
+ bundle = misc.get_bundle(self._jobject)
+ if bundle is not None and bundle.is_installed():
+ bundle.uninstall()
+ datastore.delete(self._jobject.object_id)
+
+
+class BuddyPalette(Palette):
+ def __init__(self, buddy):
+ self._buddy = buddy
+
+ nick, colors = buddy
+ buddy_icon = Icon(icon_name='computer-xo',
+ icon_size=style.STANDARD_ICON_SIZE,
+ xo_color=XoColor(colors))
+
+ Palette.__init__(self, primary_text=nick,
+ icon=buddy_icon)
+
+ # TODO: Support actions on buddies, like make friend, invite, etc.
--
1.5.3.3
_______________________________________________
Sugar mailing list
[email protected]
http://lists.laptop.org/listinfo/sugar