Improve send menu creation

Create menus on the fly instead of in a chunk to allow for adding
in 'detach' to xml
This commit is contained in:
Duncan Ferguson 2009-08-24 22:23:41 +01:00
parent 9b5eb2b2f0
commit aec796247e

View file

@ -2012,7 +2012,12 @@ sub create_menubar() {
], ],
); );
$menus{send} = create_send_menu(); $menus{send} = $menus{bar}->cascade(
-label => 'Send',
-tearoff => 1,
);
populate_send_menu();
$menus{help} = $menus{bar}->cascade( $menus{help} = $menus{bar}->cascade(
-label => 'Help', -label => 'Help',
@ -2033,55 +2038,54 @@ sub create_menubar() {
logmsg( 2, "create_menubar: completed" ); logmsg( 2, "create_menubar: completed" );
} }
sub create_send_menu_entries_from_xml { sub populate_send_menu_entries_from_xml {
my ($menu_xml) = @_; my ( $menu, $menu_xml ) = @_;
my $menu_items;
foreach my $menu_ref ( @{ $menu_xml->{menu} } ) { foreach my $menu_ref ( @{ $menu_xml->{menu} } ) {
my @menu_entry;
if ( $menu_ref->{menu} ) { if ( $menu_ref->{menu} ) {
push( @menu_entry, 'cascade' ); $menus{ $menu_ref->{title} }
push( @menu_entry, $menu_ref->{title} ); = $menu->cascade( -label => $menu_ref->{title}, );
push( @menu_entry, populate_send_menu_entries_from_xml(
'-menuitems' => create_send_menu_entries_from_xml($menu_ref) $menus{ $menu_ref->{title} },
$menu_ref,
); );
if ( $menu_ref->{detach} && $menu_ref->{detach} =~ m/y/i ) {
$menus{ $menu_ref->{title} }->menu->tearOffMenu()->raise;
}
} }
else { else {
push( @menu_entry, 'command' ); my $command = undef;
push( @menu_entry, $menu_ref->{title} ); my $accelerator = undef;
if ( $menu_ref->{command} ) { if ( $menu_ref->{command} ) {
push( $command = sub {
@menu_entry, send_text_to_all_servers( $menu_ref->{command}[0] );
'-command', };
[ sub {
send_text_to_all_servers(
$menu_ref->{command}[0] );
}
]
);
} }
if ( $menu_ref->{accelerator} ) { if ( $menu_ref->{accelerator} ) {
push( @menu_entry, $accelerator = $menu_ref->{accelerator};
'-accelerator', $menu_ref->{accelerator}[0] );
} }
$menu->command(
-label => $menu_ref->{title},
-command => $command,
-accelerator => $accelerator,
);
} }
push( @$menu_items, [@menu_entry] );
} }
return $menu_items; return;
} }
sub create_send_menu { sub populate_send_menu {
my @menu_items = ();
# my @menu_items = ();
if ( !-r $config{send_menu_xml_file} ) { if ( !-r $config{send_menu_xml_file} ) {
logmsg( 2, 'Using default send menu' ); logmsg( 2, 'Using default send menu' );
@menu_items = [ $menus{send}->command(
[ "command" => "Hostname", -label => 'Hostname',
-command => [ \&send_text_to_all_servers, '%s' ], -command => [ \&send_text_to_all_servers, '%s' ],
-accelerator => $config{key_clientname}, -accelerator => $config{key_clientname},
], );
];
} }
else { else {
logmsg( logmsg(
@ -2098,14 +2102,10 @@ sub create_send_menu {
logmsg( 3, 'xml send menu: ', $/, $xml->XMLout($xml_data) ); logmsg( 3, 'xml send menu: ', $/, $xml->XMLout($xml_data) );
@menu_items = create_send_menu_entries_from_xml($xml_data); populate_send_menu_entries_from_xml( $menus{send}, $xml_data );
} }
return $menus{bar}->cascade( return;
-label => 'Send',
-menuitems => @menu_items,
-tearoff => 1,
);
} }
### main ### ### main ###
@ -2786,6 +2786,7 @@ Submenus can also be specified as follows:
<send_menu> <send_menu>
<menu title="Default Entries"> <menu title="Default Entries">
<detach>yes</detach>
<menu title="Hostname"> <menu title="Hostname">
<command>%s</command> <command>%s</command>
<accelerator>ALT-n</accelerator> <accelerator>ALT-n</accelerator>