#!/usr/bin/env python import os import pygtk pygtk.require('2.0') import gtk from export import Export import Image from my_exceptions import * from message import Message from double_lin_reg import Double_Linear_Regression from box_counting import Box_Counting,test_image TMP_REP='/tmp' class Xfrac_dim: "Graphic interface for frac_dim" def delete(self, widget, event=None): gtk.main_quit() return gtk.FALSE def switch(self,widget): widget.set_label(self.Etat) if self.Etat=="File mode": self.File_mode.hide() self.Directory_mode.show() self.Etat="Directory mode" else: self.Directory_mode.hide() self.File_mode.show() self.Etat="File mode" widget.show() def __init__(self): self.Window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.Window.connect("delete_event", self.delete) self.Window.set_border_width(10) Main_box=gtk.VBox(homogeneous=gtk.FALSE, spacing=10) # Creation of the notebook self.Notebook = gtk.Notebook() self.Notebook.set_tab_pos(gtk.POS_TOP) Main_box.pack_start(self.Notebook,gtk.TRUE,gtk.TRUE,0) self.Notebook.show() self.show_tabs = gtk.TRUE self.show_border = gtk.TRUE #first frame of the notebook self.File_mode=file_mode(self.Notebook) self.Directory_mode=directory_mode(self.Notebook) self.File_mode.show() self.Etat="File mode" # Create the close button Bottom_box = gtk.HBox(homogeneous=gtk.FALSE, spacing=10) self.Switch_button =gtk.Button("Directory mode") self.Switch_button.connect("clicked",self.switch) self.Switch_button.show() Bottom_box.pack_start(self.Switch_button,gtk.FALSE,gtk.FALSE,0) Quit_button = gtk.Button("close",gtk.STOCK_QUIT) Quit_button.connect("clicked", self.delete) Quit_button.show() Bottom_box.pack_start(Quit_button,gtk.FALSE,gtk.FALSE,0) Bottom_box.show() Main_box.pack_start(Bottom_box,gtk.FALSE,gtk.FALSE,0) Main_box.show() self.Window.add(Main_box) self.Window.show() class file_mode: "define the file_mode" def load_image(self,widget,entry): try: self.Bc.set_image(entry.get_text()) self.Image=entry.get_text() self.preview.destroy() self.preview.set_from_file(self.Image) self.preview.show() self.scrolled_image.destroy() self.scrolled_image = gtk.ScrolledWindow() self.scrolled_image.set_border_width(10) self.scrolled_image.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS) self.scrolled_image.add_with_viewport(self.preview) self.scrolled_image.show() self.bc_left_box.pack_start(self.scrolled_image,gtk.TRUE,gtk.TRUE,10) self.bc_left_box.show() self.bc_box.show() self.Button_compute.set_sensitive(gtk.TRUE) except InvalidImage, detail: print "This image is not a valid one : " + detail self.Button_compute.set_sensitive(gtk.FALSE) def file_selection(self,widget,output=""): filew = gtk.FileSelection("File selection") filew.connect("destroy", lambda w: filew.destroy()) filew.ok_button.connect("clicked", self.file_ok_sel,filew) filew.cancel_button.connect("clicked", lambda w: filew.destroy()) filew.set_filename(output) filew.show() def file_ok_sel(self, widget,filew): self.entry.set_text(filew.get_filename()) self.load_image(self,self.entry) filew.destroy() def compute(self,widget): self.Method.set_method(self.Bc) self.Bc.compute() self.DLR=Double_Linear_Regression(self.Bc.plot()) ex=export_page(self.Notebook,self.entry.get_text(),self.Bc,self.DLR.coefficient()) def __init__(self,Notebook): self.Exp=Export() self.Bc=Box_Counting() self.frame_name = "File mode" self.Notebook=Notebook self.bc_frame = gtk.Frame(self.frame_name) self.bc_frame.set_border_width(10) self.bc_frame.set_size_request(700, 500) self.bc_frame.show() self.bc_box=gtk.HBox(homogeneous=gtk.FALSE, spacing=10) #left part self.bc_left_box=gtk.VBox(homogeneous=gtk.FALSE, spacing=10) self.file_selection_box = gtk.HBox(homogeneous=gtk.FALSE, spacing=10) self.entry = gtk.Entry() self.entry.set_max_length(70) self.entry.connect("activate", self.load_image, self.entry) self.entry.set_text("Monfichier") self.entry.show() self.file_selection_box.pack_start(self.entry,gtk.TRUE,gtk.TRUE,10) button_browse=gtk.Button("Browse",gtk.STOCK_FIND) button_browse.connect("clicked",self.file_selection) button_browse.show() self.file_selection_box.pack_start(button_browse,gtk.FALSE,gtk.FALSE,10) self.file_selection_box.show() self.bc_left_box.pack_start(self.file_selection_box,gtk.FALSE,gtk.FALSE,10) self.scrolled_image = gtk.ScrolledWindow() self.scrolled_image.set_border_width(10) self.scrolled_image.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS) self.preview = gtk.Image() self.bc_left_box.pack_start(self.scrolled_image,gtk.TRUE,gtk.TRUE,10) self.bc_left_box.show() self.bc_box.pack_start(self.bc_left_box,gtk.TRUE,gtk.TRUE,10) #right part bc_right_box=gtk.VBox(homogeneous=gtk.FALSE, spacing=10) self.Method=Method() bc_right_box.pack_start(self.Method.get_object(),gtk.FALSE,gtk.FALSE,10) self.Button_compute=gtk.Button("Compute",gtk.STOCK_EXECUTE) self.Button_compute.set_sensitive(gtk.FALSE) self.Button_compute.connect("clicked",self.compute) self.Button_compute.show() bc_right_box.pack_start(self.Button_compute,gtk.FALSE,gtk.FALSE,10) bc_right_box.show() self.bc_box.pack_start(bc_right_box,gtk.FALSE,gtk.FALSE,10) self.bc_box.show() self.bc_frame.add(self.bc_box) self.bc_frame.show() def show(self): Label = gtk.Label(self.frame_name) Label.show() self.Notebook.insert_page(self.bc_frame, Label,0) self.Notebook.set_current_page(0) def hide(self): self.Notebook.remove_page(0) class directory_mode: "define the directory_mode" def load_rep(self,widget): self.Directory=widget.get_text() try: Files=os.listdir(self.Directory) self.Images=filter(test_image,Files) self.Button_compute.set_sensitive(gtk.TRUE) except OSError: print "You have to select a directory!" def directory_selection(self,widget,output=""): filew = gtk.FileSelection("Directory selection") filew.connect("destroy", lambda w: filew.destroy()) filew.ok_button.connect("clicked", self.file_ok_sel,filew) filew.cancel_button.connect("clicked", lambda w: filew.destroy()) filew.set_filename(output) filew.show() def file_ok_sel(self, widget,filew): self.Directory=(filew.get_filename()) try: Files=os.listdir(self.Directory) self.Images=filter(test_image,Files) self.Button_compute.set_sensitive(gtk.TRUE) except OSError: print "You have to select a directory!" filew.destroy() def compute(self,widget): print self.Images def __init__(self,Notebook): self.frame_name = "Directory mode" self.Notebook=Notebook self.bc_frame = gtk.Frame(self.frame_name) self.bc_frame.set_border_width(10) self.bc_frame.set_size_request(700, 500) self.bc_box=gtk.HBox(homogeneous=gtk.FALSE, spacing=10) #left part self.bc_left_box=gtk.VBox(homogeneous=gtk.FALSE, spacing=10) self.Directory_selection_box = gtk.HBox(homogeneous=gtk.FALSE, spacing=10) self.Entry = gtk.Entry() self.Entry.set_max_length(70) self.Entry.connect("activate", self.load_rep) self.Entry.set_text("My directory") self.Entry.show() self.Directory_selection_box.pack_start(self.Entry,gtk.TRUE,gtk.TRUE,10) button_browse=gtk.Button("Browse",gtk.STOCK_FIND) button_browse.connect("clicked",self.directory_selection) button_browse.show() self.Directory_selection_box.pack_start(button_browse,gtk.FALSE,gtk.FALSE,10) self.Directory_selection_box.show() self.bc_left_box.pack_start(self.Directory_selection_box,gtk.FALSE,gtk.FALSE,10) self.bc_left_box.show() self.bc_box.pack_start(self.bc_left_box,gtk.TRUE,gtk.TRUE,10) #right part bc_right_box=gtk.VBox(homogeneous=gtk.FALSE, spacing=10) self.Method=Method() bc_right_box.pack_start(self.Method.get_object(),gtk.FALSE,gtk.FALSE,10) self.Button_compute=gtk.Button("Compute",gtk.STOCK_EXECUTE) self.Button_compute.set_sensitive(gtk.FALSE) self.Button_compute.connect("clicked",self.compute) self.Button_compute.show() bc_right_box.pack_start(self.Button_compute,gtk.FALSE,gtk.FALSE,10) bc_right_box.show() self.bc_box.pack_start(bc_right_box,gtk.FALSE,gtk.FALSE,10) self.bc_box.show() self.bc_frame.add(self.bc_box) self.bc_frame.show() def show(self): Label = gtk.Label(self.frame_name) Label.show() self.Notebook.insert_page(self.bc_frame, Label,0) self.Notebook.set_current_page(0) def hide(self): self.Notebook.remove_page(0) class export_page: "define the export page" def directory_selection(self,widget,output=""): filew = gtk.FileSelection("Directory selection") filew.connect("destroy", lambda w: filew.destroy()) filew.ok_button.connect("clicked", self.directory_ok_sel,filew) filew.cancel_button.connect("clicked", lambda w: filew.destroy()) filew.set_filename(output) filew.show() def directory_ok_sel(self, widget,filew): self.Directory_entry.set_text(filew.get_filename()) filew.destroy() def select_export(self,widget,export): if widget.get_active(): self.Export_list.append(export) else: self.Export_list.remove(export) def export(self,widget): self.Exp.set_export_list(self.Export_list) self.Exp.set_output_file_name(os.path.join(self.Directory_entry.get_text(), self.File_name_entry.get_text())) self.Exp.export() def close(self,widget): for i in range(1,self.Notebook.get_n_pages()): child=self.Notebook.get_nth_page(i) if self.Notebook.get_tab_label(child)==widget.get_parent(): page=i #print page self.Notebook.remove_page(page) self.Notebook.queue_draw_area(0,0,-1,-1) def __init__(self,Notebook, image_path,Bc,Coeff): self.Notebook=Notebook self.Exp=Export() self.Exp.set_plot(Bc.plot()) #self.Exp.set_reg(parent.DLR.coefficient()) self.Exp.set_reg(Coeff) self.Image_path=image_path self.Export_list=[] Frame_name="Export" self.Export_frame = gtk.Frame(Frame_name) Export_box=gtk.HBox(homogeneous=gtk.FALSE, spacing=10) Left_export_box=gtk.VBox(homogeneous=gtk.FALSE, spacing=10) #begin of definition of inside left_export box Reminder_frame=gtk.Frame('Reminder') Text="File : "+ image_path +"\nMethod : " + Bc.get_method() if Bc.get_method()=="exponential": Text+="\nPrecison : "+ str(Bc.get_precision()) Reminder_label=gtk.Label(Text) Reminder_label.show() Reminder_frame.add(Reminder_label) Reminder_frame.show() Left_export_box.pack_start(Reminder_frame,gtk.FALSE,gtk.FALSE,10) Text_result_frame=gtk.Frame('Result') Text="Textural dimension : "+ str(- self.Exp.Reg[0][0]) +"\nStructural dimension : "+ str(- self.Exp.Reg[1][0]) Result_label=gtk.Label(Text) Result_label.show() Text_result_frame.add(Result_label) Text_result_frame.show() Left_export_box.pack_start(Text_result_frame,gtk.FALSE,gtk.FALSE,10) Check_frame=gtk.Frame('Export format') Check_box=gtk.VBox(homogeneous=gtk.FALSE, spacing=10) file_list=self.Exp.file_list() n=len(file_list) i_n=4 c=0 while c < n: Check_box_h=gtk.HBox(homogeneous=gtk.FALSE, spacing=10) i=0 while (i < i_n) and c