summaryrefslogtreecommitdiff
path: root/tix/demos/widget
diff options
context:
space:
mode:
Diffstat (limited to 'tix/demos/widget')
-rwxr-xr-xtix/demos/widget367
1 files changed, 367 insertions, 0 deletions
diff --git a/tix/demos/widget b/tix/demos/widget
new file mode 100755
index 00000000000..e0841d7e21b
--- /dev/null
+++ b/tix/demos/widget
@@ -0,0 +1,367 @@
+#!/bin/sh
+# the next line restarts using tixwish \
+exec tixwish "$0" "$@"
+
+# widget --
+#
+# This is a demo program of all the available Tix widgets. If
+# have installed Tix properly, you can execute this program
+# directly:
+#
+# % widget
+#
+# Otherwise try the following in csh
+#
+# % env TIX_LIBRARY=../library tixwish widget
+#
+# Or this in sh
+#
+# $ TIX_LIBRARY=../library tixwish widget
+#
+#
+#
+#----------------------------------------------------------------------
+#
+#
+# This file has not been properly documented. It is NOT intended
+# to be used as an introductory demo program about Tix
+# programming. For such demos, please see the files in the
+# demos/samples directory or go to the "Samples" page in the
+# "widget demo"
+#
+#
+# Copyright (c) 1996, Expert Interface Technologies
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+
+
+proc MkMainWindow {w} {
+ global demo auto_path demo_dir
+
+ if ![info exists demo_dir] {
+ # Initialize the auto_path and the bitmap directory. The demo_dir
+ # variable would be already set by the test program, if we are
+ # running in the self test more
+ #
+ set script [info script]
+ if {$script != {}} {
+ set demo_dir [file dirname $script]
+ } else {
+ set demo_dir [pwd]
+ }
+
+ set demo_dir [tixFSAbsPath $demo_dir]
+ }
+
+ lappend auto_path $demo_dir
+ tix addbitmapdir [tixFSJoin $demo_dir bitmaps]
+
+ toplevel $w
+ wm title $w "Tix Widget Demonstration"
+ wm geometry $w 830x566+100+100
+
+ set demo(balloon) [tixBalloon .demos_balloon]
+
+ set frame1 [MkMainMenu $w]
+ set frame2 [MkMainNoteBook $w]
+ set frame3 [MkMainStatus $w]
+
+ pack $frame1 -side top -fill x
+ pack $frame3 -side bottom -fill x
+ pack $frame2 -side top -expand yes -fill both -padx 4 -pady 4
+
+ $demo(balloon) config -statusbar $demo(statusbar)
+ set demo(notebook) $frame2
+}
+
+proc MkMainMenu {top} {
+ global demo usebal
+
+ set w [frame $top.f1 -bd 2 -relief raised]
+
+ menubutton $w.file -menu $w.file.m -text File -underline 0 \
+ -takefocus 0
+ menubutton $w.help -menu $w.help.m -text Help -underline 0 \
+ -takefocus 0
+
+ menu $w.file.m
+ $w.file.m add command -label "Open ... " -command FileOpen -underline 1 \
+ -accelerator "Ctrl+O"
+ $w.file.m add sep
+ $w.file.m add command -label "Exit " -command exit -underline 1 \
+ -accelerator "Ctrl+X"
+
+ menu $w.help.m
+
+ $w.help.m add checkbutton -under 0 -label "Balloon Help " \
+ -variable usebal -onvalue 1 -offvalue 0
+
+ tixForm $w.file
+ tixForm $w.help -right -0
+
+ trace variable usebal w BalloonHelp
+
+ set usebal 1
+
+ # Accelerator bindings
+
+ bind all <Control-x> "exit"
+ bind all <Control-o> "FileOpen"
+
+ return $w
+}
+
+# Create the main display area of the widget programm. This area should
+# utilize the "tixNoteBook" widget once it is available. But now
+# we use the cheap substitute "tixStackWindow"
+#
+proc MkMainNoteBook {top} {
+ global demo
+ set hasGL 0
+
+ option add *TixNoteBook.tagPadX 6
+ option add *TixNoteBook.tagPadY 4
+ option add *TixNoteBook.borderWidth 2
+ option add *TixNoteBook.font\
+ -*-helvetica-bold-o-normal-*-14-*-*-*-*-*-*-*
+
+ set w [tixNoteBook $top.f2 -ipadx 5 -ipady 5]
+
+
+ $w add wel -createcmd "CreatePage MkWelcome $w wel" \
+ -label "Welcome" \
+ -under 0
+ $w add cho -createcmd "CreatePage MkChoosers $w cho" \
+ -label "Choosers" \
+ -under 0
+ $w add scr -createcmd "CreatePage MkScroll $w scr" \
+ -label "Scrolled Widgets" \
+ -under 0
+ $w add mgr -createcmd "CreatePage MkManager $w mgr" \
+ -label "Manager Widgets" \
+ -under 0
+ $w add dir -createcmd "CreatePage MkDirList $w dir" \
+ -label "Directory List" \
+ -under 0
+ $w add exp -createcmd "CreatePage MkSample $w exp" \
+ -label "Run Sample Programs" \
+ -under 0
+
+ if {$hasGL} {
+ $w add glw -createcmd "MkGL $w glw" -tag "GL Widgets"
+ }
+
+ return $w
+}
+
+proc CreatePage {command w name} {
+ tixBusy $w on
+ set id [after 10000 tixBusy $w off]
+ $command $w $name
+ after cancel $id
+ after 0 tixBusy $w off
+}
+
+proc MkMainStatus {top} {
+ global demo
+
+ set w [frame $top.f3 -relief raised -bd 1]
+ set demo(statusbar) \
+ [label $w.status -font -*-helvetica-medium-r-normal-*-14-*-*-*-*-*-*-*\
+ -relief sunken -bd 1]
+
+ tixForm $demo(statusbar) -padx 3 -pady 3 -left 0 -right %70
+
+ return $w
+}
+
+proc MkWelcome {nb page} {
+ set w [$nb subwidget $page]
+
+ set bar [MkWelcomeBar $w]
+ set text [MkWelcomeText $w]
+
+ pack $bar -side top -fill x -padx 2 -pady 2
+ pack $text -side top -fill both -expand yes
+}
+
+proc MkWelcomeBar {top} {
+ global demo
+
+ set w [frame $top.bar -bd 2 -relief groove]
+
+ # Create and configure comboBox 1
+ #
+ tixComboBox $w.cbx1 -command "MainTextFont $top" \
+ -options {
+ entry.width 15
+ listbox.height 3
+ }
+ tixComboBox $w.cbx2 -command "MainTextFont $top" \
+ -options {
+ entry.width 4
+ listbox.height 3
+ }
+ set demo(welfont) $w.cbx1
+ set demo(welsize) $w.cbx2
+
+ $w.cbx1 insert end "Courier"
+ $w.cbx1 insert end "Helvetica"
+ $w.cbx1 insert end "Lucida"
+ $w.cbx1 insert end "Times Roman"
+
+ $w.cbx2 insert end 8
+ $w.cbx2 insert end 10
+ $w.cbx2 insert end 12
+ $w.cbx2 insert end 14
+ $w.cbx2 insert end 18
+
+ $w.cbx1 pick 1
+ $w.cbx2 pick 3
+
+ # Pack the comboboxes together
+ #
+ pack $w.cbx1 $w.cbx2 -side left -padx 4 -pady 4
+
+ $demo(balloon) bind $w.cbx1\
+ -msg "Choose\na font" -statusmsg "Choose a font for this page"
+ $demo(balloon) bind $w.cbx2\
+ -msg "Point size" -statusmsg "Choose the font size for this page"
+
+
+ tixDoWhenIdle MainTextFont $top
+ return $w
+}
+
+proc MkWelcomeText {top} {
+ global demo tix_version
+
+ set w [tixScrolledWindow $top.f3 -scrollbar auto]
+ set win [$w subwidget window]
+
+ label $win.title -font -*-times-bold-r-normal-*-18-*-*-*-*-*-*-*\
+ -bd 0 -width 30 -anchor n\
+ -text "Welcome to TIX version $tix_version"
+
+ message $win.msg -font -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-*-*\
+ -bd 0 -width 400 -anchor n\
+ -text "\
+Tix $tix_version is a library of mega-widgets based on TK. This program \
+demonstrates the widgets in the Tix widget. You can choose the pages \
+in this window to look at the corresponding widgets. \
+To quit this program, choose the \"File | Exit\" command."
+
+
+ pack $win.title -expand yes -fill both -padx 10 -pady 10
+ pack $win.msg -expand yes -fill both -padx 10 -pady 10
+ set demo(welmsg) $win.msg
+ return $w
+}
+
+proc MainTextFont {w args} {
+ global demo
+
+ if {![info exists demo(welmsg)]} {
+ return
+ }
+
+ set font [$demo(welfont) cget -value]
+ set point [$demo(welsize) cget -value]
+
+ case $font {
+ "Courier" {
+ set f courier
+ }
+ "Helvetica" {
+ set f helvetica
+ }
+ "Lucida" {
+ set f lucida
+ }
+ default {
+ set f times
+ }
+ }
+
+ set xfont [format "-*-%s-bold-r-normal-*-%s-*-*-*-*-*-*-*" $f $point]
+ if [catch {$demo(welmsg) config -font $xfont} err] {
+ puts \a$err
+ }
+}
+
+proc FileOpen {} {
+ global demo demo_dir
+ set filedlg [tix filedialog tixExFileSelectDialog]
+ if {![info exists demo(filedialog)]} {
+ $filedlg subwidget fsbox config -pattern *.tcl
+ $filedlg subwidget fsbox config -directory $demo_dir/samples
+ $filedlg config -command FileOpen:Doit
+ set demo(filedialog) $filedlg
+ }
+ $filedlg config -title "Open Tix Sample Programs"
+ $filedlg popup
+ tixPushGrab $filedlg
+}
+
+proc FileOpen:Doit {filename} {
+ global demo
+
+ LoadFile $filename
+ tixPopGrab
+ $demo(filedialog) popdown
+}
+
+#----------------------------------------------------------------------
+# Balloon Help
+#----------------------------------------------------------------------
+proc BalloonHelp {args} {
+ global demo usebal
+
+ if {$usebal} {
+ $demo(balloon) config -state "both"
+ } else {
+ $demo(balloon) config -state "none"
+ }
+}
+
+#----------------------------------------------------------------------
+# Self-testing
+#
+# The following code are called by the Tix test suite. It opens
+# every page in the demo program.
+#----------------------------------------------------------------------
+proc Widget:SelfTest {} {
+ global demo testConfig
+
+ if ![info exists testConfig] {
+ return
+ }
+
+ MkMainWindow .widget
+
+ update
+ foreach p [$demo(notebook) pages] {
+ $demo(notebook) raise $p
+ update
+ }
+
+ destroy .widget
+}
+
+
+#----------------------------------------------------------------------
+# Start!
+#----------------------------------------------------------------------
+if ![info exists testConfig] {
+ #
+ # If the testConfig variable exists, we are driven by the regression
+ # test. In that case, don't open the main window. The test program will
+ # call Widget:SelfTest
+ #
+ wm withdraw .
+ MkMainWindow .widget
+ bind .widget <Destroy> "exit"
+}
+