#!/usr/bin/python

# the main GUI program. Relies on fract4d libs to do the real work

# python stdlib
import sys
import os
import getopt

# gettext
import gettext
os.environ.setdefault('LANG', 'en')
if os.path.isdir('po'):
    gettext.install('gnofract4d','po')
else:
    gettext.install('gnofract4d')

# gtk
try:
    import gtk
except ImportError, err:
    print _("Can't find PyGTK. You need to install it before you can run Gnofract 4D.")
    sys.exit(1)

# check for pygtk >=1.99
pygtk_ok = True
try:
    (major,minor,patch) = gtk.pygtk_version
    if major < 2:
        if minor < 99:
            pygtk_ok = False
    import gobject
    
except Exception:
    pygtk_ok = False

if not pygtk_ok:
    print _("Sorry, your PyGTK version is too old. You need at least 1.99")
    sys.exit(1)

try:
    # we install our libs privately instead of to site-packages
    sys.path.append('/usr/lib/gnofract4d-2.4')
    # gui modules
    from fract4dgui import main_window, preferences
    
except ImportError, err:
    print _('''
Can't import a required module.
If you haven't set up Gnofract 4D yet, run './setup.py build'
Error was: '%s' ''') % err
    sys.exit(1)

# We don't use GDK threads because RedHat seem to compile pygtk
# without thread support. Grrr.
#gtk.gdk.threads_init()

def main():
    mainWindow = main_window.MainWindow()
    (opts, args) = getopt.getopt(
        sys.argv[1:],
        "p:i:j:s:q",
        [ "params=",
          "width=",
          "height=",
          "save=",
          "quit"])

    width = preferences.userPrefs.getint("display","width")
    height = preferences.userPrefs.getint("display","height")
    
    for (name, val) in opts:
        if name=="-p" or name=="--params":
            args.insert(0,val)
        elif name=="-q" or name=="--quit":
            mainWindow.quit_when_done = True
        elif name=="-s" or name=="--save":
            mainWindow.save_filename = val
        elif name=="-i" or name=="--width":
            width = int(val)
        elif name=="-j" or name=="--height":
            height = int(val)
        else:
            print "Unknown argument", name, val

    mainWindow.f.set_size(width,height)

    mainWindow.f.thaw()
    if len(args) > 0:
        mainWindow.load(args[0])
    else:
        mainWindow.on_fractal_change()
    
    gtk.main()
    
if __name__ == '__main__':
    if os.environ.get("DO_GF4D_PROFILE"):
        import hotshot
        prof = hotshot.Profile("gf4d.prof")
        prof.runcall(main)
        prof.close()
    else:
        main()
