#!/usr/bin/perl #------------------------------------------------------------------------------ # Pragmas und Module: #------------------------------------------------------------------------------ use strict; use warnings; use Tk; #------------------------------------------------------------------------------ # Globales Kofigurationshash: #------------------------------------------------------------------------------ my %Config = ( debug => 1, # Debuginformationen? version => '0.0.2', # Programmversion version_datum => '16.01.2004', # Programmdatum main_window => undef, # Hauptfenster-Widget ausg_widget => undef, # Ausgabe-Widget Menu => undef, # Menu-Widget Menuefont => '{Arial} 8 {normal}', # Schriftart des Menu Titel => 'Frühstückers CD Oberfläche', # Fenstertitel ); #------------------------------------------------------------------------------ # CDdaten (ein AoH): #------------------------------------------------------------------------------ my @Files = ( { name => 'Testdatei1.doc', info => "1\nBla bla laber fasel sabbel anpreis \nschwafel\nrhabrhab", }, { name => 'Testdatei2.doc', info => "2\nBla bla laber fasel sabbel anpreis \nschwafel\nrhabrhab", }, { name => 'Testdatei3.pdf', info => "3\nBla bla laber fasel sabbel anpreis \nschwafel\nrhabrhab", }, { name => 'Testdatei4.doc', info => "4\nBla bla laber fasel sabbel anpreis \nschwafel\nrhabrhab", }, { name => 'Testdatei5.pdf', info => "5\nBla bla laber fasel sabbel anpreis \nschwafel\nrhabrhab", }, ); #------------------------------------------------------------------------------ # Prototypen: #------------------------------------------------------------------------------ sub tk_main (); sub show_data ($); sub show_data ($); sub clear_data (); sub anzeigen ($); #------------------------------------------------------------------------------ # Programmablauf: #------------------------------------------------------------------------------ tk_main(); MainLoop(); exit; sub tk_main () { print "tk_main()\n" if $Config{debug}; #-------------------------------------------------------------------------- # Hauptfenster erzeugen und Fenstertitel vergeben: #-------------------------------------------------------------------------- my $mw = new MainWindow; $Config{main_window} = $mw; $mw->title($Config{Titel}); #-------------------------------------------------------------------------- # Menü erzeugen: #-------------------------------------------------------------------------- # 1. Menu-Bar erstellen: $Config{Menu} = $mw->Menu(-type => 'menubar', -font => $Config{Menuefont}, ); # 2. Dem Fensterwidget sagen, dass unsere Menubar sein Menu ist: $mw->configure(-menu => $Config{Menu}); # 3. Einträge in der Menu-Bar: $Config{Menu}->cascade(-label => 'Datei', -underline => 0, -font => $Config{Menuefont}, ); $Config{Menu}->separator(); # dadurch wird der Rest rechtsbündig $Config{Menu}->cascade(-label => 'Hilfe', -underline => 0, -font => $Config{Menuefont}, ); # 4. Die einzelnen Untermenüs definieren: # Zunächst das Dateimenü: my $menu_datei = $Config{Menu} ->Menu(-font => $Config{Menuefont}, # Schriftart des Menüs -tearoff => 0, # Menü nicht abreißbar -menuitems => [ [ 'command' => 'Speichern', #-command => \&save, -command => sub { print "\a" }, -accelerator => 'F2', -font => $Config{Menuefont}, -underline => 0, ], [ 'command' => 'Speichern unter', #-command => \&saveas, -command => sub { print "\a" }, -accelerator => 'F12', -font => $Config{Menuefont}, -underline => 10, ], '-', [ 'command' => 'Beenden', -command => sub { $mw->destroy() }, -font => $Config{Menuefont}, -underline => 0, -accelerator => 'Esc', ], ], ); # Dazu gehört auch, der Menubar zu sagen, dass dieses Untermenü zu seinem # Eintrag "Datei" gehört: $Config{Menu}->entryconfigure('Datei', -menu => $menu_datei); # Analog für die anderen Menüs: # Hilfemenü: my $menu_hilfe = $Config{Menu} ->Menu(-font => $Config{Menuefont}, -tearoff => 0, -menuitems => [ [ 'command' => "Hilfe", #-command => \&hilfe, -command => sub { print "\a" }, -accelerator => 'F1', -font => $Config{Menuefont}, -underline => 0, ], '-', [ 'command' => "Über ...", #-command => \&ueber, -command => sub { print "\a" }, -font => $Config{Menuefont}, -underline => 0, ], ], ); $Config{Menu}->entryconfigure('Hilfe', -menu => $menu_hilfe); #-------------------------------------------------------------------------- # Hauptfeld: #-------------------------------------------------------------------------- my $txt = $mw->Scrolled("Text", -scrollbars => 'osoe', #-background => $bcolor, #-foreground => $tcolor, -width => 80, -height => 15, -relief => 'flat', -wrap => 'none', ) ->pack(-side => 'top', -expand => 1, -fill => 'both', ); for my $index (0..$#Files) { my $btn = $mw->Button(-text => $Files[$index]->{name}, -width => 80, -relief => 'flat', -anchor => 'w', -command => [ \&anzeigen, $index ], ); $btn->bind('' => sub { show_data($index) } ); $btn->bind('' => sub { clear_data } ); $txt->windowCreate('end', -window => $btn); $txt->insert('end', "\n"); } $txt->configure(-state => 'disabled'); #-------------------------------------------------------------------------- # Ausgabefeld: #-------------------------------------------------------------------------- my $aus = $mw->Scrolled("Text", -scrollbars => 'osoe', -width => 80, -height => 4, -relief => 'flat', -wrap => 'none', -background => '#FFFFEE', -foreground => '#FF6600', -state => 'disabled', -relief => 'groove', ) ->pack(-side => 'top', -expand => 1, -fill => 'both', ); $Config{ausg_widget} = $aus; #-------------------------------------------------------------------------- # Bindungen: #-------------------------------------------------------------------------- $mw->bind('', sub { $mw->destroy() } ); # Ctrl-B: Beenden #$mw->bind('', \&help ); # F1: Hilfe #$mw->bind('', \&save ); # F2: Speichern #$mw->bind('', \&saveas ); # F12: Speichern unter } # sub tk_main; sub show_data ($) { print "show_data()\n" if $Config{debug}; my $index = shift; die "Fehlender Parameter in 'show_data'" unless defined $index; die "Falscher Parameter '$index' in 'show_data'" unless $index >= 0 and $index <= $#Files; my $text = "Datei: " . $Files[$index]->{name} . "\n" . "Info : " . $Files[$index]->{info} . "\n"; $Config{ausg_widget}->configure(-state => 'normal'); $Config{ausg_widget}->delete('1.0', 'end'); $Config{ausg_widget}->insert('end', $text); #$Config{ausg_widget}->insert('end', "\n"); $Config{ausg_widget}->configure(-state => 'disabled'); } # sub show_data sub clear_data () { print "clear_data()\n" if $Config{debug}; $Config{ausg_widget}->configure(-state => 'normal'); $Config{ausg_widget}->delete('1.0', 'end'); $Config{ausg_widget}->configure(-state => 'disabled'); } # sub clear_data sub anzeigen ($) { print "anzeigen()\n" if $Config{debug}; my $index = shift; die "Fehlender Parameter in 'anzeigen'" unless defined $index; die "Falscher Parameter '$index' in 'anzeigen'" unless $index >= 0 and $index <= $#Files; # ... irgendwas externes mit der Datei anstellen print "ANZEIGEN: ", $Files[$index]->{name}, "\n"; my $prg = $Files[$index]->{name} =~ m~.doc$~ ? 'c:\programme\microsoft\ office\office\winword.exe' : 'c:\programme\adobe\acrobat\ 6.0\reader\acrord32.exe'; print "Führe aus: '$prg $Files[$index]->{name}'\n"; my $ret = qx($prg $Files[$index]->{name}); } # sub anzeigen