Implement setting the journal entry title from the toolbar.

This commit is contained in:
Tomeu 2007-05-13 18:21:35 +02:00
parent 309ddec8b7
commit f3289d2e59
4 changed files with 73 additions and 32 deletions

View File

@ -84,7 +84,7 @@ class ClipboardBox(hippo.CanvasBox):
if len(uris) > 1: if len(uris) > 1:
raise NotImplementedError('Multiple uris in text/uri-list still not supported.') raise NotImplementedError('Multiple uris in text/uri-list still not supported.')
uri = urlparse.urlparse(uris[0]) uri = urlparse.urlparse(uris[0])
path, file_name = os.path.split(uri.path) path, file_name = os.path.split(uri[2])
# Copy the file, as it will be deleted when the dnd operation finishes. # Copy the file, as it will be deleted when the dnd operation finishes.
new_file_path = os.path.join(path, 'cb' + file_name) new_file_path = os.path.join(path, 'cb' + file_name)

View File

@ -59,7 +59,7 @@ class ActivityToolbar(gtk.Toolbar):
if activity.jobject: if activity.jobject:
self.title = gtk.Entry() self.title = gtk.Entry()
self.title.set_text(activity.jobject['title']) self.title.set_text(activity.jobject['title'])
self.title.connect('activate', self._title_activate_cb) self.title.connect('focus-out-event', self._title_focus_out_event_cb)
self._add_widget(self.title, expand=True) self._add_widget(self.title, expand=True)
activity.jobject.connect('updated', self._jobject_updated_cb) activity.jobject.connect('updated', self._jobject_updated_cb)
@ -67,9 +67,10 @@ class ActivityToolbar(gtk.Toolbar):
def _jobject_updated_cb(self, jobject): def _jobject_updated_cb(self, jobject):
self.title.set_text(jobject['title']) self.title.set_text(jobject['title'])
def _title_activate_cb(self, entry): def _title_focus_out_event_cb(self, entry, event):
self._activity.jobject['title'] = self.title.get_text() if self._activity.jobject['title'] != self.title.get_text():
self._activity.save() self._activity.jobject['title'] = self.title.get_text()
self._activity.save()
def _add_widget(self, widget, expand=False): def _add_widget(self, widget, expand=False):
tool_item = gtk.ToolItem() tool_item = gtk.ToolItem()
@ -181,34 +182,27 @@ class Activity(Window, gtk.Container):
elif create_jobject: elif create_jobject:
logging.debug('Creating a jobject.') logging.debug('Creating a jobject.')
self.jobject = datastore.create() self.jobject = datastore.create()
self.jobject['title'] = 'New entry' self.jobject['title'] = ''
self.jobject['activity'] = self.get_service_name() self.jobject['activity'] = self.get_service_name()
self.jobject['date'] = str(time.time()) self.jobject['date'] = str(time.time())
self.jobject['icon'] = 'theme:object-text' self.jobject['icon'] = ''
self.jobject['keep'] = '0' self.jobject['keep'] = '0'
self.jobject['buddies'] = '' self.jobject['buddies'] = ''
self.jobject['preview'] = '' self.jobject['preview'] = ''
self.jobject['icon-color'] = profile.get_color().to_string() self.jobject['icon-color'] = profile.get_color().to_string()
from sugar import env self.jobject.file_path = ''
self.jobject.file_path = os.path.join(env.get_profile_path(), 'test.txt')
f = open(self.jobject.file_path, 'w')
f.write('mec')
f.close()
try: try:
datastore.write(self.jobject) datastore.write(self.jobject)
except Exception, e: except Exception, e:
logging.error(e) logging.error(e)
else: else:
self.jobject = None self.jobject = None
self.connect('realize', self._realize_cb)
def _realize_cb(self, activity): self.connect('focus-out-event', self._focus_out_event_cb)
try:
self.read_file() def _focus_out_event_cb(self, widget, event):
except NotImplementedError: if self.jobject:
logging.debug('read_file() not implemented.') self.save()
pass
def read_file(self): def read_file(self):
""" """
@ -221,20 +215,18 @@ class Activity(Window, gtk.Container):
""" """
Subclasses implement this method if they support saving data to objects Subclasses implement this method if they support saving data to objects
in the journal. Can access the object through the jobject attribute. in the journal. Can access the object through the jobject attribute.
Must return the file path the data was saved to.
""" """
raise NotImplementedError raise NotImplementedError
def save(self): def save(self):
"""Request that the activity is saved to the Journal.""" """Request that the activity is saved to the Journal."""
try: try:
file_path = self.write_file() self.jobject.file_path = os.path.join('/tmp', '%i.txt' % time.time())
self.jobject.file_path = file_path self.write_file()
except NotImplementedError: except NotImplementedError:
pass self.jobject.file_path = ''
datastore.write(self.jobject) datastore.write(self.jobject)
def _internal_joined_cb(self, activity, success, err): def _internal_joined_cb(self, activity, success, err):
"""Callback when join has finished""" """Callback when join has finished"""
self._shared_activity.disconnect(self._join_id) self._shared_activity.disconnect(self._join_id)

View File

@ -22,26 +22,48 @@ from sugar.datastore import dbus_helpers
class DSObject(gobject.GObject): class DSObject(gobject.GObject):
__gsignals__ = { __gsignals__ = {
'updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, 'updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])) ([]))
} }
def __init__(self, object_id, metadata, file_path): def __init__(self, object_id, metadata, file_path):
gobject.GObject.__init__(self) gobject.GObject.__init__(self)
self.object_id = object_id self.object_id = object_id
self.metadata = metadata self._metadata = metadata
self.file_path = file_path self._file_path = file_path
def __getitem__(self, key): def __getitem__(self, key):
return self.metadata[key] return self.metadata[key]
def __setitem__(self, key, value): def __setitem__(self, key, value):
self.metadata[key] = value if not self.metadata.has_key(key) or self.metadata[key] != value:
self.metadata[key] = value
self.emit('updated')
def get_metadata(self):
return self._metadata
def set_metadata(self, metadata):
if self._metadata != metadata:
self._metadata = metadata
self.emit('updated')
metadata = property(get_metadata, set_metadata)
def get_file_path(self):
return self._file_path
def set_file_path(self, file_path):
if self._file_path != file_path:
self._file_path = file_path
self.emit('updated')
file_path = property(get_file_path, set_file_path)
def get(object_id): def get(object_id):
logging.debug('datastore.get') logging.debug('datastore.get')
metadata = dbus_helpers.get_properties(object_id) metadata = dbus_helpers.get_properties(object_id)
file_path = dbus_helpers.get_filename(object_id) file_path = dbus_helpers.get_filename(object_id)
logging.debug('filepath: ' + file_path)
ds_object = DSObject(object_id, metadata, file_path) ds_object = DSObject(object_id, metadata, file_path)
# TODO: register the object for updates # TODO: register the object for updates
return ds_object return ds_object

View File

@ -34,20 +34,47 @@ except Exception, e:
_data_store = None _data_store = None
logging.error(e) logging.error(e)
def get_contents(filename):
if not filename:
return ''
f = open(filename, "r")
try:
contents = f.read()
finally:
f.close()
return contents
def create(properties, filename): def create(properties, filename):
logging.debug('dbus_helpers.create: %s, %s' % (properties, filename)) logging.debug('dbus_helpers.create: %s, %s' % (properties, filename))
try:
logging.debug(get_contents(filename))
except UnicodeDecodeError:
pass
object_id = _data_store.create(dbus.Dictionary(properties), filename) object_id = _data_store.create(dbus.Dictionary(properties), filename)
logging.debug('dbus_helpers.create: ' + object_id) logging.debug('dbus_helpers.create: ' + object_id)
return object_id return object_id
def update(uid, properties, filename): def update(uid, properties, filename):
logging.debug('dbus_helpers.update: %s, %s, %s' % (uid, properties, filename))
try:
logging.debug(get_contents(filename))
except UnicodeDecodeError:
pass
_data_store.update(uid, dbus.Dictionary(properties), filename) _data_store.update(uid, dbus.Dictionary(properties), filename)
def get_properties(uid): def get_properties(uid):
return _data_store.get_properties(uid) props = _data_store.get_properties(uid)
logging.debug('dbus_helpers.get_properties: %s, %s' % (uid, props))
return props
def get_filename(uid): def get_filename(uid):
return _data_store.get_filename(uid) filename = _data_store.get_filename(uid)
logging.debug('dbus_helpers.get_filename: %s, %s' % (uid, filename))
try:
logging.debug(get_contents(filename))
except UnicodeDecodeError:
pass
return filename
def find(query): def find(query):
return _data_store.find(query) return _data_store.find(query)