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 config import TMP_REP
#from double_lin_reg import Double_Linear_Regression
#from box_counting import Box_Counting,test_image
#from Method import Method



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(Coeff)
        self.Image_path=image_path
        self.Export_list=[]
        
        Frame_name="Export"
        self.Export_frame = gtk.Frame(Frame_name)

        Export_box=gtk.HBox(homogeneous=False , spacing=10)

        Left_export_box=gtk.VBox(homogeneous=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,False ,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,False ,False ,10)
        
        Check_frame=gtk.Frame('Export format')
        Check_box=gtk.VBox(homogeneous=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=False , spacing=10)
            i=0
            while (i < i_n) and c<n:
                format=file_list[c]
                button = gtk.CheckButton(format)
                button.connect("toggled",  self.select_export, format)
                Check_box_h.pack_start(button, False , False , 10)
                button.show()
                i+=1
                c+=1
            Check_box_h.show()
            Check_box.pack_start(Check_box_h, False , False , 10)

        Check_box.show()
        Check_frame.add(Check_box)
        
        Left_export_box.pack_start(Check_frame,False ,False ,10)
        Check_frame.show()

        File_frame=gtk.Frame('Export file')
        File_box=gtk.VBox(homogeneous=False , spacing=10)
       # choisir le repertoire

        self.Directory_selection_box = gtk.HBox(homogeneous=False , spacing=10)
        
        self.Directory_entry = gtk.Entry()
        self.Directory_entry.set_max_length(70)
        self.Directory_entry.set_text("My_Directory")
        self.Directory_entry.show()
        
        self.Directory_selection_box.pack_start(self.Directory_entry,True,True,10)

        button_browse=gtk.Button()
        button_browse.connect("clicked",self.directory_selection)
        label=gtk.Label("Browse")
        label.show()
        button_browse.add(label)
        button_browse.show()

        self.Directory_selection_box.pack_start(button_browse,False ,False ,10)

        self.Directory_selection_box.show()        

        File_box.pack_start(self.Directory_selection_box,False ,False ,10)
    
       #choisir le nom
        self.File_name_entry = gtk.Entry()
        self.File_name_entry.set_max_length(50)
        self.File_name_entry.set_text("File_name")
        self.File_name_entry.show()

        File_box.pack_start(self.File_name_entry,False ,False ,20)

        File_box.show()
        File_frame.add(File_box)

        File_frame.show()
        Left_export_box.pack_start(File_frame,False ,False ,10)

        Button=gtk.Button()
        Button.connect("clicked",self.export)
        label=gtk.Label("Export")
        label.show()
        Button.add(label)
        Button.show()
        
        Left_export_box.pack_start(Button,False ,False ,10)
        
        #end of definition of inside left_export box
        Left_export_box.show()
        Export_box.pack_start(Left_export_box,False ,False ,10)
        Right_export_box=gtk.HBox(homogeneous=False , spacing=10)

        #begin of definition of inside right_export box

        Frame_interpretation=gtk.Frame('Interpolation Graph')
        
        self.Exp.set_export('png')
        name=os.path.join(TMP_REP,'xfracdim-' +str(os.getpid()))
        self.Exp.set_output_file_name(name) 
        if(self.Exp.check_right()):
            self.Exp.export()
                
        Result_image=gtk.Image()
        Result_image.set_from_file(name+'.png')
        Result_image.show()
        Frame_interpretation.add(Result_image)
        Frame_interpretation.show()
        
        Right_export_box.pack_start(Frame_interpretation,False ,False ,10)
        #end of definition of inside right_export box

        Right_export_box.show()
        Export_box.pack_start(Right_export_box,False ,False ,10)
        Export_box.show()
        self.Export_frame.add(Export_box)
        self.Export_frame.show()

        Label_box=gtk.HBox(homogeneous=False , spacing=10)
        Label=gtk.Label(os.path.basename(self.Image_path))
        Label.show()
        Label_box.pack_start(Label,False ,False ,10)

        Close_button=gtk.Button('X')

        Close_button.connect("clicked",self.close)
        Close_button.set_relief(False )
        Close_button.set_border_width(0)
        Close_button.show()
        
        Label_box.pack_start(Close_button,False ,False ,10)
        Label_box.show()
        
        self.Notebook.append_page(self.Export_frame, Label_box)
                    


