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;
use Prima::Buttons;
use Prima::ComboBox;
use Prima::Edit;
use Prima::ImageViewer;
use Prima::Label;
use Prima::Sliders;
use Prima::Image::TransparencyControl;

package Prima::Image::gif;
use vars qw(@ISA);
@ISA = qw(Prima::Dialog);

sub profile_default
{
	my $def = $_[ 0]-> SUPER::profile_default;
	my %prf = (
		width    => 480,
		text     => 'Gif89a filter',
		height   => 300,
		centered => 1,
		designScale => [ 7, 16],
	);
	@$def{keys %prf} = values %prf;
	return $def;
}

sub init
{
	my $self = shift;
	my %profile = $self-> SUPER::init(@_);
	my $a = $self-> insert( qq(Prima::CheckBox) => 
		origin => [ 4, 261],
		name => 'Transparent',
		size => [ 133, 36],
		text => '~Transparent',
		delegations => ['Check'],
	);
	my $b = $self-> insert( qq(Prima::CheckBox) => 
		origin => [ 144, 261],
		name => 'Interlaced',
		size => [ 100, 36],
		text => '~Interlaced',
	);
	$self-> insert( qq(Prima::Image::TransparencyControl) => 
		origin => [ 4, 100],
		size => [ 364, 158],
		text => '',
		name => 'TC',
	);
	my $se = $self-> insert( qq(Prima::Edit) => 
		origin => [ 10, 10],
		name => 'Comment',
		size => [ 350, 71],
		vScroll => 1,
		text => '',
	);
	$self-> insert( qq(Prima::Label) => 
		origin => [ 10, 85],
		size => [ 100, 20],
		text => '~Comment',
		focusLink => $se,
	);
	$self-> insert( qq(Prima::Button) => 
		origin => [ 380, 259],
		name => 'OK',
		size => [ 96, 36],
		text => '~OK',
		default => 1,
		modalResult => mb::OK,
		delegations => ['Click'],
	);
	$self-> insert( qq(Prima::Button) => 
		origin => [ 380, 213],
		size => [ 96, 36],
		text => 'Cancel',
		modalResult => mb::Cancel,
	);
	return %profile;
}


sub transparent
{
	my $self = $_[0];
	$self-> Transparent-> checked( $_[1]);
	$self-> TC-> enabled( $_[1]);
}

sub Transparent_Check
{
	my ( $self, $tr) = @_;
	$self-> transparent( $tr-> checked);
}

sub on_change
{
	my ( $self, $codec, $image) = @_;
	$self-> {image} = $image;
	return unless $image;
	$self-> Interlaced-> checked( exists( $image-> {extras}-> {interlaced}) ? 
		$image-> {extras}-> {interlaced} : $codec-> {saveInput}-> {interlaced});
	$self-> transparent( $image-> {extras}-> {transparentColorIndex} ? 1 : 0);
	$self-> TC-> image( $image);
	$self-> TC-> index( exists( $image-> {extras}-> {transparentColorIndex}) ? 
		$image-> {extras}-> {transparentColorIndex} : 0);
	$self-> Comment-> text( exists( $image-> {extras}-> {comment}) ? 
		$image-> {extras}-> {comment} : ($codec-> {saveInput}-> {comment}));
}

sub OK_Click
{
	my $self = $_[0];
	if ( $self-> Transparent-> checked) {
		$self-> {image}-> {extras}-> {transparentColorIndex} = $self-> TC-> index;
	} else {
		delete $self-> {image}-> {extras}-> {transparentColorIndex};
	}
	$self-> {image}-> {extras}-> {interlaced} = $self-> Interlaced-> checked;
	my $x = $self-> Comment-> text;
	if ( length $x) {
		$self-> {image}-> {extras}-> {comment} = $x;
	} else {
		delete $self-> {image}-> {extras}-> {comment};
	}
	delete $self-> {image};
	$self-> TC-> image( undef);
}

sub save_dialog { Prima::Image::gif-> create }

1;