
import os
import pygtk
pygtk.require('2.0')
import gtk
from export import Export
import Image
import threading
from my_exceptions import *
from  message import Message
from double_lin_reg import Double_Linear_Regression
from box_counting import Box_Counting,test_image
from Method import Method
from Export_page import export_page



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,True,True,10)
            self.bc_left_box.show()
            self.bc_box.show()
            self.Button_compute.set_sensitive(True)
            
        except InvalidImage, detail:
            print "This image is not a valid one : " + detail
            self.Button_compute.set_sensitive(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)
        (method,precision)=self.Method.get_method()
        self.Bc.set_method(method)
        if precision != None:
            self.Bc.set_precision(precision)
        
        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=False , spacing=10)

        #left part
        self.bc_left_box=gtk.VBox(homogeneous=False , spacing=10)

        self.file_selection_box = gtk.HBox(homogeneous=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,True,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,False ,False ,10)

        self.file_selection_box.show()        
        self.bc_left_box.pack_start(self.file_selection_box,False ,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,True,True,10)
        self.bc_left_box.show()
        self.bc_box.pack_start(self.bc_left_box,True,True,10)

        #right part 
        bc_right_box=gtk.VBox(homogeneous=False , spacing=10)

        self.Method=Method()

        bc_right_box.pack_start(self.Method.get_object(),False ,False ,10)

        self.Button_compute=gtk.Button("Compute",gtk.STOCK_EXECUTE)
        self.Button_compute.set_sensitive(False )
        self.Button_compute.connect("clicked",self.compute)
        self.Button_compute.show()

        bc_right_box.pack_start(self.Button_compute,False ,False ,10)
        bc_right_box.show()

        self.bc_box.pack_start(bc_right_box,False ,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)



