#!perl -w use strict; # This script is built for the Benchmark module. use Benchmark qw(cmpthese); # Import Tk modules use Tk 800.005; use Tk::Frame; use Tk::TextUndo; use Tk::Text; use Tk::Entry; use Tk::Label; use Tk::Scrollbar; use Tk::Adjuster; use Tk::Menu; use Tk::Menubutton; use Tk::DialogBox; # %tk holds refs to all the widgets use vars qw/%tk/; # Main Window $tk{mw} = new MainWindow; $tk{mw}->geometry('320x320'); Initialize_ui( $tk{mw} ); $tk{count} = 1000; MainLoop; sub OnRun { my $supportcode = $tk{code_text}->get(0.1, 'end'); chomp $supportcode; my $test1 = $tk{test1_text}->get(0.1,'end'); chomp $test1; my $test2 = $tk{test2_text}->get(0.1,'end'); chomp $test2; my $testcode = "{".$test1.",".$test2.",}"; my $count = $tk{count}; $tk{output_text}->delete(0.1, 'end'); my $widget = $tk{output_text}->Subwidget("text"); tie *STDOUT, ref $widget, $widget; print "COUNT=",$count,"\n"; print "TEST CODE:\n",$testcode,"\n"; print "SUPPORT CODE:\n",$supportcode,"\n"; print "RESULTS:\n"; eval (qq($supportcode cmpthese($count, $testcode ); )); print "ERROR: ", $@ if ($@); } sub OnClear { $tk{count} = 1000; $tk{test1_text }->delete(0.1, 'end'); $tk{test2_text }->delete(0.1, 'end'); $tk{code_text }->delete(0.1, 'end'); $tk{output_text}->delete(0.1, 'end'); } sub Initialize_ui { # $root is a ref to the MainWindow my($root) = @_; # create widgets $tk{toolbar_frame} = $root->Frame (); $tk{Clear} = $root->Button ( -text => 'Clear', -command => \&OnClear, ); $tk{Run} = $root->Button ( -text => 'Run', -command => \&OnRun, ); $tk{count_label} = $root->Label ( -text => 'count', ); $tk{count_entry} = $root->Entry ( -textvariable => \$tk{count}, ); $tk{test1_label} = $root->Label ( -text => 'test1', ); $tk{test1_text} = $root->Scrolled( 'TextUndo', -scrollbars => 'e', -height => '1', -width => '1', ); $tk{test2_label} = $root->Label ( -text => 'test2', ); $tk{test2_text} = $root->Scrolled( 'TextUndo', -scrollbars => 'e', -height => '1', -width => '1', ); $tk{code_label} = $root->Label ( -text => 'code', ); $tk{code_text} = $root->Scrolled( 'TextUndo', -scrollbars => 'e', -height => '1', -width => '1', ); $tk{adjuster} = $root->Adjuster( -widget => $tk{code_text}, -side => 'top', ); $tk{output_label} = $root->Label ( -text => 'output', ); $tk{output_text} = $root->Scrolled( 'Text', -scrollbars => 'e', -height => '1', -width => '1', ); # Layout management $tk{toolbar_frame}->grid( -in => $root, -column => '2', -row => '1', -sticky => 'nw', ); $tk{Clear}->grid( -in => $tk{toolbar_frame}, -column => '1', -row => '1', -sticky => 'nw', ); $tk{Run}->grid( -in => $tk{toolbar_frame}, -column => '2', -row => '1', -sticky => 'nw', ); $tk{count_label}->grid( -in => $root, -column => '1', -row => '2', -sticky => 'nw', ); $tk{count_entry}->grid( -in => $root, -column => '2', -row => '2', -sticky => 'nw', ); $tk{test1_label}->grid( -in => $root, -column => '1', -row => '3', -sticky => 'nw', ); $tk{test1_text}->grid( -in => $root, -column => '2', -row => '3', -sticky => 'nesw', ); $tk{test2_label}->grid( -in => $root, -column => '1', -row => '4', -sticky => 'nw', ); $tk{test2_text}->grid( -in => $root, -column => '2', -row => '4', -sticky => 'nesw', ); $tk{code_label}->grid( -in => $root, -column => '1', -row => '5', -sticky => 'nw', ); $tk{code_text}->grid( -in => $root, -column => '2', -row => '5', -sticky => 'nesw', ); $tk{adjuster}->grid( -in => $root, -column => '2', -row => '6', -sticky => 'ew', ); $tk{output_label}->grid( -in => $root, -column => '1', -row => '7', -sticky => 'nw', ); $tk{output_text}->grid( -in => $root, -column => '2', -row => '7', -sticky => 'nesw', ); # Resize behavior management # container $root (rows) $root->gridRowconfigure(1, -weight => 0, -minsize => 9); $root->gridRowconfigure(2, -weight => 0, -minsize => 9); $root->gridRowconfigure(3, -weight => 0, -minsize => 30); $root->gridRowconfigure(4, -weight => 0, -minsize => 30); $root->gridRowconfigure(5, -weight => 1, -minsize => 45); $root->gridRowconfigure(6, -weight => 0, -minsize => 20); $root->gridRowconfigure(7, -weight => 1, -minsize => 60); # container $root (columns) $root->gridColumnconfigure(1, -weight => 0, -minsize => 2); $root->gridColumnconfigure(2, -weight => 1, -minsize => 130); # container $tk{toolbar_frame} (rows) $tk{toolbar_frame}->gridRowconfigure(1, -weight => 0, -minsize => 24); # container $tk{toolbar_frame} (columns) $tk{toolbar_frame}->gridColumnconfigure(1, -weight => 0, -minsize => 30); $tk{toolbar_frame}->gridColumnconfigure(2, -weight => 0, -minsize => 30); } 1; __END__