0
 ?÷     # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id$
#
# tixwidgets.py --
#
#       For Tix, see http://tix.sourceforge.net
#
#       This is a demo program of some of the Tix widgets available in Python.
#       If you have installed Python & Tix properly, you can execute this as
#
#               % python tixwidgets.py
#

import os, os.path, sys, Tix
from Tkconstants import *
import traceback, tkMessageBox

TCL_DONT_WAIT           = 1<<1
TCL_WINDOW_EVENTS       = 1<<2
TCL_FILE_EVENTS         = 1<<3
TCL_TIMER_EVENTS        = 1<<4
TCL_IDLE_EVENTS         = 1<<5
TCL_ALL_EVENTS          = 0

class Demo:
    def __init__(self, top):
        self.root = top
        self.exit = -1

        self.dir = None                         # script directory
        self.balloon = None                     # balloon widget
        self.useBalloons = Tix.StringVar()
        self.useBalloons.set('0')
        self.statusbar = None                   # status bar widget
        self.welmsg = None                      # Msg widget
        self.welfont = ''                       # font name
        self.welsize = ''                       # font size

        progname = sys.argv[0]
        dirname = os.path.dirname(progname)
        if dirname and dirname != os.curdir:
            self.dir = dirname
            index = -1
            for i in range(len(sys.path)):
                p = sys.path[i]
                if p in ("", os.curdir):
                    index = i
            if index >= 0:
                sys.path[index] = dirname
            else:
                sys.path.insert(0, dirname)
        else:
            self.dir = os.getcwd()
        sys.path.insert(0, self.dir+'/samples')

    def MkMainMenu(self):
        top = self.root
        w = Tix.Frame(top, bd=2, relief=RAISED)
        file = Tix.Menubutton(w, text='File', underline=0, takefocus=0)
        help = Tix.Menubutton(w, text='Help', underline=0, takefocus=0)
        file.pack(side=LEFT)
        help.pack(side=RIGHT)
        fm = Tix.Menu(file, tearoff=0)
        file['menu'] = fm
        hm = Tix.Menu(help, tearoff=0)
        help['menu'] = hm

        fm.add_command(label='Exit', underline=1,
                     command = lambda self=self: self.quitcmd () )
        hm.add_checkbutton(label='BalloonHelp', underline=0, command=ToggleHelp,
                           variable=self.useBalloons)
        # The trace variable option doesn't seem to work, instead I use 'command'
        #apply(w.tk.call, ('trace', 'variable', self.useBalloons, 'w',
        #                     ToggleHelp))

        return w

    def MkMainNotebook(self):
        top = self.root
        w = Tix.NoteBook(top, ipadx=5, ipady=5, options="""
        tagPadX 6
        tagPadY 4
        borderWidth 2
        """)
        # This may be required if there is no *Background option
        top['bg'] = w['bg']

        w.add('wel', label='Welcome', underline=0,
              createcmd=lambda w=w, name='wel': MkWelcome(w, name))
        w.add('cho', label='Choosers', underline=0,
              createcmd=lambda w=w, name='cho': MkChoosers(w, name))
        w.add('scr', label='Scrolled Widgets', underline=0,
              createcmd=lambda w=w, name='scr': MkScroll(w, name))
        w.add('mgr', label='Manager Widgets', underline=0,
              createcmd=lambda w=w, name='mgr': MkManager(w, name))
        w.add('dir', label='Directory List', underline=0,
              createcmd=lambda w=w, name='dir': MkDirList(w, name))
        w.add('exp', label='Run Sample Programs', underline=0,
              createcmd=lambda w=w, name='exp': MkSample(w, name))
        return w

    def MkMainStatus(self):
        global demo
        top = self.root

        w = Tix.Frame(top, relief=Tix.RAISED, bd=1)
        demo.statusbar = Tix.Label(w, relief=Tix.SUNKEN, bd=1)
        demo.statusbar.form(padx=3, pady=3, left=0, right='%70')
        return w

    def build(self):
        root = self.root
        z = root.winfo_toplevel()
        z.wm_title('Tix Widget Demonstration')
        if z