diff options
author | Norbert Preining <preining@logic.at> | 2009-12-06 10:06:07 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2009-12-06 10:06:07 +0000 |
commit | 29608ac64d869c47f1a710c6a894d51005f6e6dd (patch) | |
tree | b7ce5661ef47145bc06705cacfc0eb9cdbb4d804 /Master | |
parent | 3e7c149cb710de5da9770873df4c1be5301c3791 (diff) |
fixing tlmgrgui2
git-svn-id: svn://tug.org/texlive/trunk@16312 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/tlpkg/dev/tlmgrgui2.pl | 316 |
1 files changed, 178 insertions, 138 deletions
diff --git a/Master/tlpkg/dev/tlmgrgui2.pl b/Master/tlpkg/dev/tlmgrgui2.pl index 237325654c5..f666ca22f50 100644 --- a/Master/tlpkg/dev/tlmgrgui2.pl +++ b/Master/tlpkg/dev/tlmgrgui2.pl @@ -10,15 +10,10 @@ # # TODO: move the check for critical updates from old create_update_list # to here!! -# TODO: center checkbuttons vertically -# TODO: double click on one line should pop up a window with tlmgr show info -# TODO: if repo is changed on Options->General, the File->Load default shoul -# change, too +# TODO: details window for a package should have a "Details" button +# to show the list of files etc (like --list on tlmgr cmd line) # TODO: warning window from execute_action_gui if something failed, and also # from some other commands that have been run -# TODO: remove the "all <-> matching" and activate it as soon as the -# match string is not empty. -# TODO: should we allow the "with filter [] applied [] not applied" thing? $^W = 1; use strict; @@ -27,8 +22,9 @@ use Tk; use Tk::Dialog; use Tk::BrowseEntry; use Tk::ROText; -use Tk::TixGrid; -use TeXLive::Splashscreen; +use Tk::HList; +use Tk::ItemStyle; +#use TeXLive::Splashscreen; use TeXLive::TLUtils qw(setup_programs platform_desc win32 debug); use TeXLive::TLConfig; @@ -134,6 +130,8 @@ if (defined($opts{"location"})) { push @update_function_list, \&check_location_on_ctan; push @update_function_list, \&init_install_media; +setup_programs("$Master/tlpkg/installer", $localtlmedia->platform); + # # check that we can actually save the database # @@ -170,7 +168,8 @@ $menu->add('command', -label => "Loaded repository: none", # # FILE MENU # -$menu_file->add('command', -label => "Load default repository: $tlpdb_location", +$menu_file->add('command', + -label => __("Load default repository:") . " $tlpdb_location", -command => sub { $location = $tlpdb_location; update_loaded_location_string(); @@ -314,6 +313,14 @@ $back_f1->pack(@x_xy); #require ("do_listframe.pl"); ######### SHOULD GO INTO A SEPARTE FILE ######################## +# This needs to come first as we call update_grid rather early +my $list_frame = $back_f1->Labelframe(-text => "Packages"); +my $g = $list_frame->Scrolled('HList', -scrollbars => "se", -bd => 0, + -command => \&show_extended_info, # does not work, double click! + -columns => 7, -header => 1, + -separator => "/", + -selectmode => "none"); + # install screen my $top_frame = $back_f1->Labelframe(-text => "Display configuration"); $top_frame->pack(@x_x, @p_ii); @@ -329,13 +336,13 @@ my $status_only_installed = 1; my $status_only_not_installed = 2; my $status_only_updated = 3; my $status_value = 0; -$filter_status->Radiobutton(-text => "all", +$filter_status->Radiobutton(-text => "all", -command => \&update_grid, -variable => \$status_value, -value => $status_all)->pack(@a_w); -$filter_status->Radiobutton(-text => "only installed", +$filter_status->Radiobutton(-text => "only installed", -command => \&update_grid, -variable => \$status_value, -value => $status_only_installed)->pack(@a_w); -$filter_status->Radiobutton(-text => "only uninstalled", +$filter_status->Radiobutton(-text => "only uninstalled", -command => \&update_grid, -variable => \$status_value, -value => $status_only_not_installed)->pack(@a_w); -$filter_status->Radiobutton(-text => "only updated", +$filter_status->Radiobutton(-text => "only updated", -command => \&update_grid, -variable => \$status_value, -value => $status_only_updated)->pack(@a_w); my $filter_category = $filter_frame->Labelframe(-text => "Category"); @@ -343,38 +350,42 @@ $filter_category->pack(@left, @x_y, @p_ii); my $show_packages = 1; my $show_collections = 1; my $show_schemes = 1; -$filter_category->Checkbutton(-text => "packages", +$filter_category->Checkbutton(-text => "packages", -command => \&update_grid, -variable => \$show_packages)->pack(@a_w); -$filter_category->Checkbutton(-text => "collections", +$filter_category->Checkbutton(-text => "collections", -command => \&update_grid, -variable => \$show_collections)->pack(@a_w); -$filter_category->Checkbutton(-text => "schemes", +$filter_category->Checkbutton(-text => "schemes", -command => \&update_grid, -variable => \$show_schemes)->pack(@a_w); my $filter_match = $filter_frame->Labelframe(-text => "Match"); $filter_match->pack(@left, @x_y, @p_ii); my $match_all = 1; -$filter_match->Radiobutton(-text => "all", +$filter_match->Radiobutton(-text => "all", -command => \&update_grid, -variable => \$match_all, -value => 1)->pack(@a_w); $filter_match->Radiobutton(-text => "matching:", -variable => \$match_all, -value => 0)->pack(@a_w); my $match_entry = - $filter_match->Entry(-width => 15)->pack(@a_w, -padx => '2m', @x_x); + $filter_match->Entry(-width => 15, -validate => 'key', + )->pack(@a_w, -padx => '2m', @x_x); + +$match_entry->configure(-validate => 'key', + -validatecommand => sub { $match_all = 0; update_grid(); return 1; }); my $filter_selection = $filter_frame->Labelframe(-text => "Selection"); $filter_selection->pack(@left, @x_y, @p_ii); my $selection_value = 0; -$filter_selection->Radiobutton(-text => "all", +$filter_selection->Radiobutton(-text => "all", -command => \&update_grid, -variable => \$selection_value, -value => 0)->pack(@a_w); -$filter_selection->Radiobutton(-text => "only selected", +$filter_selection->Radiobutton(-text => "only selected", -command => \&update_grid, -variable => \$selection_value, -value => 1)->pack(@a_w); -$filter_selection->Radiobutton(-text => "only not selected", +$filter_selection->Radiobutton(-text => "only not selected", -command => \&update_grid, -variable => \$selection_value, -value => 2)->pack(@a_w); my $filter_button = $filter_frame->Labelframe(-text => "Action"); $filter_button->pack(@left, @x_y, @p_ii); -$filter_button->Button(-text => "Apply filters", - -command => sub { update_grid(); })->pack(@a_c, @p_ii); +#$filter_button->Button(-text => "Apply filters", +# -command => sub { update_grid(); })->pack(@a_c, @p_ii); $filter_button->Button(-text => "Reset filters", -command => sub { $status_value = $status_all; $show_packages = 1; $show_collections = 1; @@ -382,46 +393,98 @@ $filter_button->Button(-text => "Reset filters", $selection_value = 0; $match_all = 1; update_grid(); - })->pack(@a_c, @p_ii); + })->pack(@left, @a_c, @p_ii); ########## Packages ####################### -my $list_frame = $back_f1->Labelframe(-text => "Packages"); +#my $list_frame = $back_f1->Labelframe(-text => "Packages"); $list_frame->pack(@x_xy, @p_ii); -my $g = $list_frame->Scrolled('TixGrid', -scrollbars => "se", -bd => 0, - -floatingrows => 0, -floatingcols => 0, - -leftmargin => 2, # selection and label - -topmargin => 1, # top labels - -command => \&show_extended_info, # does not work, double click! - -selectmode => "none", - -selectunit => "row"); - -# that does not work, I have no idea what has to be done -#$g->ItemStyle('window', -anchor => "c"); - +#my $g = $list_frame->Scrolled('HList', -scrollbars => "se", -bd => 0, +# -command => \&show_extended_info, # does not work, double click! +# -columns => 7, -header => 1, +# -separator => "/", +# -selectmode => "none"); $g->pack(qw/-expand 1 -fill both -padx 3 -pady 3/); -$g->configure(-formatcmd=>[\&AlternatingLineColoring, $g]); -$g->size(qw/col 4 -size 10char/); -$g->size(qw/col 5 -size 10char/); -$g->size(qw/col default -size auto/); -$g->size(qw/row default -size 1.1char -pad0 3/); + +my $lighttext = $g->ItemStyle('text', -background => 'gray90', + -selectbackground => 'gray90', -selectforeground => 'blue'); +my $darktext = $g->ItemStyle('text', -background => 'gray70', + -selectbackground => 'gray70', -selectforeground => 'blue'); + +my $f = $g->Frame(); +my $bi = $f->Button(-padx => 1, -pady => 3, + -text => 'all', -command => \&grid_select_all_shown); +my $bii= $f->Button(-padx => 1, -pady => 3, + -text => 'none', -command => \&grid_deselect_all_shown); +$bi->pack(@left); +$bii->pack(@right); +my @htype = qw/-relief ridge/; +$g->headerCreate(0, @htype, -itemtype => 'window', -widget => $f); +$g->headerCreate(1, @htype, -itemtype => 'text', -text => "Package"); +$g->headerCreate(2, @htype, -itemtype => 'text', -text => "Local\nRevision"); +$g->headerCreate(3, @htype, -itemtype => 'text', -text => "Remote\nRevision"); +$g->headerCreate(4, @htype, -itemtype => 'text', -text => "Local\nVersion"); +$g->headerCreate(5, @htype, -itemtype => 'text', -text => "Remote\nVersion"); +$g->headerCreate(6, @htype, -itemtype => 'text', -text => "Short Desc"); + +$g->columnWidth(4, -char => 10); +$g->columnWidth(5, -char => 10); setup_list(); update_grid(); sub show_extended_info { - my ($x, $y) = @_; - print "double click on $x - $y\n"; + my $p = shift; + $g->selectionClear; + $g->anchorClear; + my $sw = $mw->Toplevel(-title => __("Details on:") . $p); + $sw->transient($mw); + + $sw->Label(-text => "Package:")->grid( + $sw->Label(-text => $p), -sticky => "nw"); + $sw->Label(-text => "Category:")->grid( + $sw->Label(-text => $Packages{$p}{'tlp'}->category), + -sticky => "nw"); + $sw->Label(-text => "Short Desc:")->grid( + $sw->Label(-wraplength => '500', -justify => 'left', + -text => $Packages{$p}{'tlp'}->shortdesc), + -sticky => "nw"); + # old version with ROText + #my $t = $sw->Scrolled('ROText', -scrollbars => "oe", -height => 10, + # -width => 50, -wrap => 'word', -relief => 'flat'); + #$t->insert("1.0", $Packages{$p}{'tlp'}->longdesc); + #$sw->Label(-text => "Long Desc:")->grid($t, -sticky => 'nw'); + $sw->Label(-text => "Long Desc:")->grid( + $sw->Label(-wraplength => '500', -justify => 'left', + -text => $Packages{$p}{'tlp'}->longdesc), + -sticky => "nw"); + $sw->Label(-text => "Installed:")->grid( + $sw->Label(-text => ($Packages{$p}{'installed'} ? "Yes" : "No")), + -sticky => "nw"); + $sw->Label(-text => "Local Revision:")->grid( + $sw->Label(-text => $Packages{$p}{'localrevision'}), + -sticky => "nw"); + $sw->Label(-text => "Remote Revision:")->grid( + $sw->Label(-text => $Packages{$p}{'remoterevision'}), + -sticky => "nw"); + + $sw->Button(-text => __("Ok"), -width => 10, + -command => sub { $sw->destroy; })->grid(-columnspan => 2); +} + +sub grid_select_all_shown { + update_grid(1); +} + +sub grid_deselect_all_shown { + update_grid(2); } sub update_grid { - # fill the header - #$g->set(0,0, -itemtype => 'window', -widget => $g->Checkbutton()); - $g->set(1,0, -itemtype => 'text', -text => "Package"); - $g->set(2,0, -itemtype => 'text', -text => "Local Rev"); - $g->set(3,0, -itemtype => 'text', -text => "Remote Rev"); - $g->set(4,0, -itemtype => 'text', -text => "Local Ver"); - $g->set(5,0, -itemtype => 'text', -text => "Remote Ver"); - $g->set(6,0, -itemtype => 'text', -text => "Short Desc"); + # select code + # if not given just do nothing + # if == 1 select all packages that will be shown + # if == 2 deselect all packages that will be shown + my $selectcode = shift; my @schemes; my @colls; @@ -435,45 +498,39 @@ sub update_grid { push @packs, $p; } } - my $i = 1; - # the number of current lines: - my (undef, $curlines) = $g->index(0, 'max'); + $g->delete('all'); + my $i = 0; for my $p (@schemes, @colls, @packs) { if (MatchesFilters($p)) { - # unset first so that the checkbutton is unmapped, otherwise crashes - $g->unset(0,$i) if $g->infoExists(0,$i); - $g->set(0,$i, -itemtype => 'window', - -widget => $Packages{$p}{'cb'}); - # - $g->set(1,$i, -itemtype => 'text', -text => $Packages{$p}{'displayname'}); - if (defined($Packages{$p}{'localrevision'})) { - $g->set(2,$i, -itemtype => 'text', -text => $Packages{$p}{'localrevision'}); - } else { - $g->unset(2,$i); - } - if (defined($Packages{$p}{'remoterevision'})) { - $g->set(3,$i, -itemtype => 'text', -text => $Packages{$p}{'remoterevision'}) - } else { - $g->unset(3,$i); - } - if (defined($Packages{$p}{'localcatalogueversion'})) { - $g->set(4,$i, -itemtype => 'text', -text => $Packages{$p}{'localcatalogueversion'}) - } else { - $g->unset(4,$i); - } - if (defined($Packages{$p}{'remotecatalogueversion'})) { - $g->set(5,$i, -itemtype => 'text', -text => $Packages{$p}{'remotecatalogueversion'}) - } else { - $g->unset(5,$i); + if (defined($selectcode)) { + if ($selectcode == 1) { + $Packages{$p}{'selected'} = 1; + } elsif ($selectcode == 2) { + $Packages{$p}{'selected'} = 0; + } else { + tlwarn("selectcode $selectcode not known, strange.\n"); + } } - $g->set(6,$i, -itemtype => 'text', -text => $Packages{$p}{'shortdesc'}); + $g->add($p); + my $st = ($i%2 ? $lighttext : $darktext); + $g->itemCreate($p, 0, -itemtype => 'window', + -widget => $Packages{$p}{'cb'}); + $Packages{$p}{'cb'}->configure(-background => ($i%2?'gray90':'gray70')); + $g->itemCreate($p, 1, -itemtype => 'text', -style => $st, + -text => $Packages{$p}{'displayname'}); + $g->itemCreate($p, 2, -itemtype => 'text', -style => $st, + -text => ($Packages{$p}{'localrevision'} || '')); + $g->itemCreate($p, 3, -itemtype => 'text', -style => $st, + -text => ($Packages{$p}{'remoterevision'} || '')); + $g->itemCreate($p, 4, -itemtype => 'text', -style => $st, + -text => ($Packages{$p}{'localcatalogueversion'} || '')); + $g->itemCreate($p, 5, -itemtype => 'text', -style => $st, + -text => ($Packages{$p}{'remotecatalogueversion'} || '')); + $g->itemCreate($p, 6, -itemtype => 'text', -style => $st, + -text => $Packages{$p}{'tlp'}->shortdesc); $i++; } } - if ($i <= $curlines) { - # remove the rest of the lines - $g->deleteRow($i, $curlines); - } } sub MatchesFilters { @@ -506,9 +563,9 @@ sub MatchesFilters { if (!$match_all) { my $r = $match_entry->get; # check for match on string - my $t = $Packages{$p}{'shortdesc'}; + my $t = $Packages{$p}{'tlp'}->shortdesc; $t |= ""; - my $lt = $Packages{$p}{'longdesc'}; + my $lt = $Packages{$p}{'tlp'}->longdesc; $lt |= ""; if (($p =~ m/$r/) || ($t =~ m/$r/) || ($lt =~ m/$r/)) { # do nothing, more checks have to be done @@ -540,40 +597,6 @@ sub MatchesFilters { } -sub AlternatingLineColoring { - my ($w, $area, @entbox) = @_; - if ($area eq 'main') { - # first format all cells - # no select background -selectbackground => 'lightblue', - $w->formatGrid( @entbox, -selectbackground => 'gray70', - -xon => 1, -xoff => 0, -yon => 1, -yoff => 0, - -relief => 'raised', -bd => 0, -filled => 1, -bg => 'gray70'); - # format odd lines 1,3,5,7, ... (counting starts at 0!!!) - $w->formatGrid( @entbox, -selectbackground => 'gray90', - -xon => 1, -xoff => 0, -yon => 1, -yoff => 1, - -relief => 'raised', -bd => 0, -filled => 1, -bg => 'gray90'); - } - if ($area eq 'y_margin') { - my ($ulx, $uly, $lrx, $lry) = @entbox; - # format the checkbuttons backgrounds - for my $i ($uly..$lry) { - if ($w->infoExists(0,$i)) { - my $cb = $w->entrycget(0, $i, "-window"); - $cb->configure(-background => (($i-$uly)%2 ? 'gray70' : 'gray90')); - } - } - # first format all cells - # no select background -selectbackground => 'lightblue', - $w->formatBorder( @entbox, -selectbackground => 'gray70', - -xon => 1, -xoff => 0, -yon => 1, -yoff => 0, - -relief => 'raised', -bd => 0, -filled => 1, -bg => 'gray70'); - # format odd lines 1,3,5,7, ... (counting starts at 0!!!) - $w->formatBorder( @entbox, -selectbackground => 'gray90', - -xon => 1, -xoff => 0, -yon => 1, -yoff => 1, - -relief => 'raised', -bd => 0, -filled => 1, -bg => 'gray90'); - } -} - ####### actions frame my $bot_frame = $back_f1->Labelframe(-text => "Actions"); @@ -584,13 +607,22 @@ $actions_frame->pack(); my $with_sel_frame = $actions_frame->Labelframe(-text => "with selected"); $with_sel_frame->pack(@left, @p_ii); + + +# +# disable the with filter applied or not applied, it is too complicated, or? +# +# THIS VARIABLE HAS TO BE KEPT == 1 because the apply action checks +# for that value!!! my $action_apply_filter = 1; -$with_sel_frame->Label(-text => "with filters")->pack(@left, @p_ii); +#$with_sel_frame->Label(-text => "with filters")->pack(@left, @p_ii); +# +#$with_sel_frame->Radiobutton(-text => "applied", +# -variable => \$action_apply_filter, -value => 1)->pack(@left, @p_ii); +#$with_sel_frame->Radiobutton(-text => "not applied", +# -variable => \$action_apply_filter, -value => 0)->pack(@left, @p_ii); +# -$with_sel_frame->Radiobutton(-text => "applied", - -variable => \$action_apply_filter, -value => 1)->pack(@left, @p_ii); -$with_sel_frame->Radiobutton(-text => "not applied", - -variable => \$action_apply_filter, -value => 0)->pack(@left, @p_ii); $with_sel_frame->Button(-text => 'Install', -state => $::action_button_state, -command => sub { install_selected_packages(); } @@ -895,6 +927,13 @@ sub apply_settings_changes { for my $k (keys %defaults) { if ($defaults{$k} ne $changeddefaults{$k}{'value'}) { $localtlpdb->option($k, $changeddefaults{$k}{'value'}); + if ($k eq "location") { + # change interface to program, too + # set default tlpdb location + $tlpdb_location = $changeddefaults{'location'}{'value'}; + # change the menu entry in File->Load defualt... + $menu_file->entryconfigure(1, -label => __("Load default repository:") . " $tlpdb_location"); + } } } $localtlpdb->save; @@ -997,6 +1036,9 @@ sub do_paper_settings { } +# +# this function is used to edit/change the default tlpdb repository +# we also want to change the menu entry if we change that sub menu_default_location { my $mw = shift; my $val; @@ -1028,10 +1070,12 @@ sub menu_default_location { my $f = $sw->Frame; my $okbutton = $f->Button(-text => __("Ok"), - -command => sub { $changeddefaults{'location'}{'value'} = - $changeddefaults{'location'}{'display'} = - $entry->get; - $sw->destroy })->pack(-side => 'left',-padx => "2m", -pady => "2m"); + -command => + sub { + $changeddefaults{'location'}{'value'} = + $changeddefaults{'location'}{'display'} = $entry->get; + $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'); @@ -1345,10 +1389,9 @@ sub setup_list { # collect information about that package we will show $Packages{$p}{'displayname'} = $p; $Packages{$p}{'localrevision'} = $tlp->revision; - $Packages{$p}{'shortdesc'} = $tlp->shortdesc; - $Packages{$p}{'longdesc' } = $tlp->longdesc; $Packages{$p}{'installed'} = 1; $Packages{$p}{'selected'} = 0; + $Packages{$p}{'tlp'} = $tlp; $Packages{$p}{'cb'} = $g->Checkbutton(-variable => \$Packages{$p}{'selected'}); if (($tlp->category eq "Collection") || ($tlp->category eq "Scheme")) { @@ -1368,10 +1411,9 @@ sub setup_list { # collect information about that package we will show $Packages{$p}{'displayname'} = $p; $Packages{$p}{'localrevision'} = $tlp->revision; - $Packages{$p}{'shortdesc'} = $tlp->shortdesc; - $Packages{$p}{'longdesc' } = $tlp->longdesc; $Packages{$p}{'installed'} = 1; $Packages{$p}{'selected'} = 0; + $Packages{$p}{'tlp'} = $tlp; $Packages{$p}{'cb'} = $g->Checkbutton(-variable => \$Packages{$p}{'selected'}); if (($tlp->category eq "Collection") || ($tlp->category eq "Scheme")) { @@ -1409,8 +1451,7 @@ sub update_list_remote { $Packages{$p}{'displayname'} = $p; $Packages{$p}{'remoterevision'} = $tlp->revision; # overwrite, we assume that the remove version is better ;-) - $Packages{$p}{'shortdesc'} = $tlp->shortdesc; - $Packages{$p}{'longdesc' } = $tlp->longdesc; + $Packages{$p}{'tlp'} = $tlp; $Packages{$p}{'selected'} = 0 unless defined $Packages{$p}{'selected'}; $Packages{$p}{'cb'} = $g->Checkbutton(-variable => \$Packages{$p}{'selected'}) @@ -1434,8 +1475,7 @@ sub update_list_remote { # collect information about that package we will show $Packages{$p}{'displayname'} = $p; $Packages{$p}{'remoterevision'} = $tlp->revision; - $Packages{$p}{'shortdesc'} = $tlp->shortdesc; - $Packages{$p}{'longdesc' } = $tlp->longdesc; + $Packages{$p}{'tlp'} = $tlp; $Packages{$p}{'selected'} = 0 unless defined $Packages{$p}{'selected'}; $Packages{$p}{'cb'} = $g->Checkbutton(-variable => \$Packages{$p}{'selected'}) |