X-Git-Url: http://git.shiar.net/descalc.git/blobdiff_plain/4e1d9535fda6685e53ce570ca4e4cd6c260f55d3..090ac304afe801cb3e72ced0941ff2a874a98cc9:/15_menu.pm diff --git a/15_menu.pm b/15_menu.pm deleted file mode 100644 index 9ae8c03..0000000 --- a/15_menu.pm +++ /dev/null @@ -1,151 +0,0 @@ -# menu for DCT, by Shiar - -# 1.11.0 200410282200 - display-specific code in evals -# 1.10.4 200410151900 - remove explicit call to redraw on error -# 1.10.3 200410150030 - add quit at F10 in main menu (after running other modules) -# - don't show undefined menu entries (skippable) -# 1.10.2 200410122345 - addmenu() function to add submenus -# 1.10.1 200410122210 - @menus global; unit+math items added in those modules -# 1.09.1 200410112150 - everything related to menus moved here -# 1.06.1 200409152332 - moved @menus from 1.6 main - -#todo: merge basics back into main; i/o functions in display modules -# (menu can also be disabled at this level, without too high cost) -#todo: always remember parent menus (so no need to store back-item (0) -# and ability to show higher levels) -#todo: also store menu hash (to add additional items to a specific submenu) - -use strict; -use warnings; - -my %falias = ( - "\033" => 0, # esc - "\033\117\120" => 1, # f1 - "\033\133\061\061\176" => 1, # f1 - "\033\133\061\062\176" => 2, # f2 - "\033\133\061\063\176" => 3, # f3 - "\033\133\061\064\176" => 4, # f4 - "\033\117\121" => 2, # f2 - "\033\117\122" => 3, # f3 - "\033\117\123" => 4, # f4 - "\033\133\061\065\176" => 5, # f5 - "\033\133\061\067\176" => 6, # f6 - "\033\133\061\070\176" => 7, # f7 - "\033\133\061\071\176" => 8, # f8 - "\033\133\062\060\176" => 9, # f9 - "\033\133\062\061\176" => 10, # f10 - "\033\133\062\063\176" => 11, # f11/F1 - "\033\133\062\064\176" => 12, # f12/F2 - "\033\133\062\065\176" => 13, # F3 - "\033\133\062\066\176" => 14, # F4 - "\033\133\062\070\176" => 15, # F5 - "\033\133\062\071\176" => 16, # F6 - "\033\133\063\061\176" => 17, # F7 - "\033\133\063\062\176" => 18, # F8 - "\033\133\063\063\176" => 19, # F9 - "\033\133\063\064\176" => 20, # F10 - "\033\133\062\063\073\062\176" => 21, # F11 - "\033\133\062\064\073\062\176" => 22, # F12 - "\033\061" => 1, # alt+1 - "\033\062" => 2, # alt+2 - "\033\063" => 3, # alt+3 - "\033\064" => 4, # alt+4 - "\033\065" => 5, # alt+5 - "\033\066" => 6, # alt+6 - "\033\067" => 7, # alt+7 - "\033\070" => 8, # alt+8 - "\033\071" => 9, # alt+9 - "\033\060" => 10, # alt+0 -); # %falias - -#our @menus = ([qw(refresh quit)]); -our @menus = ( - [qw(refresh prog> mode>1)], # main - [qw(main>0 number_format angle_measure coord_system)], #1 mode -); # @menus - -sub addmenu { - my $parent = shift; - push @menus, ["$parent->[0]>$parent->[1]"]; # create new menu - my $menuthis = $#menus; - push @{$menus[$parent->[1]]}, shift(@_).">$menuthis"; # link from parent - ref $_ ? addmenu([$_->[0], $menuthis], @$_) # add subsubmenu - : push @{$menus[$menuthis]}, $_ for @_; # add menu items - return $menuthis; -} # addmenu - -#my @menu = []; -our @menu; -our $menumin = 0; - -push @{$hook{init}}, sub { - $menus[0][10] = "quit"; - @menu = @{$menus[0]}; - $set{height}--; # make space for menubar - $set{menushow} = int($set{width}/(4+$set{width}/20))+1 # menu items to show simultaneously - unless defined $set{menushow}; -}; # init - -my %show = ( - curses => q{ - clrtoeol($set{height}+2, 1); - my $nr = -1; - for (grep exists $menu[$_], $menumin+1..$menumin+$set{menushow}) { - $nr++; - next unless defined $menu[$_]; - my $sub = (my $s = $menu[$_]) =~ s/>\d+$//; - addstr($set{height}+2, $set{width}/$set{menushow}*$nr, $_); - attron(A_REVERSE); - addstr($s); - attroff(A_REVERSE); - addch('>') if $sub; # indicate submenu - } # display menu txts - }, - stdout => q{ - my $nr = -1; - for (grep exists $menu[$_], $menumin+1..$menumin+$set{menushow}) { - $nr++; - next unless defined $menu[$_]; - my $sub = (my $s = $menu[$_]) =~ s/>\d+$//; - print " $_:$s"; - print ">" if $sub; # indicate submenu - } # display menu txts - print "\n> "; - }, -); - -sub showmenu() { - eval $_ if local $_ = $show{$::modules{disp}{name}}; -} # showmenu - -$action{more} = [-1, sub { - $menumin += $set{menushow}; - $menumin = 0 if $menumin>=$#menu; - showmenu(); -}]; # tab - -push @{$hook{refresh}}, sub { - showmenu(); -}; # refresh - -unshift @{$hook{precmd}}, sub { - return unless exists $falias{$_}; # not a function key - return if $_ = $menu[$falias{$_}]; # execute found menu item instead - error("no such menu entry"); - return 1; -}; # precmd - -push @{$hook{precmd}}, sub { - return unless />(\d+)$/; - @menu = @{$menus[$1]}; # go to submenu - $menumin = 0; # reset to first item - showmenu(); # redraw - return 1; -}; # precmd - -return { - author => "Shiar", - title => "menu", - version => "1.11", -}; -