#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::HList; use Tk::ItemStyle; use Tk::BrowseEntry; my $mw = MainWindow->new(); my $hlist = $mw->Scrolled("HList", -header => 1, -columns => 8, -scrollbars => 'osoe', -width => 150, -selectbackground => 'SeaGreen3', -background => 'white', ) ->pack(); my $headerstyle = $hlist->ItemStyle('window', -padx => 0, -pady => 0, ); my $btn_adressentyp = $hlist->Button(-text => 'Adressentyp', -relief => 'flat', -command => [ \&MyTk::HList::order, 0, 0 ]); my $btn_strasse = $hlist->Button(-text => 'Strasse', -relief => 'flat', -command => [ \&MyTk::HList::order, 1, 0 ]); my $btn_hausnummer = $hlist->Button(-text => 'Hausnummer', -relief => 'flat', -command => [ \&MyTk::HList::order, 2, 0 ]); my $btn_ort = $hlist->Button(-text => 'Ort', -relief => 'flat', -command => [ \&MyTk::HList::order, 3, 0]); my $btn_postleitzahl = $hlist->Button(-text => 'Postleitzahl', -relief => 'flat', -command => [ \&MyTk::HList::order, 4, 0 ]); my $btn_land = $hlist->Button(-text => 'Land', -relief => 'flat', -command => [ \&MyTk::HList::order, 5, 0 ]); my $btn_beschreibung = $hlist->Button(-text => 'Beschreibung', -relief => 'flat', -command => [ \&MyTk::HList::order, 6, 0 ]); my $btn_erste_adresse = $hlist->Button(-text => 'Erste Adresse', -relief => 'flat', -command => [ \&MyTk::HList::order, 7, 0 ]); $hlist->header('create', 0, -itemtype => 'window', -widget => $btn_adressentyp, -style => $headerstyle); $hlist->header('create', 1, -itemtype => 'window', -widget => $btn_strasse, -style => $headerstyle); $hlist->header('create', 2, -itemtype => 'window', -widget => $btn_hausnummer, -style => $headerstyle); $hlist->header('create', 3, -itemtype => 'window', -widget => $btn_ort, -style => $headerstyle); $hlist->header('create', 4, -itemtype => 'window', -widget => $btn_postleitzahl, -style => $headerstyle); $hlist->header('create', 5, -itemtype => 'window', -widget => $btn_land, -style => $headerstyle); $hlist->header('create', 6, -itemtype => 'window', -widget => $btn_beschreibung, -style => $headerstyle); $hlist->header('create', 7, -itemtype => 'window', -widget => $btn_erste_adresse, -style => $headerstyle); my @mails = (['Heimadresse', 'Fuchsweg', '19', 'Breuberg', '64747', 'Deutschland', 'Ja Ja', '1'], ['Alte Adresse', 'Michelweg', '24', 'Bad König', '64732', 'Deutschland', 'Ja Ja', '0'], ['Ausweichadresse', 'MÖPweg', '5', 'Texas', '4322', 'USA', 'Ja Ja', '0'], ); for my $zeile (0..$#mails) { my $e = $hlist->addchild(""); for my $spalte (0..scalar(@{$mails[$zeile]}-1)) { if ($spalte == '0'){ $hlist->itemCreate($e, $spalte, -itemtype => 'window', (-widget => $hlist->BrowseEntry(-variable=> \$mails[$zeile]->[$spalte]))); } elsif ($spalte == '7'){ $hlist->itemCreate($e, $spalte, -itemtype => 'window', (-widget => $hlist->Checkbutton(-variable=> \$mails[$zeile]->[$spalte]))); } else{ $hlist->itemCreate($e, $spalte, -itemtype => 'window', (-widget => $hlist->Entry(-textvariable=> \$mails[$zeile]->[$spalte]))); } } } my $miau; $mw->Entry(-textvariable => \$miau)->pack(); my $button_neu=$mw->Button(-text => "print Array", -command => sub{ for my $zeile2 (0..$#mails){ for my $zeile3 (0..scalar(@{$mails[$zeile2]}-1)) { print $mails[$zeile2]->[$zeile3]."\n" } } })->pack(); my $button_neu2=$mw->Button(-text => "lösche Hlist", -command => sub{$hlist->delete('all')})->pack(); MainLoop(); # ----------------------------------------------------------------------------- package MyTk::HList; my $last_btn; my $switch; BEGIN { $last_btn = -1; $switch = 0; } sub order { my ($which, $numorder) = @_; $hlist->delete('all'); my @sorted_mails = $numorder ? sort{$a->[$which] <=> $b->[$which]} @mails : sort{$a->[$which] cmp $b->[$which]} @mails; if ($which == $last_btn) { $switch = 1 if $switch == 0; $switch = -$switch; @sorted_mails = reverse @sorted_mails if $switch == -1; } else { $last_btn = $which; $switch = 0; } for my $zeile (0..$#sorted_mails) { $hlist->add("$zeile"); for my $spalte (0..scalar(@{$sorted_mails[$zeile]}-1)) { if ($spalte == '0'){ $hlist->itemCreate($zeile, $spalte, -itemtype => 'window', (-widget => $hlist->BrowseEntry(-variable=> \$mails[$zeile]->[$spalte]))); } elsif ($spalte == '7'){ $hlist->itemCreate($zeile, $spalte, -itemtype => 'window', (-widget => $hlist->Checkbutton(-variable=> \$mails[$zeile]->[$spalte]))); } else{ $hlist->itemCreate($zeile, $spalte, -itemtype => 'window', (-widget => $hlist->Entry(-textvariable=> \$mails[$zeile]->[$spalte]))); } } } }