The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Kephra::App::MenuBar;
our $VERSION = 0.08;

use strict;
use warnings;

my $bar;
sub _ref    { $bar = ref $_[0] eq 'Wx::MenuBar' ? $_[0] : $bar }
sub _config { Kephra::API::settings()->{app}{menubar} }

sub create {
	my $menubar_def = Kephra::Config::File::load_from_node_data( _config() );
	unless ($menubar_def) {
		$menubar_def = Kephra::Config::Default::mainmenu();
	}
	my $menubar    = Wx::MenuBar->new();
	my $m18n = Kephra::Config::Localisation::strings()->{app}{menu};
	my ($pos, $menu_name);
	for my $menu_def ( @$menubar_def ){
		for my $menu_id (keys %$menu_def){
			# removing the menu command if there is one
			$pos = index $menu_id, ' ';
			if ($pos > -1){
				if ('menu' eq substr $menu_id, 0, $pos ){
					$menu_name = substr ($menu_id, $pos+1);
				# ignoring menu structure when command other that menu or blank
				} else { next }
			} else { 
				$menu_name = $menu_id;
			}
			$menubar->Append(
				Kephra::Menu::create_static( $menu_name, $menu_def->{$menu_id}),
				$m18n->{label}{$menu_name}
			);
		}
	}
	_ref($menubar);
	show();
}

sub get_visibility    { _config()->{visible} }
sub switch_visibility { _config()->{visible} ^= 1; show(); }
sub show {
	Kephra::App::Window::_ref()->SetMenuBar( get_visibility() ? _ref() : undef );
}

1;