# bookmark functions use strict; use warnings; #-------------------------------------------------------------------------------------------------------------- # Bookmark add #-------------------------------------------------------------------------------------------------------------- sub bm_add { my $name = shift; my $dir = shift; if($name =~ /\:(\\|\/)$/) { print "\$name = $name\n"; } else { $name =~ s/(.*)(\\|\/)(.*?$)/$3/; # set name to directory } &file_append($main::bookmark_file, "$name\t\t$dir\n"); &bm_update; } #-------------------------------------------------------------------------------------------------------------- # bookmark update #-------------------------------------------------------------------------------------------------------------- # before any1 says anything !, I couldnt see any other way to quickly make a bookmarks menu, # without printing to file then executing, $u is always the last url in the bookmarks file. # -command=> function floats around until called rather being declared as it literally is # this is the normal behaviour, but when I try to spool off several menu commands from a loop # problems are encountered - cant use variables that are redeclared, Ive tried hashes and breifly constants # ended up with grief # I know there is a proper way todo this, but for the life of me I dont know - and Ive googled all the topics I # can think of, will post to a forum for help after 3.5. # as dodgey as the below may seem it works perfectly well without any hiccups so far :P sub bm_update { print "bm_update\n"; print "bm_pl = $main::bm_pl\n"; my $n = ""; my $u = ""; my $count = 0; # delete bookmarks menu (also have to delete help as it comes after bookmarks else menu ordering gets screwed up). if($main::bookmarks) { my $index = $main::mbar->index("Bookmarks"); $main::mbar->delete($index); } if($main::help) { my $index = $main::mbar->index("Help"); $main::mbar->delete($index); } # create empty bookmarks menu $main::bookmarks = $main::mbar -> cascade ( -label=>"Bookmarks", -underline=>0, -tearoff=>0, ); # menu command - bookmark cur dir $main::bookmarks -> command ( -label=>"Bookmark current Directory", -command=> sub { &bm_add($main::dir, $main::dir); } ); # menu command - edit bookmarks $main::bookmarks -> command ( -label=>"Edit Bookmarks", -command=> sub { &edit_bookmark_list; } ); #create help menu # NOTE: this is here, to stop the bookmarks menu switch places upon updating. $main::help = $main::mbar -> cascade ( -label =>"Help", -underline=>0, -tearoff => 0 ); $main::help -> command ( -label=>'About', -command=>\&show_about ); $main::help -> separator(); $main::help -> command ( -label=>"Changelog", -command=>\&show_changelog ); $main::help -> command ( -label=>"Todo List", -command=>\&show_todo ); $main::help -> command ( -label=>'Credits/ Thanks', -command=>\&show_thanks ); $main::help -> separator(); $main::help -> command ( -label=>"Links", -command=>\&show_links ); &bm_add1; } sub bm_add1 { print "sub bm_add1 executed\n"; my $n = ""; my $u = ""; # add bookmarks, this is where code gets ugly $main::bookmarks -> separator(); if(!-f $main::bookmark_file) { # no bookmarks, return &nf_error("bookmarks.pm cant find file $main::bookmark_file"); return; } my @tmp_arr = &readf($main::bookmark_file); open(FILE, ">$main::bm_pl") or die "couldnt open $main::bm_pl $!\n"; print FILE "\# add bookmarks to menu\n# Dont edit me.\n\n"; for(@tmp_arr) { if(/^\n/) { next; } ($n, $u) = split(/\t+/); chomp $n; chomp $u; # if win32 and dir = network path swap \ with / # (makes it easier for namefix.pl to work with and perl doesnt mind) if($^O eq "MSWin32" && $u =~ /^\\/) { $u =~ s/\\/\//g; } print FILE " \$bookmarks -> command ( -label=>\"$n\", -command=> sub { \$main::dir = q\{$u\}; &ls_dir; } ); " ; } close(FILE); do "$main::bm_pl" or die "ERROR: dir.pm, cant do $main::bm_pl: $! $@\n"; } #-------------------------------------------------------------------------------------------------------------- # Edit Bookmarks. #-------------------------------------------------------------------------------------------------------------- sub edit_bookmark_list { my $dtext = ""; if(-f $main::bookmark_file) { $dtext = &readjf("$main::bookmark_file"); } else { $dtext = ""; } my $top = $main::mw -> Toplevel(); $top -> title("Edit Bookmark List"); $top->Label ( -text=>"Format: " ) ->grid(-row => 1, -column => 1, -columnspan => 2); my $txt = $top -> Scrolled ( 'Text', -scrollbars=>"osoe", -font=>$main::dialog_font, -wrap=>'none', -width=>80, -height=>15 ) -> grid ( -row=>2, -column=>1, -columnspan=>2 ); $txt->menu(undef); $txt->insert('end', "$dtext"); $top -> Button ( -text=>"Save", -activebackground => 'white', -command => sub { &save_file ( "$main::bookmark_file", $txt -> get ( '0.0', 'end' ) ); &bm_update; #&draw_menu; } ) -> grid( -row=>4, -column=>1, -sticky=>"ne" ); my $but_close = $top -> Button ( -text=>"Close", -activebackground=>'white', -command => sub { destroy $top; } ) -> grid ( -row=>4, -column=>2, -sticky=>"nw" ); $top->resizable(0,0); } 1;