From b5c04ff29befec16f77f4674a95949bc0a36129f Mon Sep 17 00:00:00 2001 From: olpc Date: Tue, 22 Jun 2010 22:37:31 +0000 Subject: Initial commit --- (limited to 'canvas.py') diff --git a/canvas.py b/canvas.py new file mode 100644 index 0000000..4add4c6 --- /dev/null +++ b/canvas.py @@ -0,0 +1,182 @@ +# Provides funcitonality to the canvas (everything below the toolbox) +# The canvas is where collected data is managed, analized, played +# back... + +import gtk +import gtk.glade +from sugar.datastore import datastore +import interface +import storedata +import gst +import os + +GLADE_FILE = "canvas.glade" +WIDGET_NAME = "canvas" + +class Canvas(interface.New): + def setup(self): + self.player = gst.element_factory_make("playbin", "player") + fakesink = gst.element_factory_make("fakesink", "fakesink") + self.player.set_property("video-sink", fakesink) + bus = self.player.get_bus() + bus.add_signal_watch() + bus.connect("message", self.on_message) + self.PhotoView = self.interface.get_widget("photoView") + self.model = gtk.ListStore(str, gtk.gdk.Pixbuf) + self.PhotoView.set_model(self.model) + self.PhotoView.set_text_column(0) + self.PhotoView.set_pixbuf_column(1) + self.MainImage = self.interface.get_widget("mainImage") + self.selected_name = None + self.load_all_data() + + def on_message(self, bus, message): + t = message.type + if t == gst.MESSAGE_EOS: + self.player.set_state(gst.STATE_NULL) + elif t == gst.MESSAGE_ERROR: + self.player.set_state(gst.STATE_NULL) + err, debug = message.parse_error() + print "Error: %s" % err, debug + + def get_pixbuf(self, entry_title, main_image=False): + print 'makeing new data entry' + obj, num = datastore.find({'title':entry_title, 'TimeLapse':'yes', + 'mime_type':'image/png'}) + if num != 0: + filepath = obj[0].get_file_path() + else: + return None + if not main_image: + pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(filepath, 96, 96) + else: + pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(filepath, 640, 480) + return pixbuf + + + def new_data_entry(self, entry_title): + pixbuf = self.get_pixbuf(entry_title) + self.model.insert(0, [entry_title, pixbuf]) + + def load_all_data(self): + try: + titles = datastore.get_unique_values('TimeLapsetitle') + except: titles = [] + for title in titles: + self.new_data_entry(title) + + + def get_description_buffer(self, title): + objects, num = datastore.find({'title':title, 'TimeLapse':'yes'}) + description = objects[0].metadata['description'] + description_buffer = gtk.TextBuffer(table=None) + description_buffer.set_text(description) + return description_buffer + + def on_photo_selected(self, widget): + self.selected_name = widget.get_cells()[0].get_property("text") + print self.selected_name + self.interface.get_widget("name_entry").set_text(self.selected_name) + pixbuf = self.get_pixbuf(self.selected_name, True) + if pixbuf == None: + self.MainImage.clear() + else: + self.MainImage.set_from_pixbuf(pixbuf) + description_buffer = self.get_description_buffer(self.selected_name) + self.get_widget("description_entry").set_buffer(description_buffer) + + def on_name_changed(self, widget, data): + # not finished. Still need to get old_name and new_name and define change_name + new_name = self.get_widget('name_entry').get_text() + print new_name + new_name = storedata.unique_title(new_name) + #self.get_widget('name_entry').set_text(new_name) + storedata.change_name(self.selected_name, new_name) + for obj in self.model: + if obj[0] == self.selected_name: + obj[0] = new_name + self.selected_name = new_name + + def on_description_changed(self, widget, event): + textBuffer = widget.get_buffer() + start = textBuffer.get_start_iter() + end = textBuffer.get_end_iter() + description = textBuffer.get_text(start, end) + storedata.change_description(self.selected_name, description) + + def on_play_clicked(self, widget): + print 'playing audio' + if self.selected_name != None: + obj, num = datastore.find({'title':self.selected_name, + 'TimeLapse':'yes', + 'mime_type':'audio/ogg'}) + print 'num of play objects:', num + soundfile = obj[0].get_file_path() + if os.path.isfile(os.path.abspath(soundfile)): + self.player.set_property("uri", "file://" + + os.path.abspath(soundfile)) + self.player.set_state(gst.STATE_PLAYING) + + def on_delete_clicked(self, widget): + if self.selected_name != None: + count = 0 + for obj in self.model: + if obj[0] == self.selected_name: + iterator = self.model.iter_nth_child(None,count) + self.model.remove(iterator) + count += 1 + ds_objects, num_objects = datastore.find({'title': self.selected_name, 'TimeLapse':'yes'}) + + for i in xrange (0, num_objects, 1): + print 'DELETING ' + ds_objects[i].metadata['title'] + '...' + ds_objects[i].destroy() + datastore.delete(ds_objects[i].object_id) + self.MainImage.clear() + self.get_widget('name_entry').set_text('') + description_buffer = gtk.TextBuffer(table=None) + description_buffer.set_text('') + self.get_widget("description_entry").set_buffer(description_buffer) + + +''' + def on_save_clicked(self, widget): + #name = self.interface.get_widget("name_entry").get_text() + textBuffer = self.interface.get_widget("description_entry").get_buffer() + start = textBuffer.get_start_iter() + end = textBuffer.get_end_iter() + description = textBuffer.get_text(start, end) + print description + if self.selected_name: + event = self.events[self.selected_name] + for obj in event: + new_obj = datastore.create() + new_obj.metadata['activity'] = "TimeLapse" + new_obj.metadata['title'] = obj.metadata['title'] + new_obj.metadata['mime_type'] = obj.metadata['mime_type'] + new_obj.metadata["Description"] = description + obj.metadata["Description"] = description + new_obj.set_file_path(obj.get_file_path()) + datastore.delete(obj.object_id) + datastore.write(new_obj) + + def on_photo_selected(self, widget): + name = widget.get_cells()[0].get_property("text") + if name in self.events.keys(): + event = self.events[name] + for obj in event: + if obj.metadata['mime_type'] == 'image/png': + obj.metadata['keep'] = 1 + datastore.write(obj) + filepath = obj.get_file_path() + pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(filepath, + 500, 375) + self.MainImage.set_from_pixbuf(pixbuf) + self.interface.get_widget("name_entry").set_text(name) + description_buffer = gtk.TextBuffer(table=None) + description_buffer.set_text(obj.metadata['Description']) + self.interface.get_widget("description_entry").set_buffer(description_buffer) + self.selected_name = name +''' + + +canvas = Canvas(GLADE_FILE, WIDGET_NAME) -- cgit v0.9.1