App-ClusterSSH
view release on metacpan or search on metacpan
lib/App/ClusterSSH.pm view on Meta::CPAN
[ "command",
"Re-add closed session(s)",
-command => sub { $self->re_add_closed_sessions() },
],
'' # this is needed as build_host_menu always drops the
# last item
];
$menus{hosts} = $menus{bar}->cascade(
-label => 'Hosts',
-tearoff => 1,
-menuitems => $host_menu_items
);
$host_menu_static_items = scalar( @{$host_menu_items} );
$menus{send} = $menus{bar}->cascade(
-label => 'Send',
-tearoff => 1,
);
$self->populate_send_menu();
$menus{help} = $menus{bar}->cascade(
-label => 'Help',
-menuitems => [
[ 'command', "About", -command => sub { $windows{help}->Show } ],
[ 'command', "Documentation",
-command => sub { $windows{manpage}->Show }
],
],
-tearoff => 0,
);
$windows{main_window}->bind( '<KeyPress>' => [ $self => 'key_event' ], );
$windows{main_window}
->bind( '<KeyRelease>' => [ $self => 'key_event' ], );
$self->debug( 2, "create_menubar: completed" );
}
sub populate_send_menu_entries_from_xml {
my ( $self, $menu, $menu_xml ) = @_;
foreach my $menu_ref ( @{ $menu_xml->{menu} } ) {
if ( $menu_ref->{menu} ) {
$menus{ $menu_ref->{title} }
= $menu->cascade( -label => $menu_ref->{title}, );
$self->populate_send_menu_entries_from_xml(
$menus{ $menu_ref->{title} }, $menu_ref, );
if ( $menu_ref->{detach} && $menu_ref->{detach} =~ m/y/i ) {
$menus{ $menu_ref->{title} }->menu->tearOffMenu()->raise;
}
}
else {
my $accelerator = undef;
if ( $menu_ref->{accelerator} ) {
$accelerator = $menu_ref->{accelerator};
}
if ( $menu_ref->{toggle} ) {
$menus{send}->checkbutton(
-label => 'Use Macros',
-variable => \$self->config->{macros_enabled},
-offvalue => 'no',
-onvalue => 'yes',
-accelerator => $accelerator,
);
}
else {
my $command = undef;
if ( $menu_ref->{command} ) {
$command = sub {
$self->send_text_to_all_servers(
$menu_ref->{command}[0] );
};
}
$menu->command(
-label => $menu_ref->{title},
-command => $command,
-accelerator => $accelerator,
);
}
}
}
return $self;
}
sub populate_send_menu {
my ($self) = @_;
# my @menu_items = ();
if ( !-r $self->config->{send_menu_xml_file} ) {
$self->debug( 2, 'Using default send menu' );
$menus{send}->checkbutton(
-label => 'Use Macros',
-variable => \$self->config->{macros_enabled},
-offvalue => 'no',
-onvalue => 'yes',
-accelerator => $self->config->{key_macros_enable},
);
$menus{send}->command(
-label => 'Remote Hostname',
-command => sub {
$self->send_text_to_all_servers(
$self->config->{macro_servername} );
},
-accelerator => $self->config->{key_clientname},
);
$menus{send}->command(
-label => 'Local Hostname',
-command => sub {
$self->send_text_to_all_servers(
$self->config->{macro_hostname} );
},
-accelerator => $self->config->{key_localname},
);
$menus{send}->command(
-label => 'Username',
-command => sub {
$self->send_text_to_all_servers(
$self->config->{macro_username} );
},
-accelerator => $self->config->{key_username},
);
$menus{send}->command(
-label => 'Test Text',
-command => sub {
$self->send_text_to_all_servers( 'echo ClusterSSH Version: '
. $self->config->{macro_version}
. $self->config->{macro_newline} );
},
);
$menus{send}->command(
-label => 'Random Number',
-command => sub {
$self->send_variable_text_to_all_servers(
sub { int( rand(1024) ) } ),
;
},
);
}
else {
$self->debug(
2,
'Using xml send menu definition from ',
$self->config->{send_menu_xml_file}
);
eval { require XML::Simple; };
die 'Cannot load XML::Simple - has it been installed? ', $@ if ($@);
my $xml = XML::Simple->new( ForceArray => 1, );
my $menu_xml = $xml->XMLin( $self->config->{send_menu_xml_file} );
( run in 0.759 second using v1.01-cache-2.11-cpan-bbe5e583499 )