=pod
=head1 NAME
examples/keyselector.pl - Interactive key selection and storage
=head1 FEATURES
Contains an example how to use standard key selection and conversion
features of Prima::KeySelector. A typical program with interactively
configurable keys reflects the changes of key assignments in menu
hot-keys and initialization file. In the example, changes are stored
in ~/.prima/keyselector INI-file.
=cut
use strict;
use Prima qw(Application KeySelector IniFile );
my $w = Prima::MainWindow-> create(
text => 'Key selector',
packPropagate => 0,
menuItems => [
[ File => [
['FileExit' => "~Exit and save changes" => '' , '@X', => sub { $_[0]-> close } ],
['FileQuit' => "Exit and ~discard changes", '', km::Alt|km::Shift|ord('X') => sub {
$_[0]-> {saveOnExit} = 0;
$_[0]-> close;
}],
]],
[ Edit => [
[ 'EditApply' => "~Apply changes", '', '^A' => sub {
shift-> Editor-> apply;
}],
[ 'EditDefault' => "~Restore to defaults" => sub {
shift-> Editor-> reset_to_defaults;
}],
]],
[],
[ Help => sub { $::application-> open_help("file://$0") } ],
],
onClose => sub { $_[0]-> menu-> keys_save( $_[0]-> {iniFile}-> section('Options')) if $_[0]-> {saveOnExit}},
);
$w-> {saveOnExit} = 1;
$w-> {iniFile} = Prima::IniFile-> create(
file => Prima::Utils::path('keyselector'),
);
$w-> menu-> keys_load($w-> {iniFile}-> section( 'Options'), 1); # 1 is because we're lazy and want menu accels to be autogenerated
$w-> insert( 'Prima::KeySelector::MenuEditor' =>
name => 'Editor',
pack => { expand => 1, fill => 'both'},
menu => $w-> menu,
);
run Prima;