#!/usr/bin/env python
# -*- Python -*-

# Standard python imports (needed by path munging code)
import os,sys

# Path munging
def _findHome():
    script_name = sys.argv[0]
    script_dir = os.path.dirname(script_name)

    if script_name:
	while 1:
	    script_dir = os.path.dirname(script_name)
	    if not os.path.islink(script_name): break
	    script_name = os.path.join(script_dir, os.readlink(script_name))
	    
	script_dir = os.path.join(os.getcwd(), script_dir)
	script_dir = os.path.normpath(script_dir)

	return script_dir
    else:
	file = 'Interpreter.doc'
	loc = filter(lambda d,f=file: os.path.exists(os.path.join(d,f))
		     ,sys.path)
	return loc[0]

_home_dir = _findHome()
sys.path.insert(0,_home_dir)

del _findHome
# End path munging

import getopt

optlist, args = getopt.getopt(sys.argv[1:], 'i:o')

open_file_dialog = 0
init_file = None
for opt, val in optlist:
    if opt == '-o':
	open_file_dialog = 1
    elif opt == '-i' and val:
	init_file = val

fileList = args

from ptInterpreter import *

app = Tkinter.Tk(className='Ptui')
app.withdraw()

class InterpreterWindow(Tkinter.Toplevel):
     def __init__(self,master,namespace={},logfiles=None):
	  Tkinter.Toplevel.__init__(self,master,class_ = 'Interpreter')
	  self.title(Interpreter.Name + '-' + Interpreter.Version)

	  self.interp = Interpreter(self,namespace,logfiles)

     def destroy(self):
	  self.interp.cleanup()
	  Tkinter.Toplevel.destroy(self)

win = InterpreterWindow(app)
win.withdraw()

if fileList:
    fileList = filter(lambda name: os.path.splitext(name)[1] == '.py',
		      fileList)
	
    # don't let a bad initial file stop the rest of the Interpreter
    for filename in fileList:
	buf = win.interp.bufManager.newBuffer(filename)

	if os.path.exists(filename):
	    try:
		buf.updateFromFile()
		win.interp.bufManager.buffers[buf.name] = buf
	    except:
		_print(sys.stderr,'Error in loading file: %s' % filename)

if init_file and os.path.exists(init_file):
    namespace = {}
    namespace['Tkinter'] = Tkinter
    namespace['self'] = win.interp
    namespace['open_file_dialog'] = open_file_dialog

    execfile(init_file, namespace)
    
    open_file_dialog = namespace['open_file_dialog']

# Open the ptui window
win.deiconify()

# Open the file dialog
if open_file_dialog:
    win.update_idletasks()		# req. to get dialog on top
    win.interp.openScript()

win.mainloop()
