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;