package Kephra::App::ContextMenu;
our $VERSION = '0.10';
use strict;
use warnings;
sub get{ &Kephra::Menu::ready || Wx::Menu->new() }
#
sub create_all {
my $config = Kephra::API::settings()->{app}{contextmenu};
my $default_file = Kephra::Config::filepath($config->{defaultfile});
my $default_menu_def = Kephra::Config::File::load($default_file);
unless ($default_menu_def) {
$default_menu_def = Kephra::Config::Default::contextmenus();
}
for my $menu_id (keys %{$config->{id}}){
if (not ref $menu_id){
my $start_node = $config->{id}{$menu_id};
substr($start_node, 0, 1) eq '&'
? Kephra::Menu::create_dynamic($menu_id, $start_node)
: do {
my $menu_def = Kephra::Config::Tree::get_subtree
($default_menu_def, $start_node);
Kephra::Menu::create_static ($menu_id, $menu_def);
}
} elsif (ref $menu_id eq 'HASH'){
my $menu = $config->{id}{$menu_id};
next unless exists $menu->{file};
my $file_name = $Kephra::temp{path}{config} . $menu->{file};
next unless -e $file_name;
my $menu_def = Kephra::Config::File::load($file_name);
$menu_def = Kephra::Config::Tree::get_subtree($menu_def, $menu->{node});
Kephra::Menu::create_static($menu_id, $menu_def);
}
}
}
# connect the static and build the dynamic
sub connect_all {}
# to editpanel can connect 2 menus,
sub connect_tabbar {
my $tabbar = Kephra::App::TabBar::_ref();
if ( Kephra::App::TabBar::get_contextmenu_visibility() ) {
connect_widget( $tabbar, Kephra::App::TabBar::_config()->{contextmenu} )
} else {
disconnect_widget($tabbar)
}
}
sub connect_widget {
my $widget = shift;
my $menu_id = shift;
Wx::Event::EVT_RIGHT_DOWN ($widget, sub {
my ($widget, $event) = @_;
my $menu = get($menu_id);
$widget->PopupMenu($menu, $event->GetX, $event->GetY) if Kephra::Menu::is($menu);
} );
}
sub disconnect_widget{
my $widget = shift;
Wx::Event::EVT_RIGHT_DOWN($widget, sub {} ) if substr(ref $widget, 0, 4) eq 'Wx::';
}
1;