Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/canvas.py
diff options
context:
space:
mode:
Diffstat (limited to 'canvas.py')
-rw-r--r--canvas.py182
1 files changed, 182 insertions, 0 deletions
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)