From 960cdf29197bc3f5922110cf26627aa9709ac79b Mon Sep 17 00:00:00 2001 From: cvs2svn Date: Fri, 10 Jun 2005 10:29:11 +0000 Subject: This commit was manufactured by cvs2svn to create branch 'bogue40'. --- Perl/demos/zinc-demos | 502 -------------------------------------------------- 1 file changed, 502 deletions(-) delete mode 100644 Perl/demos/zinc-demos (limited to 'Perl/demos/zinc-demos') diff --git a/Perl/demos/zinc-demos b/Perl/demos/zinc-demos deleted file mode 100644 index 2bffb5a..0000000 --- a/Perl/demos/zinc-demos +++ /dev/null @@ -1,502 +0,0 @@ -#!/usr/bin/perl -w - -#$id: $ - -eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}' - if 0; # not running under some shell - -require 5.004; - -use Tk 800.000; -use Tk::Zinc; # only for getting $Tk::Zinc::VERSION -use lib Tk->findINC('demos/widget_lib'); -use Tk::widgets qw/Dialog ErrorDialog ROText/; -use WidgetDemo; -use subs qw/invoke lsearch see_code see_vars show_stat view_widget_code/; -use vars qw/$MW $FONT $WIDTRIB/; -use vars qw/$CODE $CODE_RERUN $CODE_TEXT $VARS $VIEW $VIEW_TEXT/; -use vars qw/$BRAKES $LIGHTS $OIL $SOBER $TRANS $WIPERS/; -use vars qw/$COLOR $FONT_STYLE $POINT_SIZE $DEMO_FILE %DEMO_DESCRIPTION/; -use strict; - -use vars qw( $VERSION ); -($VERSION) = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/); - -my $version = $Tk::Zinc::VERSION; -print "Tkzinc version: $version\n"; - -$MW = Tk::MainWindow->new; -$MW->configure(-menu => my $menubar = $MW->Menu); - -{ - package WidgetWrap; - @WidgetWrap::ISA = qw/Tk::MainWindow/; - - # This magic conspires with widget's AUTOLOAD subroutine to make user - # contributed demonstrations that don't use WidgetDemo embed properly. - # The trick works because widget creates a superclass of Tk::MainWindow - # which invokes WidgetDemo() implicitly. You loose if you bypass the - # inheritance mechanism and call Tk::MainWindow directly. - - sub new { - my ($name) = $::DEMO_FILE =~ m#([^/]+).pl$#; - $::MW->WidgetDemo(-name => $name, -text => $::DEMO_DESCRIPTION{$name} || "" ); - } -} - -@MainWindow::ISA = 'WidgetWrap'; - -$MW->title('TkZinc Perl demonstrations'); -$FONT = '-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*'; -my $widget_lib = Tk->findINC('demos/widget_lib'); -# the previous simple statement $zinc_lib = Tk->findINC('demos/zinc_lib'); -# found in some cases such old directory empty (e.g. after a previous package de-installation) -# So now, we look for a non-empty demos/zinc_lib directory (ie containing one of the demo!) -my $zinc_lib = Tk->findINC('demos/zinc_lib/tiger.pl'); -($zinc_lib) = $zinc_lib =~ /(.*)\/tiger\.pl/; -my $wd = "$widget_lib/WidgetDemo.pm"; -$WIDTRIB = Tk->findINC('demos/zinc_contrib_lib/README'); -($WIDTRIB) = $WIDTRIB =~ /(.*)\/README/; -unless (Tk::tainting) { - $WIDTRIB = $ENV{WIDTRIB} if defined $ENV{WIDTRIB}; - $WIDTRIB = $ARGV[0] if defined $ARGV[0]; -} - -# The code below creates the main window, consisting of a menu bar -# and a text widget that explains how to use the program, plus lists -# all of the demos as hypertext items. - -my $file = $menubar->cascade(qw/-label File -underline 0 -menuitems/ => - [ - [cascade => '~View', -menuitems => - [ - [command => '~zinc-demos', -command => [\&view_widget_code, __FILE__]], - [command => '~WidgetDemo', -command => [\&view_widget_code, $wd]], - ], # end cascade menuitems - ], # end view cascade - '', - [command => '~Quit', -command => [\&exit]], - ]); - -my $help = $menubar->cascade(qw/-label Help -underline 0 -menuitems/ => - [ - [command => '~About'], - ]); - -my $T = $MW->Scrolled('ROText', - -scrollbars => 'e', - -wrap => 'word', - -width => 60, - -height => 30, - -font => $FONT, - -setgrid => 1, -)->grid(qw/-sticky nsew/); -$MW->gridRowconfigure( 0, -weight => 1); # allow expansion in both ... -$MW->gridColumnconfigure(0, -weight => 1); # ... X and Y dimensions - -my $STATUS_VAR; -my $status = $MW->Label(-textvariable => \$STATUS_VAR, qw/-anchor w/); -$status->grid(qw/-sticky ew/); - -# Create a bunch of tags to use in the text widget, such as those for -# section titles and demo descriptions. Also define the bindings for -# tags. - -$T->tagConfigure(qw/title -font -*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*/); -$T->tagConfigure(qw/demo -lmargin1 1c -lmargin2 1c -foreground blue/); - -if ($MW->depth == 1) { - $T->tagConfigure(qw/hot -background black -foreground white/); - $T->tagConfigure(qw/visited -lmargin1 1c -lmargin2 1c -underline 1/); -} else { - $T->tagConfigure(qw/hot -relief raised -borderwidth 1 -foreground red/); - $T->tagConfigure(qw/visited -lmargin1 1c -lmargin2 1c -foreground/ => - '#303080'); -} - -$T->tagBind(qw/demo / => \&invoke); -my $last_line = ''; -$T->tagBind(qw/demo / => [sub { - my($text, $sv) = @_; - my $e = $text->XEvent; - my($x, $y) = ($e->x, $e->y); - $last_line = $text->index("\@$x,$y linestart"); - $text->tagAdd('hot', $last_line, "$last_line lineend"); - $text->configure(qw/-cursor hand2/); - show_stat $sv, $text, $text->index('current'); - }, \$STATUS_VAR] -); -$T->tagBind(qw/demo / => [sub { - my($text, $sv) = @_; - $text->tagRemove(qw/hot 1.0 end/); - $text->configure(qw/-cursor xterm/); - $$sv = ''; - }, \$STATUS_VAR] -); -$T->tagBind(qw/demo / => [sub { - my($text, $sv) = @_; - my $e = $text->XEvent; - my($x, $y) = ($e->x, $e->y); - my $new_line = $text->index("\@$x,$y linestart"); - if ($new_line ne $last_line) { - $text->tagRemove(qw/hot 1.0 end/); - $last_line = $new_line; - $text->tagAdd('hot', $last_line, "$last_line lineend"); - } - show_stat $sv, $text, $text->index('current'); - }, \$STATUS_VAR] -); - -# Create the text for the text widget. - -$T->insert('end', "TkZinc perl Demonstrations ($version)\n", 'title'); -$T->insert('end', -"\nThis application provides a front end for several short scripts in perl/Tk that demonstrate what you can do with the TkZinc widget. Each of the numbered lines below describes a demonstration; you can click on it to invoke the demonstration. Once the demonstration window appears, you can click the \"See Code\" button to see the Perl/Tk code that created the demonstration.\n"); - -$T->insert('end', "\n", '', "Small applications\n", 'title'); -$T->insert('end', "1. A simple animated application \"the Wheel of Fortune\".\n", [qw/demo demo-wheelOfFortune/]); -$T->insert('end', "2. A simple radar display.\n", [qw/demo demo-simpleradar/]); -$T->insert('end', "3. Zetris a clone of the famous tetris game (requires openGL.)\n", [qw/demo demo-Zetris/]); -$T->insert('end', "4. ATC sample fake electronic strips (nicer with openGL.)\n", [qw/demo demo-groups_in_ATC_strips/]); -$T->insert('end', "5. The famous tiger using the X11 shape extension. (nicer with openGL)\n", [qw/demo demo-tiger/]); -$T->insert('end', "6. A magic lens based on Graphics.pm. (nicer with openGL)\n", [qw/demo demo-MagicLens/]); - - -$T->insert('end', "\n", '', "All Items\n", 'title'); -$T->insert('end', "1. Examples of all items.\n", [qw/demo demo-items/]); -$T->insert('end', "2. All items options (and their types).\n", [qw/demo demo-all_options/]); -$T->insert('end', "3. Examples of line style and line termination.\n", [qw/demo demo-lines/]); -$T->insert('end', "4. Curves with multiple contours.\n", [qw/demo demo-contours/]); -$T->insert('end', "5. Examples of labelformat.\n", [qw/demo demo-labelformat/]); -$T->insert('end', "6. Use of mapinfos.\n", [qw/demo demo-mapinfo/]); -$T->insert('end', "7. Curves with cubic bezier control points.\n", [qw/demo demo-curve_bezier/]); -$T->insert('end', "8. Curves with multiple contours and various fillrule.\n", [qw/demo demo-fillrule/]); - - -$T->insert('end', "\n", '', "Groups, Priority, Clipping and PathTags\n", 'title'); -$T->insert('end', "1. Groups and Priorities.\n", [qw/demo demo-groups_priority/]); -$T->insert('end', "2. Clipping examples (with simple or multiple contours).\n", [qw/demo demo-clipping/]); -$T->insert('end', "3. Group atomicity.\n", [qw/demo demo-atomic-groups/]); -$T->insert('end', "4. \"Windows\" with four glasses using curve with multiple contours.\n", [qw/demo demo-window-contours/]); -$T->insert('end', "5. A counter quite impossible to do without clipping (requires openGL).\n", [qw/demo demo-counter/]); -$T->insert('end', "6. Using pathTags.\n", [qw/demo demo-path_tags/]); - -$T->insert('end', "\n", '', "Interactions\n", 'title'); -$T->insert('end', "1. Simple interaction on a track.\n", [qw/demo demo-simple_interaction_track/]); -$T->insert('end', "2. Text input in a text item and a track item.\n", [qw/demo demo-textInput/]); - - -$T->insert('end', "\n", '', "Transformation\n", 'title'); -$T->insert('end', "1. Translating.\n", [qw/demo demo-translation/]); -$T->insert('end', "2. Rotating.\n", [qw/demo demo-rotation/]); -$T->insert('end', "3. Zooming.\n", [qw/demo demo-zoom/]); -$T->insert('end', "4. Transformation testbed.\n", [qw/demo demo-transforms/]); -$T->insert('end', "5. Zooming/Rotating icon and text. (even without openGL)\n", [qw/demo demo-icon_zoom_resize/]); - -$T->insert('end', "\n", '', "Use of openGL\n", 'title'); -$T->insert('end', "1. A zoomable/rotatable TkZinc Logo (better with openGL).\n", [qw/demo demo-tkZincLogo/]); -$T->insert('end', "2. Axial color variation on the X axis (requires openGL).\n", [qw/demo demo-color-x/]); -$T->insert('end', "3. Axial color variation on the Y axis (requires openGL).\n", [qw/demo demo-color-y/]); -$T->insert('end', "4. Circular color variation (requires openGL).\n", [qw/demo demo-color-circular/]); -$T->insert('end', "5. Path and Conical color variations (requires openGL).\n", [qw/demo demo-color-path-and-conic/]); -$T->insert('end', "6. The triangles item (requires openGL).\n", [qw/demo demo-triangles/]); -$T->insert('end', "7. A set of demos based on Graphics.pm module (really better with openGL).\n", [qw/demo demo-testGraphics/]); - - - -$T->insert('end', "\n", '', "User Contributed Demonstrations\n", 'title'); -opendir(C, $WIDTRIB) or warn "Cannot open $WIDTRIB: $!"; -my(@dirent) = grep /^.+\.pl$/, sort(readdir C); -closedir C; -unshift @dirent, 'TEMPLATE.pl'; # I want it first -my $i = 0; -while ($_ = shift @dirent) { - next if /TEMPLATE\.pl/ and $i != 0; - unless (open(C, "$WIDTRIB/$_")) { - warn "Cannot open $_: $!" unless /TEMPLATE\.pl/; - next; - } - my($name) = /^(.*)\.pl$/; - $_ = ; $_ = ; - my($title) = /^#\s*(.*)$/; - $DEMO_DESCRIPTION{$name} = $title; - close C; - $T->insert('end', ++$i . ". $title\n", ['demo', "demo-$name"]); -} - -# Create all the dialogs required by this demonstration. - -my $DIALOG_ABOUT = $MW->Dialog( - -title => 'About zinc-demos', - -bitmap => 'info', - -default_button => 'OK', - -buttons => ['OK'], - -text => "TkZinc Perl demonstrations\n\nPerl Version $]" . - "\nTk Version $Tk::VERSION" . - "\nTkZinc Version $Tk::Zinc::VERSION\n", -); -$help->cget(-menu)->entryconfigure('About', - -command => [$DIALOG_ABOUT => 'Show'], -); - -my $DIALOG_ICON = $MW->Dialog( - -title => 'Bitmap Menu Entry', - -bitmap => undef, - -default_button => 'OK', - -buttons => ['OK'], - -text => 'The menu entry you invoked displays a bitmap rather than a text string. Other than this, it is just like any other menu entry.', -); -$DIALOG_ICON->configure(-bitmap => undef); # keep -w from complaining - -MainLoop; - -sub AUTOLOAD { - - # This routine handles the loading of most demo methods. - - my($demo) = @_; - - $T->Busy; - { - $DEMO_FILE = "$WIDTRIB/${demo}.pl" if -f "$WIDTRIB/${demo}.pl"; - $DEMO_FILE = "$zinc_lib/${demo}.pl" if -f "$zinc_lib/${demo}.pl"; - if (defined $DEMO_FILE) { - do $DEMO_FILE ; - } else { warn "No such demo: $demo.pl in either $WIDTRIB/ or $zinc_lib/\n"; } - warn $@ if $@; - } - $T->Unbusy; - goto &$::AUTOLOAD if defined &$::AUTOLOAD; - -} # end AUTOLOAD - -sub invoke { - - # This procedure is called when the user clicks on a demo description. - - my($text) = @_; - - my $index = $text->index('current'); - my @tags = $T->tagNames($index); - my $i = lsearch('demo\-.*', @tags); - return if $i < 0; - my($demo) = $tags[$i] =~ /demo-(.*)/; - $T->tagAdd('visited', "$index linestart", "$index lineend"); - { - no strict 'refs'; - &$demo($demo); - } - -} # end invoke - -sub lsearch { - - # Search the list using the supplied regular expression and return it's - # ordinal, or -1 if not found. - - my($regexp, @list) = @_; - my($i); - - for ($i=0; $i<=$#list; $i++) { - return $i if $list[$i] =~ /$regexp/; - } - return -1; - -} # end lsearch - -sub see_code { - - # This procedure creates a toplevel window that displays the code for - # a demonstration and allows it to be edited and reinvoked. - - my($demo) = @_; - - my $file = "${demo}.pl"; - if (not Exists $CODE) { - $CODE = $MW->Toplevel; - my $code_buttons = $CODE->Frame; - $code_buttons->pack(qw/-side bottom -fill x/); - my $code_buttons_dismiss = $code_buttons->Button( - -text => 'Dismiss', - -command => [$CODE => 'withdraw'], - ); - $CODE_RERUN = $code_buttons->Button(-text => 'Rerun Demo'); - $CODE_TEXT = $CODE->Scrolled('Text', - qw/-scrollbars e -height 40 -setgrid 1/); - $code_buttons_dismiss->pack(qw/-side left -expand 1/); - $CODE_RERUN->pack(qw/-side left -expand 1/); - $CODE_TEXT->pack(qw/-side left -expand 1 -fill both/); - } else { - $CODE->deiconify; - $CODE->raise; - } - $CODE_RERUN->configure(-command => sub { - eval $CODE_TEXT->get(qw/1.0 end/); - { - no strict 'refs'; - &$demo($demo); - } - }); - $CODE->iconname($file); - $file = "$WIDTRIB/${demo}.pl" if -f "$WIDTRIB/${demo}.pl"; - $file = "$zinc_lib/${demo}.pl" if -f "$zinc_lib/${demo}.pl"; - $CODE->title("Demo code: $file"); - $CODE_TEXT->delete(qw/1.0 end/); - open(CODE, "<$file") or warn "Cannot open demo file $file: $!"; - { - local $/ = undef; - $CODE_TEXT->insert('1.0', ); - } - close CODE; - $CODE_TEXT->markSet(qw/insert 1.0/); - -} # end see_code - -sub see_vars { - - # Create a top-level window that displays a bunch of global variable values - # and keeps the display up-to-date even when the variables change value. - # $args is a pointer to a list of list of 2: - # - # ["variable description", \$VAR] - # - # The old trick of passing a string to serve as the description and a soft - # reference to the variable no longer works with lexicals and use strict. - - my($parent, $args) = @_; - - $VARS->destroy if Exists($VARS); - $VARS = $parent->Toplevel; - $VARS->geometry('+300+300'); - $VARS->title('Variable Values'); - $VARS->iconname('Variables'); - - my $title = $VARS->Label( - -text => 'Variable Values:', - -width => 20, - -anchor => 'center', - -font => '-*-helvetica-medium-r-normal--*-180-*-*-*-*-*-*', - ); - $title->pack(qw/-side top -fill x/); - my($label, $var); - foreach my $i (@$args) { - ($label, $var) = @$i; - my $wf = $VARS->Frame->pack(qw/-anchor w/); - $wf->Label(-text => "$label: ")->pack(qw/-side left/); - $wf->Label(-textvariable => $var)->pack(qw/-side left/); - } - $VARS->Button(-text => 'OK', -command => [$VARS => 'destroy'])-> - pack(qw/-side bottom -pady 2/); - -} # end see_vars - -sub show_stat { - - # Display name of current demonstration. $sv is a reference to the - # status Label -textvariable, $text is the Text widget reference and - # $index is the demonstration index in the Text widget. - - my($sv, $text, $index) = @_; - - my @tags = $text->tagNames($index); - my $i = lsearch('demo\-.*', @tags); - return if $i < 0; - my($demo) = $tags[$i] =~ /demo-(.*)/; - $$sv = "Click Button-1 to run the \"$demo\" demonstration."; - -} # end show_stat - -sub view_widget_code { - - # Expose a file's innards to the world too, but only for viewing. - - my($widget) = @_; - - if (not Exists $VIEW) { - $VIEW = $MW->Toplevel; - $VIEW->iconname('widget'); - my $view_buttons = $VIEW->Frame; - $view_buttons->pack(qw/-side bottom -expand 1 -fill x/); - my $view_buttons_dismiss = $view_buttons->Button( - -text => 'Dismiss', - -command => [$VIEW => 'withdraw'], - ); - $view_buttons_dismiss->pack(qw/-side left -expand 1/); - $VIEW_TEXT = $VIEW->Scrolled('Text', - qw/-scrollbars e -height 40 -setgrid 1/); - $VIEW_TEXT->pack(qw/-side left -expand 1 -fill both/); - } else { - $VIEW->deiconify; - $VIEW->raise; - } - $VIEW->title("Demo code: $widget"); - $VIEW_TEXT->configure(qw/-state normal/); - $VIEW_TEXT->delete(qw/1.0 end/); - open(VIEW, "<$widget") or warn "Cannot open demo file $widget: $!"; - { - local $/ = undef; - $VIEW_TEXT->insert('1.0', ); - } - close VIEW; - $VIEW_TEXT->markSet(qw/insert 1.0/); - $VIEW_TEXT->configure(qw/-state disabled/); - -} # end view_widget_code - -__END__ - -=head1 NAME - -zinc-demos - Demonstration of TkZinc widget functionnality - -=head1 SYNOPSYS - - zinc-demos [ directory ] - -=head1 DESCRIPTION - -This script demonstrates the various functions offered by Tk Zinc widget. -This file only contains code to -generate the main window for the application, which invokes individual -demonstrations. The code for the actual demonstrations is contained in -separate ".pl" files in the "zinc_lib" directory, which are autoloaded -by this script as needed. - -widget looks in the directory specified on the command line to load user -contributed demonstrations. If no directory name is specified when widget is -invoked and the environment variable WIDTRIB is defined then demonstrations -are loaded from the WIDTRIB directory. If WIDTRIB is undefined then widget -defaults to the released user contributed directory, "zinc_contrib_lib". - -=head2 History - - # - # Stephen O. Lidie, LUCC, 96/03/11. lusol@Lehigh.EDU - # Stephen O. Lidie, LUCC, 97/01/01. lusol@Lehigh.EDU - # Stephen O. Lidie, LUCC, 97/02/11. lusol@Lehigh.EDU - # Stephen O. Lidie, LUCC, 97/06/07. lusol@Lehigh.EDU - # Update for Tk402.00x. Total revamp: WidgetDemo, Scrolled, released - # composites, -menuitems, qw//, etcetera. Perl 5.004 required. - # Stephen O. Lidie, LUCC, 98/03/10. lusol@Lehigh.EDU - # Update for Tk8. - # Stephen O. Lidie, LUCC, 98/06/26. Stephen.O.Lidie@Lehigh.EDU - # Add Common Dialogs for Tk800.007. - # Stephen.O.Lidie@Lehigh.EDU, 1999/11/29, Lehigh University. - # Demo some "dash patch" changes. - # Stephen.O.Lidie@Lehigh.EDU, 2000/01/11, Lehigh University. - # Update menubar to Tk 8, fix color palette Menubutton demo. - # Stephen.O.Lidie@Lehigh.EDU, 2000/07/06, Lehigh University. - # Remove inswt() from widget and styles.pl to show the proper Perl/Tk - # idiom for inserting Text tags. Various and sundry cleanups. - # Christophe Mertz , 2002/03/06, CENA fr - # adaptation for zinc demos purposes. - -=head1 AUTHOR - -Steve Lidie and slight adaptation by Christophe Mertz - -=head1 SEE ALSO - -The zinc documentation is available as a pdf file refman.pdf and as an html pages refman/index.html - -=cut -- cgit v1.1