# gui-config2.pl # $Id$ # # Copyright 2008 Tomasz Luczak # Copyright 2008, 2009 Norbert Preining # # GUI for tlmgr # our $back_config = $back->add("config",-label => ___"config"); $screens{"config"} = $back_config; my %defaults; for my $key (keys %TeXLive::TLConfig::TLPDBOptionTlmgrName) { if ($TeXLive::TLConfig::TLPDBOptionType{$key} eq "b") { $defaults{$key} = ($localtlpdb->option($key) ? ___"yes" : ___"no"); } else { $defaults{$key} = $localtlpdb->option($key); } } # this will be loaded only on unix systems! # my @config_set_l; my @config_set_m; my @config_set_r; my $back_config_set = $back_config->Labelframe(-text => ___"defaultsettings"); $back_config_set->pack(-fill => "both", -padx => "2m", -pady => "2m"); push @config_set_l, $back_config_set->Label(-text => ___"defaultsource", -anchor => "w"); push @config_set_m, $back_config_set->Label(-textvariable => \$defaults{"location"}); push @config_set_r, $back_config_set->Button(-text => ___"change", -command => sub { menu_default_location(); }); for my $key (qw/create_formats install_docfiles install_srcfiles/) { push @config_set_l, $back_config_set->Label(-text => ___($key), -anchor => "w"); push @config_set_m, $back_config_set->Label(-textvariable => \$defaults{$key}); push @config_set_r, $back_config_set->Button(-text => ___"toggle", -command => sub { toggle_setting($key); }); } push @config_set_l, $back_config_set->Label(-text => ___"backupdir", -anchor => "w"); push @config_set_m, $back_config_set->Label(-textvariable => \$defaults{"backupdir"}); push @config_set_r, $back_config_set->Button(-text => ___"change", -command => sub { my $dir = $back_config->chooseDirectory(); if (defined($dir) && ($default_backupdir ne $dir)) { # see warning concerning UTF8 or other encoded dir names!! $localtlpdb->option("backupdir", $dir); $default_backupdir = $dir; $localtlpdb->save; } }); push @config_set_l, $back_config_set->Label(-text => ___"autobackup", -anchor => "w"); push @config_set_m, $back_config_set->Label(-textvariable => \$defaults{"autobackup"}); push @config_set_r, $back_config_set->Button(-text => ___"change", -command => sub { select_autobackup($p); }, -anchor => "w"); if (!win32()) { for my $key (qw/sys_bin sys_info sys_man/) { push @config_set_l, $back_config_set->Label(-text => ___($key), -anchor => "w"); push @config_set_m, $back_config_set->Label(-textvariable => \$defaults{$key}); push @config_set_r, $back_config_set->Button(-text => ___"change", -command => sub { my $dir = $back_config->chooseDirectory(); if (defined($dir) && ($defaults{$key} ne $dir)) { # see warning concerning UTF8 or other encoded dir names!! $localtlpdb->option($key, $dir); $defaults{$key} = $dir; $localtlpdb->save; } }); } } if (win32()) { for my $key (qw/desktop_integration file_assocs w32_multi_user/) { push @config_set_l, $back_config_set->Label(-text => ___($key), -anchor => "w"); push @config_set_m, $back_config_set->Label(-textvariable => \$defaults{$key}); push @config_set_r, $back_config_set->Button(-text => ___"change", -command => sub { my $dir = $back_config->chooseDirectory(); if (defined($dir) && ($defaults{$key} ne $dir)) { # see warning concerning UTF8 or other encoded dir names!! $localtlpdb->option($key, $dir); $defaults{$key} = $dir; $localtlpdb->save; } }); } } for my $i (0..$#config_set_l) { $config_set_l[$i]->grid( $config_set_m[$i], $config_set_r[$i], -padx => "1m", -pady => "1m", -sticky => "nwe"); } ############# my $lower = $back_config->Frame; $lower->pack(-fill => "both"); my $back_config_pap = $lower->Labelframe(-text => ___"papersettings"); my $back_config_pap_l1 = $back_config_pap->Label(-text => ___"defaultpaperall", -anchor => "w"); my $back_config_pap_m1 = $back_config_pap->Button(-text => "A4", -command => sub { change_paper("all", "a4"); }); my $back_config_pap_r1 = $back_config_pap->Button(-text => "letter", -command => sub { change_paper("all", "letter"); }); $back_config_pap_l1->grid( $back_config_pap_m1, $back_config_pap_r1, -padx => "2m", -pady => "2m", -sticky => "nswe"); my %papers; my %defaultpaper; sub init_paper_xdvi { if (!win32()) { @{$papers{"xdvi"}} = TeXLive::TLPaper::get_paper_list("xdvi"); $defaultpaper{"xdvi"} = ${$papers{"xdvi"}}[0]; } } sub init_paper_pdftex { @{$papers{"pdftex"}} = TeXLive::TLPaper::get_paper_list("pdftex"); $defaultpaper{"pdftex"} = ${$papers{"pdftex"}}[0]; } sub init_paper_dvips { @{$papers{"dvips"}} = TeXLive::TLPaper::get_paper_list("dvips"); $defaultpaper{"dvips"} = ${$papers{"dvips"}}[0]; } sub init_paper_dvipdfm { @{$papers{"dvipdfm"}} = TeXLive::TLPaper::get_paper_list("dvipdfm"); $defaultpaper{"dvipdfm"} = ${$papers{"dvipdfm"}}[0]; } sub init_paper_context { if (defined($localtlpdb->get_package("bin-context"))) { @{$papers{"context"}} = TeXLive::TLPaper::get_paper_list("context"); $defaultpaper{"context"} = ${$papers{"context"}}[0]; } } sub init_paper_dvipdfmx { @{$papers{"dvipdfmx"}} = TeXLive::TLPaper::get_paper_list("dvipdfmx"); $defaultpaper{"dvipdfmx"} = ${$papers{"dvipdfmx"}}[0]; } my %init_paper_subs; $init_paper_subs{"xdvi"} = \&init_paper_xdvi; $init_paper_subs{"pdftex"} = \&init_paper_pdftex; $init_paper_subs{"dvips"} = \&init_paper_dvips; $init_paper_subs{"context"} = \&init_paper_context; $init_paper_subs{"dvipdfm"} = \&init_paper_dvipdfm; $init_paper_subs{"dvipdfmx"} = \&init_paper_dvipdfmx; sub init_all_papers { for my $p (keys %init_paper_subs) { &{$init_paper_subs{$p}}(); } } init_all_papers(); my (%l,%m,%r); foreach my $p (sort keys %papers) { if (($p eq "context") && !defined($localtlpdb->get_package("bin-context"))) { next; } $l{$p} = $back_config_pap->Label(-text => ___("defaultpaperfor") . " $p", -anchor => "w"); $m{$p} = $back_config_pap->Label(-textvariable => \$defaultpaper{$p}, -anchor => "w"); $r{$p} = $back_config_pap->Button(-text => ___"change", -command => sub { select_paper($p); }, -anchor => "w"); $l{$p}->grid( $m{$p}, $r{$p}, -padx => "2m", -pady => "2m", -sticky => "nsw"); } $back_config_pap->pack(-side => 'left', -fill => "both", -padx => "2m", -pady => "2m"); my $back_config_act = $lower->Labelframe(-text => ___"actions"); $back_config_act->Button(-text => ___"reinitlsr", -command => sub { $mw->Busy(-recurse => 1); info("Running mktexlsr, this may take some time ...\n"); info(`mktexlsr 2>&1`); $mw->Unbusy; })->pack(-expand => 1, -fill => "x", -padx => "2m", -pady => "2m"); $back_config_act->Button(-text => ___"recreateformats", -command => sub { $mw->Busy(-recurse => 1); info("Running fmtutil-sys --all, this may take some time ...\n"); info(`fmtutil-sys --all 2>&1`); $mw->Unbusy; })->pack(-expand => 1, -fill => "x", -padx => "2m", -pady => "2m"); $back_config_act->Button(-text => ___"updatemaps", -command => sub { $mw->Busy(-recurse => 1); info("Running updmap-sys, this may take some time ...\n"); info(`updmap-sys 2>&1`); $mw->Unbusy; })->pack(-expand => 1, -fill => "x", -padx => "2m", -pady => "2m"); if (!win32()) { $back_config_act->Button(-text => ___"updatesymlinks", -command => sub { $mw->Busy(-recurse => 1); info("Updating symlinks ...\n"); $localtlmedia->add_symlinks(); $mw->Unbusy; })->pack(-expand => 1, -fill => "x", -padx => "2m", -pady => "2m"); $back_config_act->Button(-text => ___"removesymlinks", -command => sub { $mw->Busy(-recurse => 1); info("Updating symlinks ...\n"); $localtlmedia->remove_symlinks(); $mw->Unbusy; })->pack(-expand => 1, -fill => "x", -padx => "2m", -pady => "2m"); } $back_config_act->pack(-side => 'right', -fill => "both", -padx => "2m", -pady => "2m", -expand => 1, -ipadx => "2m", -ipady => "2m"); sub menu_default_location { my $val = $default_location; my $sw = $mw->Toplevel(-title => ___"changedefaultsrc"); $sw->transient($mw); $sw->grab(); $sw->Label(-text => ___"newdefaultsrc")->pack(-padx => "2m", -pady => "2m"); my $f1 = $sw->Frame; my $entry = $f1->Entry(-text => $val, -width => 50); $entry->pack(-side => "left",-padx => "2m", -pady => "2m"); my $f2 = $sw->Frame; $f2->Button(-text => ___"choosedir", -command => sub { my $var = $sw->chooseDirectory; if (defined($var)) { $entry->delete(0,"end"); $entry->insert(0,$var); } })->pack(-side => "left",-padx => "2m", -pady => "2m"); $f2->Button(-text => ___"defaultnet", -command => sub { $entry->delete(0,"end"); $entry->insert(0,$TeXLiveURL); })->pack(-side => "left",-padx => "2m", -pady => "2m"); $f1->pack; $f2->pack; my $f = $sw->Frame; my $okbutton = $f->Button(-text => ___"ok", -command => sub { $default_location = $entry->get; $localtlpdb->option("location", $default_location); $localtlpdb->save; $sw->destroy })->pack(-side => 'left',-padx => "2m", -pady => "2m"); my $cancelbutton = $f->Button(-text => ___"cancel", -command => sub { $sw->destroy })->pack(-side => 'right',-padx => "2m", -pady => "2m"); $f->pack(-expand => 'x'); $sw->bind('', [ $okbutton, 'Invoke' ]); $sw->bind('', [ $cancelbutton, 'Invoke' ]); } sub toggle_setting() { my ($key) = @_; my $new = ($localtlpdb->option($key) ? 0 : 1); $localtlpdb->option($key, $new); $defaults{$key} = ($new ? ___"yes" : ___"no"); $localtlpdb->save; } sub change_paper { my ($prog, $pap) = @_; if ($prog eq "all") { execute_action_gui ("paper", "paper", $pap); init_all_papers(); } else { execute_action_gui ( "paper", $prog, "paper", $pap); &{$init_paper_subs{$prog}}(); } } sub select_paper { my $prog = shift; my $foo = $back_config->Toplevel(-title => ___("paperfor") . " $prog"); $foo->transient($mw); $foo->grab(); my $var = $defaultpaper{$prog}; my $opt = $foo->BrowseEntry(-label => ___("defaultpaperfor") . " $prog", -variable => \$var); foreach my $p (sort @{$papers{$prog}}) { $opt->insert("end",$p); } $opt->pack(-padx => "2m", -pady => "2m"); my $f = $foo->Frame; my $okbutton = $f->Button(-text => ___"ok", -command => sub { change_paper($prog,$var); $foo->destroy; })->pack(-side => "left", -padx => "2m", -pady => "2m"); my $cancelbutton = $f->Button(-text => ___"cancel", -command => sub { $foo->destroy; })->pack(-side => "left", -padx => "2m", -pady => "2m"); $f->pack; $foo->bind('', [ $okbutton, 'Invoke' ]); $foo->bind('', [ $cancelbutton, 'Invoke' ]); } sub select_autobackup { my $foo = $back_config->Toplevel(-title => ___"autobackup"); $foo->transient($mw); $foo->grab(); my $var = $defaults{"autobackup"}; my $opt = $foo->BrowseEntry(-label => ___"autobackup", -variable => \$var); my @al; push @al, "-1 (keep arbitrarly many)"; push @al, "0 (disable)"; for my $i (1..100) { push @al, $i; } foreach my $p (@al) { $opt->insert("end",$p); } $opt->pack(-padx => "2m", -pady => "2m"); my $f = $foo->Frame; my $okbutton = $f->Button(-text => ___"ok", -command => sub { $var =~ s/ .*$//; $localtlpdb->option("autobackup", $var); $defaults{"autobackup"} = $var; $localtlpdb->save; $foo->destroy; } )->pack(-side => "left", -padx => "2m", -pady => "2m"); my $cancelbutton = $f->Button(-text => ___"cancel", -command => sub { $foo->destroy; })->pack(-side => "left", -padx => "2m", -pady => "2m"); $f->pack; $foo->bind('', [ $okbutton, 'Invoke' ]); $foo->bind('', [ $cancelbutton, 'Invoke' ]); } 1; ### Local Variables: ### perl-indent-level: 2 ### tab-width: 2 ### indent-tabs-mode: nil ### End: # vim:set tabstop=2 expandtab: #