From 0553daf50d0d058010a04cfae1d245c9765b11b4 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Fri, 7 Mar 2014 22:11:49 +0200 Subject: [PATCH] Add file open/save/save as support --- usr/openmv-ide.glade | 21 ++++++++++++- usr/openmv-ide.py | 75 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 83 insertions(+), 13 deletions(-) diff --git a/usr/openmv-ide.glade b/usr/openmv-ide.glade index adb8e96f8..09b89deeb 100644 --- a/usr/openmv-ide.glade +++ b/usr/openmv-ide.glade @@ -48,6 +48,7 @@ False True True + @@ -58,6 +59,7 @@ False True True + @@ -68,6 +70,7 @@ False True True + @@ -85,6 +88,7 @@ False True True + @@ -272,7 +276,22 @@ - + + True + False + False + toolbutton5 + True + gtk-save + + + + False + True + + + + True False False diff --git a/usr/openmv-ide.py b/usr/openmv-ide.py index 52d08c50d..457cdddb2 100755 --- a/usr/openmv-ide.py +++ b/usr/openmv-ide.py @@ -12,14 +12,14 @@ import usb.core import usb.util import numpy as np import openmv +from os.path import expanduser ex_source =\ -'''from openmv import sensor, imlib +'''import sensor, imlib while (True): image = sensor.snapshot() - r= imlib.detect_color(image, (340, 50, 50), 10) - imlib.draw_rectangle(image, r) ''' + def rgb2hsv(r, g, b): r, g, b = r/255.0, g/255.0, b/255.0 mx = max(r, g, b) @@ -57,6 +57,7 @@ class OMVGtk: self.buffer.set_highlight_syntax(True) self.buffer.set_language(lang_manager.get_language("python")) self.buffer.set_text(ex_source) + self.buffer.connect("changed", self.text_changed) sourceview.set_buffer(self.buffer) self.terminal = self.builder.get_object('terminal') @@ -69,19 +70,28 @@ class OMVGtk: self.statusbar = self.builder.get_object("statusbar") self.statusbar_ctx = self.statusbar.get_context_id("default") - # init openmv - openmv.init() + #save toolbutton + self.save_button = self.builder.get_object('save_file_toolbutton') + self.save_button.set_sensitive(False) + #connect signals signals = { - "on_execute_clicked" : self.execute_clicked, - "on_stop_clicked" : self.stop_clicked, "on_top_window_destroy" : self.quit, - "on_motion_notify": self.motion_notify, - "on_button_press": self.button_pressed + "on_execute_clicked" : self.execute_clicked, + "on_stop_clicked" : self.stop_clicked, + "on_motion_notify" : self.motion_notify, + "on_button_press" : self.button_pressed, + "on_open_file" : self.open_file, + "on_save_file" : self.save_file, + "on_save_file_as" : self.save_file_as, } self.builder.connect_signals(signals) self.window = self.builder.get_object("top_window") + self.file_path = None + + # init openmv + openmv.init() def execute_clicked(self, widget): buf = self.buffer.get_text(self.buffer.get_start_iter(), self.buffer.get_end_iter()) @@ -100,9 +110,9 @@ class OMVGtk: pixbuf = self.framebuffer.get_pixbuf() if x < pixbuf.get_width() and y < pixbuf.get_height(): pixel = pixbuf.get_pixels_array()[y][x] - hsv = "(%d, %d, %d)" %(rgb2hsv(pixel[0], pixel[1], pixel[2])) + rgb = "(%d, %d, %d)" %(pixel[0], pixel[1], pixel[2]) self.statusbar.pop(self.statusbar_ctx) - self.statusbar.push(self.statusbar_ctx, hsv) + self.statusbar.push(self.statusbar_ctx, rgb) def button_pressed(self, widget, event): x = int(event.x) @@ -110,7 +120,7 @@ class OMVGtk: pixbuf = self.framebuffer.get_pixbuf() if x < pixbuf.get_width() and y < pixbuf.get_height(): pixel = pixbuf.get_pixels_array()[y][x] - print rgb2hsv(pixel[0], pixel[1], pixel[2]) + print (pixel[0], pixel[1], pixel[2]) def update_fb(self): # read framebuffer @@ -121,6 +131,47 @@ class OMVGtk: self.framebuffer.set_from_pixbuf(pixbuf) gobject.idle_add(omvgtk.update_fb); + def open_file(self, widget): + dialog = gtk.FileChooserDialog(title=None,action=gtk.FILE_CHOOSER_ACTION_OPEN, + buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) + dialog.set_default_response(gtk.RESPONSE_OK) + dialog.set_current_folder("./examples/") + filter = gtk.FileFilter() + filter.set_name("python") + filter.add_pattern("*.py") + dialog.add_filter(filter) + + if dialog.run() == gtk.RESPONSE_OK: + with open(dialog.get_filename(), "r") as file: + self.buffer.set_text(file.read()) + self.file_path=dialog.get_filename() + self.save_button.set_sensitive(False) + + dialog.destroy() + + def save_file(self, widget): + with open(self.file_path, "w") as file: + file.write(self.buffer.get_text(self.buffer.get_start_iter(), self.buffer.get_end_iter())) + + def save_file_as(self, widget): + dialog = gtk.FileChooserDialog(title=None,action=gtk.FILE_CHOOSER_ACTION_SAVE, + buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) + dialog.set_default_response(gtk.RESPONSE_OK) + dialog.set_current_folder("./examples/") + filter = gtk.FileFilter() + filter.set_name("python") + filter.add_pattern("*.py") + dialog.add_filter(filter) + + if dialog.run() == gtk.RESPONSE_OK: + with open(dialog.get_filename(), "w") as file: + file.write(self.buffer.get_text(self.buffer.get_start_iter(), self.buffer.get_end_iter())) + + dialog.destroy() + + def text_changed(self, widget): + self.save_button.set_sensitive(True) + def quit(self, widget): os.close(self.fd)