The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Prima qw(Application Themes ScrollBar Buttons InputLine ExtLists Notebooks ScrollWidget);

=pod 

=head1 NAME

examples/theme.pl - Theme selector

=head1 FEATURES

Demonstrates usage of L<Prima::Themes>, stores selected theme
in rc file. Other programs can use the selection by running

perl -MPrima::Themes program

=cut

my ( $tab );

my $w = Prima::MainWindow-> create(
	text => 'Theme selector',
	designScale => [7, 16],
	menuItems => [
		[ 'Options' => [
			[ 'Save configuration' => sub { 
				Prima::message( Prima::Themes::save_rc() ? "Saved ok, restart to reload" : "Error saving:$!");
			} ],
		]],
	],
);

for (@INC) {
	next unless -d "$_/Prima/themes";
	next unless opendir D, "$_/Prima/themes";
	for ( readdir D) { 
		next unless m/^(.*)\.pm$/;
		eval "use Prima::themes::$1";
	}
	closedir D;
}

my @list = Prima::Themes::list;
my $checklist = $w-> insert( CheckList => 
	pack => { side => 'left', fill => 'y', padx => 5, pady => 5},
	items => \@list,
	width => 100,
	onChange => \&test,
	vector => '',
);

my $playground = $w-> insert( Widget => 
	size => [ 250, 250],
	pack => { side => 'right', padx => 5, pady => 5, expand => 1, fill => 'both'},
	packPropagate => 0,
);

$w-> set( centered => 1);


# select active themes
my %list = map { $list[$_] => $_ } 0..$#list;
$checklist-> button( $list{$_}, 1) for Prima::Themes::list_active;

test();

run Prima;
exit;

sub test
{
	$tab-> destroy if $tab;
	my @themes;	
	if (  $checklist-> count) {
		for ( 0 .. $checklist-> count - 1) { 
			push @themes, $checklist-> get_item_text($_) if $checklist-> button($_);
		}
	}
	Prima::Themes::select( @themes);
	my $failed = join(',', grep { ! Prima::Themes::active $_ } @themes);
	Prima::message("Theme(s) $failed failed to load") if length $failed;
	$tab = $playground-> insert( TabbedScrollNotebook => 
		pack => { fill => 'both', expand => 1},
		tabs => ['Tab'],
	);

	$tab-> insert( ScrollBar => 
		vertical => 0,
		pack => { side => 'bottom', fill => 'x', },
	);
	$tab-> insert( ScrollBar => 
		vertical => 1,
		partial  => 50,
		pack => { side => 'right', fill => 'y', },
	);
	$tab-> insert( ListBox => 
		pack => { side => 'right', fill => 'both', expand => 1, padx => 5, pady => 5},
		items => [ qw(1 2 3 4 5)],
		focusedItem => 1,
	);
	$tab-> insert( Button => 
		pack => { side => 'top', anchor => 'w', padx => 5, pady => 5},
		text => 'Normal',
	);
	$tab-> insert( Button => 
		pack => { side => 'top', anchor => 'w', padx => 5, pady => 5},
		text => 'Disabled',
		enabled => 0,
	);
	$tab-> insert( Button => 
		pack => { side => 'top', anchor => 'w', padx => 5, pady => 5},
		text => 'Default',
		default => 1,
	);
	$tab-> insert( Radio => 
		pack => { side => 'top', anchor => 'w', padx => 5, pady => 5},
		text => 'Radio',
	);
	$tab-> insert( CheckBox => 
		pack => { side => 'top', anchor => 'w', padx => 5, pady => 5},
		text => 'CheckBox',
	);
	$tab-> insert( InputLine => 
		pack => { side => 'bottom', anchor => 's', fill => 'x', expand => 1, padx => 5, pady => 5},
	);
}