from Tkinter import *
import tkFileDialog
import os
import arcgisscripting

gp = arcgisscripting.create()

##class gp:
##    workspace = 'C:/Carlin_GIS'
##    scratchworkspace = 'C:/Temp'
##
class GUI:
    def __init__(self):
        self.folder = None
        self.filetypes = None
        root = Tk()
        root.title('View SDM Text files')
        frame1 = Frame(root, bd=1, relief=RIDGE)
        frame1.pack(anchor=CENTER)

        """Private Sub Dir1_Change()
          On Error GoTo ErrorHandler

        85:    File1.Path = Dir1.Path ' Set file path.
        86:     If chkLR.Value = 1 Then
        87:         File1.Pattern = "sdmlr.bat;*case*.dat;*param*.dat;*cumfre*.tba;*logpol*.tba;*logco*.dat;*logpol*.out"
        88:     ElseIf chkNN.Value = 1 Then
        89:         File1.Pattern = "*train*.dta;*class*.dta;*.cen;*.pnn;*.rbn;*.fuz"
        90:     ElseIf chkOther.Value = 1 Then
        91:         File1.Pattern = "*.txt"
        92:     End If
        93:     File1.Refresh
        94:     Me.Caption = "Path: " & File1.Path

          Exit Sub
        ErrorHandler:
          HandleError True, "Dir1_Change " & c_sModuleFileName & " " & GetErrorLineNumberString(Erl), Err.Number, Err.Source, Err.Description, 4
        End Sub

        """
        v11 = IntVar()
        btn1 = Checkbutton(frame1, variable=v11, text = 'Logistic Regression files')
        def btn1cmd():
            if v11.get() == 1:
                self.filetypes = ('.dat','.tba','.out','.bat')
                self.writeList()
            else:
                self.filetypes = None
            v12.set(0); v13.set(0)
        btn1['command'] = btn1cmd
        btn1.pack( anchor=W)
        
        v12 = IntVar()
        btn2 = Checkbutton(frame1, variable=v12, text = 'Neural Network text files')
        btn2.pack( anchor=W)
        def btn2cmd():
            if v12.get() == 1:
                self.filetypes = ('.dta','.cen','.pnn','.rbn','.fuz')
                self.writeList()
            else:
                self.filetypes = None
            v11.set(0); v13.set(0)
        btn2['command'] = btn2cmd
        
        v13 = IntVar()
        btn3 = Checkbutton(frame1, variable=v13, text = 'Other text files')
        btn3.pack( anchor=W)
        def btn3cmd():
            if v13.get() == 1:
                self.filetypes = ('.txt')
                self.writeList()
            else:
                self.filetypes = None
            v11.set(0); v12.set(0)
        btn3['command'] = btn3cmd

        frame2 = Frame(root, bd=1, relief=RIDGE)
        frame2.pack(anchor=W)

        v2 = StringVar()
        btn4 = Radiobutton(frame2, variable=v2, value='workspace', text = 'Geoprocessing Workspace')
        btn4.pack(anchor=W)
        def btn4cmd():
            self.folder =  gp.workspace
            self.writeList()
        btn4['command'] = btn4cmd
        btn4.select()
        
        btn5 = Radiobutton(frame2, variable=v2, value='scratch', text = 'Geoprocessing ScratchWorkspace')
        btn5.pack(anchor=W)
        def btn5cmd():
            self.folder =  gp.scratchworkspace
            self.writeList()
        btn5['command'] = btn5cmd
        
        btn6 = Radiobutton(frame2, variable=v2, value='other', text = 'Other Folder')
        btn6.pack(anchor=W)
        self.folder = gp.workspace
        def btn6cmd():
            dirname = tkFileDialog.askdirectory(parent=root,initialdir=self.folder,title='Please select a directory')
            if len(dirname) > 0:
                self.folder = dirname
            else: self.folder =  None
            self.writeList()
        btn6['command'] = btn6cmd

        label = Label(root, text = 'Double-click a file name to view a file')
        label.pack()
        
        self.listbox = Listbox(root, width=32, selectmode=SINGLE)
        self.listbox.pack(anchor=W)

        def listboxcmd(event):
            top = Toplevel()
            
            scrollbarR = Scrollbar(top)
            scrollbarR.pack(side=RIGHT, fill=Y)          
            #scrollbarB = Scrollbar(top, orient=HORIZONTAL)
            #scrollbarB.pack(side=BOTTOM, fill=Y)
            
            text = Text(top, yscrollcommand = scrollbarR.set, wrap=WORD)
            text.pack()
            scrollbarR.config(command=text.yview)
            #scrollbarB.config(command=text.xview)
            
            #def printme(): pass
            #prtbtn = Button(top, text='Print', command = printme)
            #prtbtn.pack()
            basename = self.listbox.get(int(self.listbox.curselection()[0]))
            top.title(basename)
            path = os.path.join(self.folder, basename)
            fdin = open(path,'r')
            s = fdin.read()
            text.insert(END, s)
        self.listbox.bind("<Double-Button-1>", listboxcmd)
        
        root.mainloop()

    def writeList(self):
        if self.folder and self.filetypes:
            #print self.folder, self.filetypes
            self.listbox.delete(0, END)
            for obj in os.listdir(self.folder):
                if os.path.isdir(obj): continue
                #print os.path.splitext(obj)
                ext = os.path.splitext(obj)[1]                
                if ext and ext in self.filetypes:
                    self.listbox.insert(END, obj)
                    #print obj #os.path.join(self.folder, obj)

if __name__ == '__main__':
    GUI()
