sub edit_times{ # diese Funktion öffnet ein neues Toplevel-Widget # hier können bereits eingetragene Zeiten bearbeitet werden und # neue Tätigkeiten angelegt werde tie my @arr_data_set_timefile, 'Tie::File', $file_name_path_act_month or die $!; my @arr_ref_mlistbox_timedata = tied_times_to_2d_array_ref(\@arr_data_set_timefile); untie @arr_data_set_timefile; my $toplevel_edit_times = $mw->Toplevel( -title => 'Times in file', -background => 'white', ); $toplevel_edit_times->transient($mw); $toplevel_edit_times->focusForce(); $toplevel_edit_times->geometry('1000x500'); my $MListbox_edit_times = $toplevel_edit_times->Scrolled('MListbox', -columns=>[ [-text=>'Datum Beginn' ,-width=>14], #, -comparecommand => sub { $_[0] <=> $_[1]}], [-text=>'Uhrzeit Beginn', -width => 14], [-text=>'Projekt', , -width => 24], [-text=>'Arbeitspaket', -width=>25], [-text=>'Task', -width => 50], [-text=>'Datum Ende', -width => 14], [-text=>'Uhrzeit Ende', -width => 14],#, -comparecommand => sub { $_[0] <=> $_[1]}], ], -takefocus => 1, )->pack(-fill => 'both', -expand => 1, -side => 'top'); my $Frame_edit_times_workplace = $toplevel_edit_times->Frame()->pack(-fill=>'x', -expand=>1, -side=>'top'); my $Entry_Date = $Frame_edit_times_workplace->LabEntry(-label=>'Datum', -width=>10)->pack(-side=>'left'); my $Entry_Time_start = $Frame_edit_times_workplace->LabEntry(-label=>'Beginn', -width=>6)->pack(-side=>'left'); my $Entry_Time_stop = $Frame_edit_times_workplace->LabEntry(-label=>'Ende', -width=>6)->pack(-side=>'left'); my $JBrowseEntry_edit_times_Projects = $Frame_edit_times_workplace->JBrowseEntry( -label => 'Projekt:', -labelPack => [-side => 'top', -anchor => 'e'], -variable => \$project_selected, -state => 'normal', -choices => [@arr_projects,keys(%hoa_additionals)], -width => 12, -browsecmd => \&set_JBrowseEntry_choices, -tabcomplete => 1, )->pack( -side => 'left', -pady => '2', -anchor => 'w' ); my $JBrowseEntry_edit_times_Workpackages = $Frame_edit_times_workplace->JBrowseEntry( -label => 'Workpackage:', -labelPack => [-side => 'top', -anchor => 'e'], -variable => \$workpackage_selected, -state => 'normal', -choices => \@arr_work_packs, -width => 20, #-validate => 'focusin', #-validatecommand => \&set_JBrowseEntry_choices, )->pack( -side => 'left', -pady => '2', -anchor => 'w' ); my $Entry_Task = $Frame_edit_times_workplace->LabEntry(-label=>'Task')->pack(-fill=>'x', -expand=>1, -side=>'left'); my $Frame_edit_times_buttonmenue = $toplevel_edit_times->Frame()->pack(-fill=>'x', -expand=>1, -side=>'top'); my $Button_new_task = $Frame_edit_times_buttonmenue->Button(-text=>'add new task', -command=>\&add_new_task)->pack(-padx=>'2', -pady=>'2', -side=>'left',); my $Button_quit_edit_task = $Frame_edit_times_buttonmenue->Button(-text=>'quit', -command=>[\&quit_edit_times, \$toplevel_edit_times])->pack(-padx=>'2', -pady=>'2', -side=>'left', ); $MListbox_edit_times->bindRows("",\&get_mlistbox_cur_selection); fill_mlistbox(\$MListbox_edit_times); my @arr_ref_time_data; foreach my $cur_line (@arr_data_set_timefile){ print $; } my $index_cur_selection; sub get_mlistbox_cur_selection{ $index_cur_selection = $MListbox_edit_times->curselection(); # hole die Einträge der Selektion der MListbox my @arr_cur_sel = $MListbox_edit_times->getRow($index_cur_selection); # Lösche die alten Eintraege $Entry_Date->delete(0,'end'); $Entry_Time_start->delete(0,'end'); $Entry_Time_stop->delete(0,'end'); $Entry_Task->delete(0,'end'); # Trage die markierten Daten ein: $Entry_Date->insert('end',$arr_cur_sel[0]); $Entry_Time_start->insert('end',$arr_cur_sel[1]); $JBrowseEntry_edit_times_Projects->activate(get_mlistbox_choice_index(\$JBrowseEntry_edit_times_Projects,$arr_cur_sel[2])); $JBrowseEntry_edit_times_Workpackages->activate(get_mlistbox_choice_index(\$JBrowseEntry_edit_times_Workpackages,$arr_cur_sel[3])); $Entry_Task->insert('end',$arr_cur_sel[4]); $Entry_Time_stop->insert('end',$arr_cur_sel[6]); } sub add_new_task{ # übernimmt die Eingaben und hängt sie einfach an die Zeitliste an } sub fill_mlistbox{ my $listbox_widget = shift; ${$listbox_widget}->delete(0,'end'); ${$listbox_widget}->insert('end',@arr_ref_mlistbox_timedata); } sub get_mlistbox_choice_index{ # diese Funktion bekommt einen String und sucht die Index-Nummer # der Auwahl-Liste des übergebenen Stings my $ref_jbe = shift; my $string_value = shift; my $index=-1; my @arr_mlistbox_choices = ${$ref_jbe}->choices(); my $counter=0; foreach my $cur_elem (@arr_mlistbox_choices){ DEBUG "Vergleiche ".$string_value." mit ".$cur_elem."\n"." und Index ist z.Zt. ".$index; if($string_value eq $cur_elem){ $index = $counter; } $counter++; } return($index); } sub quit_edit_times{ sort @arr_data_set_timefile; untie @arr_data_set_timefile; $toplevel_edit_times->destroy if Tk::Exists($toplevel_edit_times); } }