summaryrefslogtreecommitdiff
path: root/sys/src/cmd/python/Demo/tix/samples
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
commit458120dd40db6b4df55a4e96b650e16798ef06a0 (patch)
tree8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Demo/tix/samples
parent3a742c699f6806c1145aea5149bf15de15a0afd7 (diff)
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Demo/tix/samples')
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/Balloon.py68
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/BtnBox.py44
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/CmpImg.py196
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/ComboBox.py102
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/Control.py122
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/DirList.py131
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/DirTree.py117
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/NoteBook.py119
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/OptMenu.py68
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/PanedWin.py98
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/PopMenu.py57
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/SHList1.py131
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/SHList2.py168
-rwxr-xr-xsys/src/cmd/python/Demo/tix/samples/Tree.py80
14 files changed, 1501 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Demo/tix/samples/Balloon.py b/sys/src/cmd/python/Demo/tix/samples/Balloon.py
new file mode 100755
index 000000000..e67d899fe
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/Balloon.py
@@ -0,0 +1,68 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: Balloon.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates the use of the tixBalloon widget, which provides
+# a interesting way to give help tips about elements in your user interface.
+# Your can display the help message in a "balloon" and a status bar widget.
+#
+
+import Tix
+
+TCL_ALL_EVENTS = 0
+
+def RunSample (root):
+ balloon = DemoBalloon(root)
+ balloon.mainloop()
+ balloon.destroy()
+
+class DemoBalloon:
+ def __init__(self, w):
+ self.root = w
+ self.exit = -1
+
+ z = w.winfo_toplevel()
+ z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
+ status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1)
+ status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1)
+
+ # Create two mysterious widgets that need balloon help
+ button1 = Tix.Button(w, text='Something Unexpected',
+ command=self.quitcmd)
+ button2 = Tix.Button(w, text='Something Else Unexpected')
+ button2['command'] = lambda w=button2: w.destroy()
+ button1.pack(side=Tix.TOP, expand=1)
+ button2.pack(side=Tix.TOP, expand=1)
+
+ # Create the balloon widget and associate it with the widgets that we want
+ # to provide tips for:
+ b = Tix.Balloon(w, statusbar=status)
+
+ b.bind_widget(button1, balloonmsg='Close Window',
+ statusmsg='Press this button to close this window')
+ b.bind_widget(button2, balloonmsg='Self-destruct button',
+ statusmsg='Press this button and it will destroy itself')
+
+ def quitcmd (self):
+ self.exit = 0
+
+ def mainloop(self):
+ foundEvent = 1
+ while self.exit < 0 and foundEvent > 0:
+ foundEvent = self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+ def destroy (self):
+ self.root.destroy()
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
diff --git a/sys/src/cmd/python/Demo/tix/samples/BtnBox.py b/sys/src/cmd/python/Demo/tix/samples/BtnBox.py
new file mode 100755
index 000000000..7b274971d
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/BtnBox.py
@@ -0,0 +1,44 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: BtnBox.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates the use of the tixButtonBox widget, which is a
+# group of TK buttons. You can use it to manage the buttons in a dialog box,
+# for example.
+#
+
+import Tix
+
+def RunSample(w):
+ # Create the label on the top of the dialog box
+ #
+ top = Tix.Label(w, padx=20, pady=10, bd=1, relief=Tix.RAISED,
+ anchor=Tix.CENTER, text='This dialog box is\n a demonstration of the\n tixButtonBox widget')
+
+ # Create the button box and add a few buttons in it. Set the
+ # -width of all the buttons to the same value so that they
+ # appear in the same size.
+ #
+ # Note that the -text, -underline, -command and -width options are all
+ # standard options of the button widgets.
+ #
+ box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+ box.add('ok', text='OK', underline=0, width=5,
+ command=lambda w=w: w.destroy())
+ box.add('close', text='Cancel', underline=0, width=5,
+ command=lambda w=w: w.destroy())
+ box.pack(side=Tix.BOTTOM, fill=Tix.X)
+ top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
+ root.mainloop()
diff --git a/sys/src/cmd/python/Demo/tix/samples/CmpImg.py b/sys/src/cmd/python/Demo/tix/samples/CmpImg.py
new file mode 100755
index 000000000..943dab063
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/CmpImg.py
@@ -0,0 +1,196 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: CmpImg.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates the use of the compound images: it uses compound
+# images to display a text string together with a pixmap inside
+# buttons
+#
+
+import Tix
+
+network_pixmap = """/* XPM */
+static char * netw_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 7 1",
+/* colors */
+" s None c None",
+". c #000000000000",
+"X c white",
+"o c #c000c000c000",
+"O c #404040",
+"+ c blue",
+"@ c red",
+/* pixels */
+" ",
+" .............. ",
+" .XXXXXXXXXXXX. ",
+" .XooooooooooO. ",
+" .Xo.......XoO. ",
+" .Xo.++++o+XoO. ",
+" .Xo.++++o+XoO. ",
+" .Xo.++oo++XoO. ",
+" .Xo.++++++XoO. ",
+" .Xo.+o++++XoO. ",
+" .Xo.++++++XoO. ",
+" .Xo.XXXXXXXoO. ",
+" .XooooooooooO. ",
+" .Xo@ooo....oO. ",
+" .............. .XooooooooooO. ",
+" .XXXXXXXXXXXX. .XooooooooooO. ",
+" .XooooooooooO. .OOOOOOOOOOOO. ",
+" .Xo.......XoO. .............. ",
+" .Xo.++++o+XoO. @ ",
+" .Xo.++++o+XoO. @ ",
+" .Xo.++oo++XoO. @ ",
+" .Xo.++++++XoO. @ ",
+" .Xo.+o++++XoO. @ ",
+" .Xo.++++++XoO. ..... ",
+" .Xo.XXXXXXXoO. .XXX. ",
+" .XooooooooooO.@@@@@@.X O. ",
+" .Xo@ooo....oO. .OOO. ",
+" .XooooooooooO. ..... ",
+" .XooooooooooO. ",
+" .OOOOOOOOOOOO. ",
+" .............. ",
+" "};
+"""
+
+hard_disk_pixmap = """/* XPM */
+static char * drivea_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 5 1",
+/* colors */
+" s None c None",
+". c #000000000000",
+"X c white",
+"o c #c000c000c000",
+"O c #800080008000",
+/* pixels */
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .......................... ",
+" .XXXXXXXXXXXXXXXXXXXXXXXo. ",
+" .XooooooooooooooooooooooO. ",
+" .Xooooooooooooooooo..oooO. ",
+" .Xooooooooooooooooo..oooO. ",
+" .XooooooooooooooooooooooO. ",
+" .Xoooooooo.......oooooooO. ",
+" .Xoo...................oO. ",
+" .Xoooooooo.......oooooooO. ",
+" .XooooooooooooooooooooooO. ",
+" .XooooooooooooooooooooooO. ",
+" .XooooooooooooooooooooooO. ",
+" .XooooooooooooooooooooooO. ",
+" .oOOOOOOOOOOOOOOOOOOOOOOO. ",
+" .......................... ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
+"""
+
+network_bitmap = """
+#define netw_width 32
+#define netw_height 32
+static unsigned char netw_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x02, 0x40,
+ 0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x52,
+ 0x00, 0x00, 0x0a, 0x52, 0x00, 0x00, 0x8a, 0x51, 0x00, 0x00, 0x0a, 0x50,
+ 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x50,
+ 0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x02, 0x40, 0xfe, 0x7f, 0x52, 0x55,
+ 0x02, 0x40, 0xaa, 0x6a, 0xfa, 0x5f, 0xfe, 0x7f, 0x0a, 0x50, 0xfe, 0x7f,
+ 0x0a, 0x52, 0x80, 0x00, 0x0a, 0x52, 0x80, 0x00, 0x8a, 0x51, 0x80, 0x00,
+ 0x0a, 0x50, 0x80, 0x00, 0x4a, 0x50, 0x80, 0x00, 0x0a, 0x50, 0xe0, 0x03,
+ 0x0a, 0x50, 0x20, 0x02, 0xfa, 0xdf, 0x3f, 0x03, 0x02, 0x40, 0xa0, 0x02,
+ 0x52, 0x55, 0xe0, 0x03, 0xaa, 0x6a, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00,
+ 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+"""
+
+hard_disk_bitmap = """
+#define drivea_width 32
+#define drivea_height 32
+static unsigned char drivea_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf8, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x18, 0xa8, 0xaa, 0xaa, 0x1a,
+ 0x48, 0x55, 0xd5, 0x1d, 0xa8, 0xaa, 0xaa, 0x1b, 0x48, 0x55, 0x55, 0x1d,
+ 0xa8, 0xfa, 0xaf, 0x1a, 0xc8, 0xff, 0xff, 0x1d, 0xa8, 0xfa, 0xaf, 0x1a,
+ 0x48, 0x55, 0x55, 0x1d, 0xa8, 0xaa, 0xaa, 0x1a, 0x48, 0x55, 0x55, 0x1d,
+ 0xa8, 0xaa, 0xaa, 0x1a, 0xf8, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+"""
+
+def RunSample(w):
+ w.img0 = Tix.Image('pixmap', data=network_pixmap)
+ if not w.img0:
+ w.img0 = Tix.Image('bitmap', data=network_bitmap)
+ w.img1 = Tix.Image('pixmap', data=hard_disk_pixmap)
+ if not w.img0:
+ w.img1 = Tix.Image('bitmap', data=hard_disk_bitmap)
+
+ hdd = Tix.Button(w, padx=4, pady=1, width=120)
+ net = Tix.Button(w, padx=4, pady=1, width=120)
+
+ # Create the first image: we create a line, then put a string,
+ # a space and a image into this line, from left to right.
+ # The result: we have a one-line image that consists of three
+ # individual items
+ #
+ # The tk.calls should be methods in Tix ...
+ w.hdd_img = Tix.Image('compound', window=hdd)
+ w.hdd_img.tk.call(str(w.hdd_img), 'add', 'line')
+ w.hdd_img.tk.call(str(w.hdd_img), 'add', 'text', '-text', 'Hard Disk',
+ '-underline', '0')
+ w.hdd_img.tk.call(str(w.hdd_img), 'add', 'space', '-width', '7')
+ w.hdd_img.tk.call(str(w.hdd_img), 'add', 'image', '-image', w.img1)
+
+ # Put this image into the first button
+ #
+ hdd['image'] = w.hdd_img
+
+ # Next button
+ w.net_img = Tix.Image('compound', window=net)
+ w.net_img.tk.call(str(w.net_img), 'add', 'line')
+ w.net_img.tk.call(str(w.net_img), 'add', 'text', '-text', 'Network',
+ '-underline', '0')
+ w.net_img.tk.call(str(w.net_img), 'add', 'space', '-width', '7')
+ w.net_img.tk.call(str(w.net_img), 'add', 'image', '-image', w.img0)
+
+ # Put this image into the first button
+ #
+ net['image'] = w.net_img
+
+ close = Tix.Button(w, pady=1, text='Close',
+ command=lambda w=w: w.destroy())
+
+ hdd.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1)
+ net.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1)
+ close.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1)
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
+ root.mainloop()
diff --git a/sys/src/cmd/python/Demo/tix/samples/ComboBox.py b/sys/src/cmd/python/Demo/tix/samples/ComboBox.py
new file mode 100755
index 000000000..9e052e367
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/ComboBox.py
@@ -0,0 +1,102 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: ComboBox.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates the use of the tixComboBox widget, which is close
+# to the MS Window Combo Box control.
+#
+import Tix
+
+def RunSample(w):
+ global demo_month, demo_year
+
+ top = Tix.Frame(w, bd=1, relief=Tix.RAISED)
+
+ demo_month = Tix.StringVar()
+ demo_year = Tix.StringVar()
+
+ # $w.top.a is a drop-down combo box. It is not editable -- who wants
+ # to invent new months?
+ #
+ # [Hint] The -options switch sets the options of the subwidgets.
+ # [Hint] We set the label.width subwidget option of both comboboxes to
+ # be 10 so that their labels appear to be aligned.
+ #
+ a = Tix.ComboBox(top, label="Month: ", dropdown=1,
+ command=select_month, editable=0, variable=demo_month,
+ options='listbox.height 6 label.width 10 label.anchor e')
+
+ # $w.top.b is a non-drop-down combo box. It is not editable: we provide
+ # four choices for the user, but he can enter an alternative year if he
+ # wants to.
+ #
+ # [Hint] Use the padY and anchor options of the label subwidget to
+ # align the label with the entry subwidget.
+ # [Hint] Notice that you should use padY (the NAME of the option) and not
+ # pady (the SWITCH of the option).
+ #
+ b = Tix.ComboBox(top, label="Year: ", dropdown=0,
+ command=select_year, editable=1, variable=demo_year,
+ options='listbox.height 4 label.padY 5 label.width 10 label.anchor ne')
+
+ a.pack(side=Tix.TOP, anchor=Tix.W)
+ b.pack(side=Tix.TOP, anchor=Tix.W)
+
+ a.insert(Tix.END, 'January')
+ a.insert(Tix.END, 'February')
+ a.insert(Tix.END, 'March')
+ a.insert(Tix.END, 'April')
+ a.insert(Tix.END, 'May')
+ a.insert(Tix.END, 'June')
+ a.insert(Tix.END, 'July')
+ a.insert(Tix.END, 'August')
+ a.insert(Tix.END, 'September')
+ a.insert(Tix.END, 'October')
+ a.insert(Tix.END, 'November')
+ a.insert(Tix.END, 'December')
+
+ b.insert(Tix.END, '1992')
+ b.insert(Tix.END, '1993')
+ b.insert(Tix.END, '1994')
+ b.insert(Tix.END, '1995')
+ b.insert(Tix.END, '1996')
+
+ # Use "tixSetSilent" to set the values of the combo box if you
+ # don't want your -command procedures (cbx:select_month and
+ # cbx:select_year) to be called.
+ #
+ a.set_silent('January')
+ b.set_silent('1995')
+
+ box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+ box.add('ok', text='Ok', underline=0, width=6,
+ command=lambda w=w: ok_command(w))
+ box.add('cancel', text='Cancel', underline=0, width=6,
+ command=lambda w=w: w.destroy())
+ box.pack(side=Tix.BOTTOM, fill=Tix.X)
+ top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+
+def select_month(event=None):
+ # tixDemo:Status "Month = %s" % demo_month.get()
+ pass
+
+def select_year(event=None):
+ # tixDemo:Status "Year = %s" % demo_year.get()
+ pass
+
+def ok_command(w):
+ # tixDemo:Status "Month = %s, Year= %s" % (demo_month.get(), demo_year.get())
+ w.destroy()
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
+ root.mainloop()
diff --git a/sys/src/cmd/python/Demo/tix/samples/Control.py b/sys/src/cmd/python/Demo/tix/samples/Control.py
new file mode 100755
index 000000000..5d846326d
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/Control.py
@@ -0,0 +1,122 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: Control.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates the use of the tixControl widget -- it is an
+# entry widget with up/down arrow buttons. You can use the arrow buttons
+# to adjust the value inside the entry widget.
+#
+# This example program uses three Control widgets. One lets you select
+# integer values; one lets you select floating point values and the last
+# one lets you select a few names.
+
+import Tix
+
+TCL_ALL_EVENTS = 0
+
+def RunSample (root):
+ control = DemoControl(root)
+ control.mainloop()
+ control.destroy()
+
+class DemoControl:
+ def __init__(self, w):
+ self.root = w
+ self.exit = -1
+
+ global demo_maker, demo_thrust, demo_num_engines
+
+ demo_maker = Tix.StringVar()
+ demo_thrust = Tix.DoubleVar()
+ demo_num_engines = Tix.IntVar()
+ demo_maker.set('P&W')
+ demo_thrust.set(20000.0)
+ demo_num_engines.set(2)
+
+ top = Tix.Frame(w, bd=1, relief=Tix.RAISED)
+
+ # $w.top.a allows only integer values
+ #
+ # [Hint] The -options switch sets the options of the subwidgets.
+ # [Hint] We set the label.width subwidget option of the Controls to
+ # be 16 so that their labels appear to be aligned.
+ #
+ a = Tix.Control(top, label='Number of Engines: ', integer=1,
+ variable=demo_num_engines, min=1, max=4,
+ options='entry.width 10 label.width 20 label.anchor e')
+
+ b = Tix.Control(top, label='Thrust: ', integer=0,
+ min='10000.0', max='60000.0', step=500,
+ variable=demo_thrust,
+ options='entry.width 10 label.width 20 label.anchor e')
+
+ c = Tix.Control(top, label='Engine Maker: ', value='P&W',
+ variable=demo_maker,
+ options='entry.width 10 label.width 20 label.anchor e')
+
+ # We can't define these in the init because the widget 'c' doesn't
+ # exist yet and we need to reference it
+ c['incrcmd'] = lambda w=c: adjust_maker(w, 1)
+ c['decrcmd'] = lambda w=c: adjust_maker(w, -1)
+ c['validatecmd'] = lambda w=c: validate_maker(w)
+
+ a.pack(side=Tix.TOP, anchor=Tix.W)
+ b.pack(side=Tix.TOP, anchor=Tix.W)
+ c.pack(side=Tix.TOP, anchor=Tix.W)
+
+ box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+ box.add('ok', text='Ok', underline=0, width=6,
+ command=self.okcmd)
+ box.add('cancel', text='Cancel', underline=0, width=6,
+ command=self.quitcmd)
+ box.pack(side=Tix.BOTTOM, fill=Tix.X)
+ top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+
+ def okcmd (self):
+ # tixDemo:Status "Selected %d of %s engines each of thrust %d", (demo_num_engines.get(), demo_maker.get(), demo_thrust.get())
+ self.quitcmd()
+
+ def quitcmd (self):
+ self.exit = 0
+
+ def mainloop(self):
+ while self.exit < 0:
+ self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+ def destroy (self):
+ self.root.destroy()
+
+maker_list = ['P&W', 'GE', 'Rolls Royce']
+
+def adjust_maker(w, inc):
+ i = maker_list.index(demo_maker.get())
+ i = i + inc
+ if i >= len(maker_list):
+ i = 0
+ elif i < 0:
+ i = len(maker_list) - 1
+
+ # In Tcl/Tix we should return the string maker_list[i]. We can't
+ # do that in Tkinter so we set the global variable. (This works).
+ demo_maker.set(maker_list[i])
+
+def validate_maker(w):
+ try:
+ i = maker_list.index(demo_maker.get())
+ except ValueError:
+ # Works here though. Why ? Beats me.
+ return maker_list[0]
+ # Works here though. Why ? Beats me.
+ return maker_list[i]
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
diff --git a/sys/src/cmd/python/Demo/tix/samples/DirList.py b/sys/src/cmd/python/Demo/tix/samples/DirList.py
new file mode 100755
index 000000000..f88b120b6
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/DirList.py
@@ -0,0 +1,131 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: DirList.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program using tixwish.
+
+# This file demonstrates the use of the tixDirList widget -- you can
+# use it for the user to select a directory. For example, an installation
+# program can use the tixDirList widget to ask the user to select the
+# installation directory for an application.
+#
+
+import Tix, os, copy
+from Tkconstants import *
+
+TCL_ALL_EVENTS = 0
+
+def RunSample (root):
+ dirlist = DemoDirList(root)
+ dirlist.mainloop()
+ dirlist.destroy()
+
+class DemoDirList:
+ def __init__(self, w):
+ self.root = w
+ self.exit = -1
+
+ z = w.winfo_toplevel()
+ z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
+ # Create the tixDirList and the tixLabelEntry widgets on the on the top
+ # of the dialog box
+
+ # bg = root.tk.eval('tix option get bg')
+ # adding bg=bg crashes Windows pythonw tk8.3.3 Python 2.1.0
+
+ top = Tix.Frame( w, relief=RAISED, bd=1)
+
+ # Create the DirList widget. By default it will show the current
+ # directory
+ #
+ #
+ top.dir = Tix.DirList(top)
+ top.dir.hlist['width'] = 40
+
+ # When the user presses the ".." button, the selected directory
+ # is "transferred" into the entry widget
+ #
+ top.btn = Tix.Button(top, text = " >> ", pady = 0)
+
+ # We use a LabelEntry to hold the installation directory. The user
+ # can choose from the DirList widget, or he can type in the directory
+ # manually
+ #
+ top.ent = Tix.LabelEntry(top, label="Installation Directory:",
+ labelside = 'top',
+ options = '''
+ entry.width 40
+ label.anchor w
+ ''')
+
+ font = self.root.tk.eval('tix option get fixed_font')
+ # font = self.root.master.tix_option_get('fixed_font')
+ top.ent.entry['font'] = font
+
+ self.dlist_dir = copy.copy(os.curdir)
+ # This should work setting the entry's textvariable
+ top.ent.entry['textvariable'] = self.dlist_dir
+ top.btn['command'] = lambda dir=top.dir, ent=top.ent, self=self: \
+ self.copy_name(dir,ent)
+
+ # top.ent.entry.insert(0,'tix'+repr(self))
+ top.ent.entry.bind('<Return>', lambda self=self: self.okcmd () )
+
+ top.pack( expand='yes', fill='both', side=TOP)
+ top.dir.pack( expand=1, fill=BOTH, padx=4, pady=4, side=LEFT)
+ top.btn.pack( anchor='s', padx=4, pady=4, side=LEFT)
+ top.ent.pack( expand=1, fill=X, anchor='s', padx=4, pady=4, side=LEFT)
+
+ # Use a ButtonBox to hold the buttons.
+ #
+ box = Tix.ButtonBox (w, orientation='horizontal')
+ box.add ('ok', text='Ok', underline=0, width=6,
+ command = lambda self=self: self.okcmd () )
+ box.add ('cancel', text='Cancel', underline=0, width=6,
+ command = lambda self=self: self.quitcmd () )
+
+ box.pack( anchor='s', fill='x', side=BOTTOM)
+
+ def copy_name (self, dir, ent):
+ # This should work as it is the entry's textvariable
+ self.dlist_dir = dir.cget('value')
+ # but it isn't so I'll do it manually
+ ent.entry.delete(0,'end')
+ ent.entry.insert(0, self.dlist_dir)
+
+ def okcmd (self):
+ # tixDemo:Status "You have selected the directory" + self.dlist_dir
+ self.quitcmd()
+
+ def quitcmd (self):
+ self.exit = 0
+
+ def mainloop(self):
+ while self.exit < 0:
+ self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+ def destroy (self):
+ self.root.destroy()
+
+# This "if" statement makes it possible to run this script file inside or
+# outside of the main demo program "tixwidgets.py".
+#
+if __name__== '__main__' :
+ import tkMessageBox, traceback
+
+ try:
+ root=Tix.Tk()
+ RunSample(root)
+ except:
+ t, v, tb = sys.exc_info()
+ text = "Error running the demo script:\n"
+ for line in traceback.format_exception(t,v,tb):
+ text = text + line + '\n'
+ d = tkMessageBox.showerror ( 'Tix Demo Error', text)
diff --git a/sys/src/cmd/python/Demo/tix/samples/DirTree.py b/sys/src/cmd/python/Demo/tix/samples/DirTree.py
new file mode 100755
index 000000000..d25524dc9
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/DirTree.py
@@ -0,0 +1,117 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: DirTree.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program using tixwish.
+
+# This file demonstrates the use of the tixDirTree widget -- you can
+# use it for the user to select a directory. For example, an installation
+# program can use the tixDirTree widget to ask the user to select the
+# installation directory for an application.
+#
+
+import Tix, os, copy
+from Tkconstants import *
+
+TCL_ALL_EVENTS = 0
+
+def RunSample (root):
+ dirtree = DemoDirTree(root)
+ dirtree.mainloop()
+ dirtree.destroy()
+
+class DemoDirTree:
+ def __init__(self, w):
+ self.root = w
+ self.exit = -1
+
+ z = w.winfo_toplevel()
+ z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
+ # Create the tixDirTree and the tixLabelEntry widgets on the on the top
+ # of the dialog box
+
+ # bg = root.tk.eval('tix option get bg')
+ # adding bg=bg crashes Windows pythonw tk8.3.3 Python 2.1.0
+
+ top = Tix.Frame( w, relief=RAISED, bd=1)
+
+ # Create the DirTree widget. By default it will show the current
+ # directory
+ #
+ #
+ top.dir = Tix.DirTree(top)
+ top.dir.hlist['width'] = 40
+
+ # When the user presses the ".." button, the selected directory
+ # is "transferred" into the entry widget
+ #
+ top.btn = Tix.Button(top, text = " >> ", pady = 0)
+
+ # We use a LabelEntry to hold the installation directory. The user
+ # can choose from the DirTree widget, or he can type in the directory
+ # manually
+ #
+ top.ent = Tix.LabelEntry(top, label="Installation Directory:",
+ labelside = 'top',
+ options = '''
+ entry.width 40
+ label.anchor w
+ ''')
+
+ self.dlist_dir = copy.copy(os.curdir)
+ top.ent.entry['textvariable'] = self.dlist_dir
+ top.btn['command'] = lambda dir=top.dir, ent=top.ent, self=self: \
+ self.copy_name(dir,ent)
+
+ top.ent.entry.bind('<Return>', lambda self=self: self.okcmd () )
+
+ top.pack( expand='yes', fill='both', side=TOP)
+ top.dir.pack( expand=1, fill=BOTH, padx=4, pady=4, side=LEFT)
+ top.btn.pack( anchor='s', padx=4, pady=4, side=LEFT)
+ top.ent.pack( expand=1, fill=X, anchor='s', padx=4, pady=4, side=LEFT)
+
+ # Use a ButtonBox to hold the buttons.
+ #
+ box = Tix.ButtonBox (w, orientation='horizontal')
+ box.add ('ok', text='Ok', underline=0, width=6,
+ command = lambda self=self: self.okcmd () )
+ box.add ('cancel', text='Cancel', underline=0, width=6,
+ command = lambda self=self: self.quitcmd () )
+
+ box.pack( anchor='s', fill='x', side=BOTTOM)
+
+ def copy_name (self, dir, ent):
+ # This should work as it is the entry's textvariable
+ self.dlist_dir = dir.cget('value')
+ # but it isn't so I'll do it manually
+ ent.entry.delete(0,'end')
+ ent.entry.insert(0, self.dlist_dir)
+
+ def okcmd (self):
+ # tixDemo:Status "You have selected the directory" + self.dlist_dir
+ self.quitcmd()
+
+ def quitcmd (self):
+ # tixDemo:Status "You have selected the directory" + self.dlist_dir
+ self.exit = 0
+
+ def mainloop(self):
+ while self.exit < 0:
+ self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+ def destroy (self):
+ self.root.destroy()
+
+# This "if" statement makes it possible to run this script file inside or
+# outside of the main demo program "tixwidgets.py".
+#
+if __name__== '__main__' :
+ root=Tix.Tk()
+ RunSample(root)
diff --git a/sys/src/cmd/python/Demo/tix/samples/NoteBook.py b/sys/src/cmd/python/Demo/tix/samples/NoteBook.py
new file mode 100755
index 000000000..adab91a4c
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/NoteBook.py
@@ -0,0 +1,119 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: NoteBook.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates the use of the tixNoteBook widget, which allows
+# you to lay out your interface using a "notebook" metaphore
+#
+import Tix
+
+def RunSample(w):
+ global root
+ root = w
+
+ # We use these options to set the sizes of the subwidgets inside the
+ # notebook, so that they are well-aligned on the screen.
+ prefix = Tix.OptionName(w)
+ if prefix:
+ prefix = '*'+prefix
+ else:
+ prefix = ''
+ w.option_add(prefix+'*TixControl*entry.width', 10)
+ w.option_add(prefix+'*TixControl*label.width', 18)
+ w.option_add(prefix+'*TixControl*label.anchor', Tix.E)
+ w.option_add(prefix+'*TixNoteBook*tagPadX', 8)
+
+ # Create the notebook widget and set its backpagecolor to gray.
+ # Note that the -backpagecolor option belongs to the "nbframe"
+ # subwidget.
+ nb = Tix.NoteBook(w, name='nb', ipadx=6, ipady=6)
+ nb['bg'] = 'gray'
+ nb.nbframe['backpagecolor'] = 'gray'
+
+ # Create the two tabs on the notebook. The -underline option
+ # puts a underline on the first character of the labels of the tabs.
+ # Keyboard accelerators will be defined automatically according
+ # to the underlined character.
+ nb.add('hard_disk', label="Hard Disk", underline=0)
+ nb.add('network', label="Network", underline=0)
+
+ nb.pack(expand=1, fill=Tix.BOTH, padx=5, pady=5 ,side=Tix.TOP)
+
+ #----------------------------------------
+ # Create the first page
+ #----------------------------------------
+ # Create two frames: one for the common buttons, one for the
+ # other widgets
+ #
+ tab=nb.hard_disk
+ f = Tix.Frame(tab)
+ common = Tix.Frame(tab)
+
+ f.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1)
+ common.pack(side=Tix.RIGHT, padx=2, fill=Tix.Y)
+
+ a = Tix.Control(f, value=12, label='Access time: ')
+ w = Tix.Control(f, value=400, label='Write Throughput: ')
+ r = Tix.Control(f, value=400, label='Read Throughput: ')
+ c = Tix.Control(f, value=1021, label='Capacity: ')
+
+ a.pack(side=Tix.TOP, padx=20, pady=2)
+ w.pack(side=Tix.TOP, padx=20, pady=2)
+ r.pack(side=Tix.TOP, padx=20, pady=2)
+ c.pack(side=Tix.TOP, padx=20, pady=2)
+
+ # Create the common buttons
+ createCommonButtons(common)
+
+ #----------------------------------------
+ # Create the second page
+ #----------------------------------------
+
+ tab = nb.network
+
+ f = Tix.Frame(tab)
+ common = Tix.Frame(tab)
+
+ f.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1)
+ common.pack(side=Tix.RIGHT, padx=2, fill=Tix.Y)
+
+ a = Tix.Control(f, value=12, label='Access time: ')
+ w = Tix.Control(f, value=400, label='Write Throughput: ')
+ r = Tix.Control(f, value=400, label='Read Throughput: ')
+ c = Tix.Control(f, value=1021, label='Capacity: ')
+ u = Tix.Control(f, value=10, label='Users: ')
+
+ a.pack(side=Tix.TOP, padx=20, pady=2)
+ w.pack(side=Tix.TOP, padx=20, pady=2)
+ r.pack(side=Tix.TOP, padx=20, pady=2)
+ c.pack(side=Tix.TOP, padx=20, pady=2)
+ u.pack(side=Tix.TOP, padx=20, pady=2)
+
+ createCommonButtons(common)
+
+def doDestroy():
+ global root
+ root.destroy()
+
+def createCommonButtons(master):
+ ok = Tix.Button(master, name='ok', text='OK', width=6,
+ command=doDestroy)
+ cancel = Tix.Button(master, name='cancel',
+ text='Cancel', width=6,
+ command=doDestroy)
+
+ ok.pack(side=Tix.TOP, padx=2, pady=2)
+ cancel.pack(side=Tix.TOP, padx=2, pady=2)
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
+ root.mainloop()
diff --git a/sys/src/cmd/python/Demo/tix/samples/OptMenu.py b/sys/src/cmd/python/Demo/tix/samples/OptMenu.py
new file mode 100755
index 000000000..c9faca7aa
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/OptMenu.py
@@ -0,0 +1,68 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: OptMenu.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates the use of the tixOptionMenu widget -- you can
+# use it for the user to choose from a fixed set of options
+#
+import Tix
+
+options = {'text':'Plain Text', 'post':'PostScript', 'html':'HTML',
+ 'tex':'LaTeX', 'rtf':'Rich Text Format'}
+
+def RunSample(w):
+ global demo_opt_from, demo_opt_to
+
+ demo_opt_from = Tix.StringVar()
+ demo_opt_to = Tix.StringVar()
+
+ top = Tix.Frame(w, bd=1, relief=Tix.RAISED)
+
+ from_file = Tix.OptionMenu(top, label="From File Format : ",
+ variable=demo_opt_from,
+ options = 'label.width 19 label.anchor e menubutton.width 15')
+
+ to_file = Tix.OptionMenu(top, label="To File Format : ",
+ variable=demo_opt_to,
+ options='label.width 19 label.anchor e menubutton.width 15')
+
+ # Add the available options to the two OptionMenu widgets
+ #
+ # [Hint] You have to add the options first before you set the
+ # global variables "demo_opt_from" and "demo_opt_to". Otherwise
+ # the OptionMenu widget will complain about "unknown options"!
+ #
+ for opt in options.keys():
+ from_file.add_command(opt, label=options[opt])
+ to_file.add_command(opt, label=options[opt])
+
+ demo_opt_from.set('html')
+ demo_opt_to.set('post')
+
+ from_file.pack(side=Tix.TOP, anchor=Tix.W, pady=3, padx=6)
+ to_file.pack(side=Tix.TOP, anchor=Tix.W, pady=3, padx=6)
+
+ box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+ box.add('ok', text='Ok', underline=0, width=6,
+ command=lambda w=w: ok_command(w))
+ box.add('cancel', text='Cancel', underline=0, width=6,
+ command=lambda w=w: w.destroy())
+ box.pack(side=Tix.BOTTOM, fill=Tix.X)
+ top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+
+def ok_command(w):
+ # tixDemo:Status "Convert file from %s to %s" % ( demo_opt_from.get(), demo_opt_to.get())
+ w.destroy()
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
+ root.mainloop()
diff --git a/sys/src/cmd/python/Demo/tix/samples/PanedWin.py b/sys/src/cmd/python/Demo/tix/samples/PanedWin.py
new file mode 100755
index 000000000..6f5f94720
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/PanedWin.py
@@ -0,0 +1,98 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: PanedWin.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates the use of the tixPanedWindow widget. This program
+# is a dummy news reader: the user can adjust the sizes of the list
+# of artical names and the size of the text widget that shows the body
+# of the article.
+
+import Tix
+
+TCL_ALL_EVENTS = 0
+
+def RunSample (root):
+ panedwin = DemoPanedwin(root)
+ panedwin.mainloop()
+ panedwin.destroy()
+
+class DemoPanedwin:
+ def __init__(self, w):
+ self.root = w
+ self.exit = -1
+
+ z = w.winfo_toplevel()
+ z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
+ group = Tix.LabelEntry(w, label='Newsgroup:', options='entry.width 25')
+ group.entry.insert(0,'comp.lang.python')
+ pane = Tix.PanedWindow(w, orientation='vertical')
+
+ p1 = pane.add('list', min=70, size=100)
+ p2 = pane.add('text', min=70)
+ list = Tix.ScrolledListBox(p1)
+ list.listbox['width'] = 80
+ list.listbox['height'] = 5
+ text = Tix.ScrolledText(p2)
+ text.text['width'] = 80
+ text.text['height'] = 20
+
+ list.listbox.insert(Tix.END, " 12324 Re: Tkinter is good for your health")
+ list.listbox.insert(Tix.END, "+ 12325 Re: Tkinter is good for your health")
+ list.listbox.insert(Tix.END, "+ 12326 Re: Tix is even better for your health (Was: Tkinter is good...)")
+ list.listbox.insert(Tix.END, " 12327 Re: Tix is even better for your health (Was: Tkinter is good...)")
+ list.listbox.insert(Tix.END, "+ 12328 Re: Tix is even better for your health (Was: Tkinter is good...)")
+ list.listbox.insert(Tix.END, " 12329 Re: Tix is even better for your health (Was: Tkinter is good...)")
+ list.listbox.insert(Tix.END, "+ 12330 Re: Tix is even better for your health (Was: Tkinter is good...)")
+
+ text.text['bg'] = list.listbox['bg']
+ text.text['wrap'] = 'none'
+ text.text.insert(Tix.END, """
+ Mon, 19 Jun 1995 11:39:52 comp.lang.python Thread 34 of 220
+ Lines 353 A new way to put text and bitmaps together iNo responses
+ ioi@blue.seas.upenn.edu Ioi K. Lam at University of Pennsylvania
+
+ Hi,
+
+ I have implemented a new image type called "compound". It allows you
+ to glue together a bunch of bitmaps, images and text strings together
+ to form a bigger image. Then you can use this image with widgets that
+ support the -image option. For example, you can display a text string string
+ together with a bitmap, at the same time, inside a TK button widget.
+ """)
+ text.text['state'] = 'disabled'
+
+ list.pack(expand=1, fill=Tix.BOTH, padx=4, pady=6)
+ text.pack(expand=1, fill=Tix.BOTH, padx=4, pady=6)
+
+ group.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH)
+ pane.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH, expand=1)
+
+ box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+ box.add('ok', text='Ok', underline=0, width=6,
+ command=self.quitcmd)
+ box.add('cancel', text='Cancel', underline=0, width=6,
+ command=self.quitcmd)
+ box.pack(side=Tix.BOTTOM, fill=Tix.X)
+
+ def quitcmd (self):
+ self.exit = 0
+
+ def mainloop(self):
+ while self.exit < 0:
+ self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+ def destroy (self):
+ self.root.destroy()
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
diff --git a/sys/src/cmd/python/Demo/tix/samples/PopMenu.py b/sys/src/cmd/python/Demo/tix/samples/PopMenu.py
new file mode 100755
index 000000000..db3d7ab53
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/PopMenu.py
@@ -0,0 +1,57 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: PopMenu.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program using tixwish.
+
+# This file demonstrates the use of the tixPopupMenu widget.
+#
+import Tix
+
+def RunSample(w):
+ # We create the frame and the button, then we'll bind the PopupMenu
+ # to both widgets. The result is, when you press the right mouse
+ # button over $w.top or $w.top.but, the PopupMenu will come up.
+ #
+ top = Tix.Frame(w, relief=Tix.RAISED, bd=1)
+ but = Tix.Button(top, text='Press the right mouse button over this button or its surrounding area')
+ but.pack(expand=1, fill=Tix.BOTH, padx=50, pady=50)
+
+ p = Tix.PopupMenu(top, title='Popup Test')
+ p.bind_widget(top)
+ p.bind_widget(but)
+
+ # Set the entries inside the PopupMenu widget.
+ # [Hint] You have to manipulate the "menu" subwidget.
+ # $w.top.p itself is NOT a menu widget.
+ # [Hint] Watch carefully how the sub-menu is created
+ #
+ p.menu.add_command(label='Desktop', underline=0)
+ p.menu.add_command(label='Select', underline=0)
+ p.menu.add_command(label='Find', underline=0)
+ p.menu.add_command(label='System', underline=1)
+ p.menu.add_command(label='Help', underline=0)
+ m1 = Tix.Menu(p.menu)
+ m1.add_command(label='Hello')
+ p.menu.add_cascade(label='More', menu=m1)
+
+ but.pack(side=Tix.TOP, padx=40, pady=50)
+
+ box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+ box.add('ok', text='Ok', underline=0, width=6,
+ command=lambda w=w: w.destroy())
+ box.add('cancel', text='Cancel', underline=0, width=6,
+ command=lambda w=w: w.destroy())
+ box.pack(side=Tix.BOTTOM, fill=Tix.X)
+ top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
+ root.mainloop()
diff --git a/sys/src/cmd/python/Demo/tix/samples/SHList1.py b/sys/src/cmd/python/Demo/tix/samples/SHList1.py
new file mode 100755
index 000000000..22e44aaf4
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/SHList1.py
@@ -0,0 +1,131 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: SHList1.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program using tixwish.
+
+# This file demonstrates the use of the tixScrolledHList widget.
+#
+
+import Tix
+
+TCL_ALL_EVENTS = 0
+
+def RunSample (root):
+ shlist = DemoSHList(root)
+ shlist.mainloop()
+ shlist.destroy()
+
+class DemoSHList:
+ def __init__(self, w):
+ self.root = w
+ self.exit = -1
+
+ z = w.winfo_toplevel()
+ z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
+ # We create the frame and the ScrolledHList widget
+ # at the top of the dialog box
+ #
+ top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
+
+ # Put a simple hierachy into the HList (two levels). Use colors and
+ # separator widgets (frames) to make the list look fancy
+ #
+ top.a = Tix.ScrolledHList(top)
+ top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
+
+ # This is our little relational database
+ #
+ bosses = [
+ ('jeff', 'Jeff Waxman'),
+ ('john', 'John Lee'),
+ ('peter', 'Peter Kenson')
+ ]
+
+ employees = [
+ ('alex', 'john', 'Alex Kellman'),
+ ('alan', 'john', 'Alan Adams'),
+ ('andy', 'peter', 'Andreas Crawford'),
+ ('doug', 'jeff', 'Douglas Bloom'),
+ ('jon', 'peter', 'Jon Baraki'),
+ ('chris', 'jeff', 'Chris Geoffrey'),
+ ('chuck', 'jeff', 'Chuck McLean')
+ ]
+
+ hlist=top.a.hlist
+
+ # Let configure the appearance of the HList subwidget
+ #
+ hlist.config( separator='.', width=25, drawbranch=0, indent=10)
+
+ count=0
+ for boss,name in bosses :
+ if count :
+ f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150,
+ bd=2, relief=Tix.SUNKEN )
+
+ hlist.add_child( itemtype=Tix.WINDOW,
+ window=f, state=Tix.DISABLED )
+
+ hlist.add(boss, itemtype=Tix.TEXT, text=name)
+ count = count+1
+
+
+ for person,boss,name in employees :
+ # '.' is the separator character we chose above
+ #
+ key= boss + '.' + person
+ # ^^^^ ^^^^^^
+ # parent entryPath / child's name
+
+ hlist.add( key, text=name )
+
+ # [Hint] Make sure the keys (e.g. 'boss.person') you choose
+ # are unique names. If you cannot be sure of this (because of
+ # the structure of your database, e.g.) you can use the
+ # "add_child" command instead:
+ #
+ # hlist.addchild( boss, text=name)
+ # ^^^^
+ # parent entryPath
+
+
+ # Use a ButtonBox to hold the buttons.
+ #
+ box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
+ box.add( 'ok', text='Ok', underline=0, width=6,
+ command = self.okcmd)
+
+ box.add( 'cancel', text='Cancel', underline=0, width=6,
+ command = self.quitcmd)
+
+ box.pack( side=Tix.BOTTOM, fill=Tix.X)
+ top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 )
+
+ def okcmd (self):
+ self.quitcmd()
+
+ def quitcmd (self):
+ self.exit = 0
+
+ def mainloop(self):
+ while self.exit < 0:
+ self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+ def destroy (self):
+ self.root.destroy()
+
+
+# This "if" statement makes it possible to run this script file inside or
+# outside of the main demo program "tixwidgets.py".
+#
+if __name__== '__main__' :
+ root=Tix.Tk()
+ RunSample(root)
diff --git a/sys/src/cmd/python/Demo/tix/samples/SHList2.py b/sys/src/cmd/python/Demo/tix/samples/SHList2.py
new file mode 100755
index 000000000..1492242b3
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/SHList2.py
@@ -0,0 +1,168 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: SHList2.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidget": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program using tixwish.
+
+# This file demonstrates how to use multiple columns and multiple styles
+# in the tixHList widget
+#
+# In a tixHList widget, you can have one ore more columns.
+#
+
+import Tix
+
+TCL_ALL_EVENTS = 0
+
+def RunSample (root):
+ shlist = DemoSHList(root)
+ shlist.mainloop()
+ shlist.destroy()
+
+class DemoSHList:
+ def __init__(self, w):
+ self.root = w
+ self.exit = -1
+
+ z = w.winfo_toplevel()
+ z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
+ # We create the frame and the ScrolledHList widget
+ # at the top of the dialog box
+ #
+ top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
+
+ # Put a simple hierachy into the HList (two levels). Use colors and
+ # separator widgets (frames) to make the list look fancy
+ #
+ top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' )
+ top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
+
+ hlist=top.a.hlist
+
+ # Create the title for the HList widget
+ # >> Notice that we have set the hlist.header subwidget option to true
+ # so that the header is displayed
+ #
+
+ boldfont=hlist.tk.call('tix','option','get','bold_font')
+
+ # First some styles for the headers
+ style={}
+ style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist,
+ anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )
+
+ hlist.header_create(0, itemtype=Tix.TEXT, text='Name',
+ style=style['header'])
+ hlist.header_create(1, itemtype=Tix.TEXT, text='Position',
+ style=style['header'])
+
+ # Notice that we use 3 columns in the hlist widget. This way when the user
+ # expands the windows wide, the right side of the header doesn't look
+ # chopped off. The following line ensures that the 3 column header is
+ # not shown unless the hlist window is wider than its contents.
+ #
+ hlist.column_width(2,0)
+
+ # This is our little relational database
+ #
+ boss = ('doe', 'John Doe', 'Director')
+
+ managers = [
+ ('jeff', 'Jeff Waxman', 'Manager'),
+ ('john', 'John Lee', 'Manager'),
+ ('peter', 'Peter Kenson', 'Manager')
+ ]
+
+ employees = [
+ ('alex', 'john', 'Alex Kellman', 'Clerk'),
+ ('alan', 'john', 'Alan Adams', 'Clerk'),
+ ('andy', 'peter', 'Andreas Crawford', 'Salesman'),
+ ('doug', 'jeff', 'Douglas Bloom', 'Clerk'),
+ ('jon', 'peter', 'Jon Baraki', 'Salesman'),
+ ('chris', 'jeff', 'Chris Geoffrey', 'Clerk'),
+ ('chuck', 'jeff', 'Chuck McLean', 'Cleaner')
+ ]
+
+ style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)
+
+ style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)
+
+ style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)
+
+ style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)
+
+ # Let configure the appearance of the HList subwidget
+ #
+ hlist.config(separator='.', width=25, drawbranch=0, indent=10)
+ hlist.column_width(0, chars=20)
+
+ # Create the boss
+ #
+ hlist.add ('.', itemtype=Tix.TEXT, text=boss[1],
+ style=style['mgr_name'])
+ hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2],
+ style=style['mgr_posn'])
+
+ # Create the managers
+ #
+
+ for key,name,posn in managers :
+ e= '.'+ key
+ hlist.add(e, itemtype=Tix.TEXT, text=name,
+ style=style['mgr_name'])
+ hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn,
+ style=style['mgr_posn'])
+
+
+ for key,mgr,name,posn in employees :
+ # "." is the separator character we chose above
+
+ entrypath = '.' + mgr + '.' + key
+
+ # ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
+ # parent entryPath / child's name
+
+ hlist.add(entrypath, text=name, style=style['empl_name'])
+ hlist.item_create(entrypath, 1, itemtype=Tix.TEXT,
+ text = posn, style = style['empl_posn'] )
+
+
+ # Use a ButtonBox to hold the buttons.
+ #
+ box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
+ box.add( 'ok', text='Ok', underline=0, width=6,
+ command = self.okcmd )
+
+ box.add( 'cancel', text='Cancel', underline=0, width=6,
+ command = self.quitcmd )
+
+ box.pack( side=Tix.BOTTOM, fill=Tix.X)
+ top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 )
+
+ def okcmd (self):
+ self.quitcmd()
+
+ def quitcmd (self):
+ self.exit = 0
+
+ def mainloop(self):
+ while self.exit < 0:
+ self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+ def destroy (self):
+ self.root.destroy()
+
+
+# This "if" statement makes it possible to run this script file inside or
+# outside of the main demo program "tixwidgets.py".
+#
+if __name__== '__main__' :
+ root=Tix.Tk()
+ RunSample(root)
diff --git a/sys/src/cmd/python/Demo/tix/samples/Tree.py b/sys/src/cmd/python/Demo/tix/samples/Tree.py
new file mode 100755
index 000000000..5b66daab7
--- /dev/null
+++ b/sys/src/cmd/python/Demo/tix/samples/Tree.py
@@ -0,0 +1,80 @@
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+# $Id: Tree.py 36560 2004-07-18 06:16:08Z tim_one $
+#
+# Tix Demostration Program
+#
+# This sample program is structured in such a way so that it can be
+# executed from the Tix demo program "tixwidgets.py": it must have a
+# procedure called "RunSample". It should also have the "if" statment
+# at the end of this file so that it can be run as a standalone
+# program.
+
+# This file demonstrates how to use the TixTree widget to display
+# dynamic hierachical data (the files in the Unix file system)
+#
+
+import Tix, os
+
+def RunSample(w):
+ top = Tix.Frame(w, relief=Tix.RAISED, bd=1)
+ tree = Tix.Tree(top, options='separator "/"')
+ tree.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.LEFT)
+ tree['opencmd'] = lambda dir=None, w=tree: opendir(w, dir)
+
+ # The / directory is added in the "open" mode. The user can open it
+ # and then browse its subdirectories ...
+ adddir(tree, "/")
+
+ box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+ box.add('ok', text='Ok', underline=0, command=w.destroy, width=6)
+ box.add('cancel', text='Cancel', underline=0, command=w.destroy, width=6)
+ box.pack(side=Tix.BOTTOM, fill=Tix.X)
+ top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+
+def adddir(tree, dir):
+ if dir == '/':
+ text = '/'
+ else:
+ text = os.path.basename(dir)
+ tree.hlist.add(dir, itemtype=Tix.IMAGETEXT, text=text,
+ image=tree.tk.call('tix', 'getimage', 'folder'))
+ try:
+ os.listdir(dir)
+ tree.setmode(dir, 'open')
+ except os.error:
+ # No read permission ?
+ pass
+
+# This function is called whenever the user presses the (+) indicator or
+# double clicks on a directory whose mode is "open". It loads the files
+# inside that directory into the Tree widget.
+#
+# Note we didn't specify the closecmd option for the Tree widget, so it
+# performs the default action when the user presses the (-) indicator or
+# double clicks on a directory whose mode is "close": hide all of its child
+# entries
+def opendir(tree, dir):
+ entries = tree.hlist.info_children(dir)
+ if entries:
+ # We have already loaded this directory. Let's just
+ # show all the child entries
+ #
+ # Note: since we load the directory only once, it will not be
+ # refreshed if the you add or remove files from this
+ # directory.
+ #
+ for entry in entries:
+ tree.hlist.show_entry(entry)
+ files = os.listdir(dir)
+ for file in files:
+ if os.path.isdir(dir + '/' + file):
+ adddir(tree, dir + '/' + file)
+ else:
+ tree.hlist.add(dir + '/' + file, itemtype=Tix.IMAGETEXT, text=file,
+ image=tree.tk.call('tix', 'getimage', 'file'))
+
+if __name__ == '__main__':
+ root = Tix.Tk()
+ RunSample(root)
+ root.mainloop()