.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "Curses::UI::Menubar 3" .TH Curses::UI::Menubar 3 2025-12-14 "perl v5.42.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME Curses::UI::Menubar \- Create and manipulate menubar widgets .SH "CLASS HIERARCHY" .IX Header "CLASS HIERARCHY" .Vb 7 \& Curses::UI::Widget \& | \& +\-\-\-\-Curses::UI::Container \& | \& +\-\-\-\-Curses::UI::Window \& | \& +\-\-\-\-Curses::UI::Menubar .Ve .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 2 \& use Curses::UI; \& my $cui = new Curses::UI; \& \& # define the menu datastructure. \& my $menu_data = [....]; \& \& my $menu = $cui\->add( \& \*(Aqmenu\*(Aq, \*(AqMenubar\*(Aq, \& \-menu => $menu_data \& ); \& \& $menu\->focus(); .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" This class can be used to add a menubar to Curses::UI. This menubar can contain a complete submenu hierarchy. It looks (remotely :\-) like this: .PP .Vb 12 \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& menu1 | menu2 | menu3 | .... \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& +\-\-\-\-\-\-\-\-\-\-\-\-\-+ \& |menuitem 1 | \& |menuitem 2 |+\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ \& |menuitem 3 >>||submenuitem 1 | \& |menuitem 4 ||submenuitem 2 | \& +\-\-\-\-\-\-\-\-\-\-\-\-\-+|submenuitem 3 | \& |submenuitem 4 | \& |submenuitem 5 | \& +\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ .Ve .PP See exampes/demo\-Curses::UI::Menubar in the distribution for a short demo. .SH "STANDARD OPTIONS" .IX Header "STANDARD OPTIONS" This class does not use any of the standard options that are provided by Curses::UI::Widget. .SH "WIDGET\-SPECIFIC OPTIONS" .IX Header "WIDGET-SPECIFIC OPTIONS" There is only one option: \fB\-menu\fR. The value for this option is an ARRAYREF. This ARRAYREF behaves exactly like the one that is described in Curses::UI::MenuListbox. The difference is that for the top\-level menu, you will only use \-submenu\*(Aqs. Example data structure: .PP .Vb 5 \& my $menu1 = [ \& { \-label => \*(Aqoption 1\*(Aq, \-value => \*(Aq1\-1\*(Aq }, \& { \-label => \*(Aqoption 2\*(Aq, \-value => \*(Aq1\-2\*(Aq }, \& { \-label => \*(Aqoption 3\*(Aq, \-value => \*(Aq1\-3\*(Aq }, \& ]; \& \& my $menu2 = [ \& { \-label => \*(Aqoption 1\*(Aq, \-value => \e&sel1 }, \& { \-label => \*(Aqoption 2\*(Aq, \-value => \e&sel2 }, \& { \-label => \*(Aqoption 3\*(Aq, \-value => \e&sel3 }, \& ]; \& \& my $submenu = [ \& { \-label => \*(Aqsuboption 1\*(Aq, \-value => \*(Aq3\-3\-1\*(Aq }, \& { \-label => \*(Aqsuboption 2\*(Aq, \-callback=> \e&do_it }, \& ]; \& \& my $menu3 = [ \& { \-label => \*(Aqoption 1\*(Aq, \-value => \e&sel2 }, \& { \-label => \*(Aqoption 2\*(Aq, \-value => \e&sel3 }, \& { \-label => \*(Aqsubmenu 1\*(Aq, \-submenu => $submenu }, \& ]; \& \& my $menu = [ \& { \-label => \*(Aqmenu 1\*(Aq, \-submenu => $menu1 }, \& { \-label => \*(Aqmenu 2\*(Aq, \-submenu => $menu2 } \& { \-label => \*(Aqmenu 3\*(Aq, \-submenu => $menu3 } \& ]; .Ve .SH METHODS .IX Header "METHODS" .IP \(bu 4 \&\fBnew\fR ( OPTIONS ) .IP \(bu 4 \&\fBlayout\fR ( ) .IP \(bu 4 \&\fBdraw\fR ( BOOLEAN ) .IP \(bu 4 \&\fBfocus\fR ( ) .Sp These are standard methods. See Curses::UI::Widget for an explanation of these. .SH "DEFAULT BINDINGS" .IX Header "DEFAULT BINDINGS" .IP \(bu 4 <\fBescape\fR> .Sp Call the \*(Aqescape\*(Aq routine. This will have the menubar loose its focus and return the value \*(AqESCAPE\*(Aq to the calling routine. .IP \(bu 4 <\fBtab\fR> .Sp Call the \*(Aqreturn\*(Aq routine. This will have the menubar loose its focus and return the value \*(AqLOOSE_FOCUS\*(Aq to the calling routine. .IP \(bu 4 <\fBcursor\-down\fR>, <\fBj\fR>, <\fBenter\fR> .Sp Call the \*(Aqpulldown\*(Aq routine. This will open the menulistbox for the current menu and give that menulistbox the focus. What happens after the menulistbox loses its focus, depends upon the returnvalue of it: .Sp * the value \*(AqCURSOR_LEFT\*(Aq .Sp .Vb 3 \& Call the \*(Aqcursor\-left\*(Aq routine and after that \& call the \*(Aqpulldown\*(Aq routine. So this will open \& the menulistbox for the previous menu. .Ve .Sp * the value \*(AqCURSOR_RIGHT\*(Aq .Sp .Vb 3 \& Call the \*(Aqcursor\-right\*(Aq routine and after that \& call the \*(Aqpulldown\*(Aq routine. So this will open \& the menulistbox for the next menu. .Ve .Sp * the value \*(AqLOOSE_FOCUS\*(Aq .Sp .Vb 2 \& The menubar will keep the focus, but no \& menulistbox will be open. .Ve .Sp * the value \*(AqESCAPE\*(Aq .Sp .Vb 2 \& The menubar will loose its focus and return the \& value \*(AqESCAPE\*(Aq to the calling routine. .Ve .Sp * A CODE reference .Sp .Vb 3 \& The code will be excuted, the menubar will loose its \& focus and the returnvalue of the CODE will be \& returned to the calling routine. .Ve .Sp * Any other value .Sp .Vb 2 \& The menubar will loose its focus and the value will \& be returned to the calling routine. .Ve .IP \(bu 4 <\fBcursor\-left\fR>, <\fBh\fR> .Sp Call the \*(Aqcursor\-left\*(Aq routine. This will select the previous menu. If the first menu is already selected, the last menu will be selected. .IP \(bu 4 <\fBcursor\-right\fR>, <\fBl\fR> .Sp Call the \*(Aqcursor\-right\*(Aq routine. This will select the next menu. If the last menu is already selected, the first menu will be selected. .SH "SEE ALSO" .IX Header "SEE ALSO" Curses::UI, Curses::UI::MenuListbox, Curses::UI::Listbox .SH AUTHOR .IX Header "AUTHOR" Copyright (c) 2001\-2002 Maurice Makaay. All rights reserved. .PP Maintained by Marcus Thiesen (marcus@cpan.thiesenweb.de) .PP This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified under the same terms as perl itself.