package GCExtract;

###################################################
#
#  Copyright 2005-2007 Tian
#
#  This file is part of GCstar.
#
#  GCstar is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  GCstar is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with GCstar; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
###################################################

use strict;
use Gtk2;

{
    package GCExtractDialog;

    use base qw 'Gtk2::Dialog';

    sub show
    {
        my $self = shift;
        return if $self->{cancelled};
        $self->show_all;
        my $code = $self->run;
        if ($code eq 'ok')
        {
            foreach (@{$self->{extractedArray}})
            {
                $self->{info}->{$_} = ''
                    if (! $self->{$_.'Cb'}->get_active);
                $self->{panel}->$_($self->{info}->{$_}->{value})
                    if $self->{info}->{$_} && $self->{info}->{$_}->{value};
            }
        }
        $self->hide;
    }

    sub setInfo
    {
        my ($self, $infoExtractor, $panel) = @_;
        my $info = $infoExtractor->getInfo;
        if (!defined $info)
        {
            $self->{cancelled} = 1;
            return;
        }
        $self->{cancelled} = 0;
        ($self->{info}, $self->{panel}) = ($info, $panel);
        foreach (@{$self->{extractedArray}})
        {
            next if ! $self->{$_};
            if ($info->{$_})
            {
                $self->{$_}->set_text($info->{$_}->{displayed});
                $self->{$_}->set_selectable(1);
            }
            else
            {
                $self->{$_}->set_text('-');
                $self->{$_}->set_selectable(0);
            }
        }
    }
    
    sub new
    {
        my ($proto, $parent, $model, $infoExtractor) = @_;
        my $class = ref($proto) || $proto;
        my $self  = $class->SUPER::new($parent->{lang}->{ExtractTitle},
                              $parent,
                              [qw/modal destroy-with-parent/],
                              'gtk-cancel' => 'cancel'
                              );
        bless($self, $class);

        $self->{extractedArray} = $infoExtractor->getFields;
        #['length', 'size', 'type', 'audioEncoding'];

        my $table = new Gtk2::Table(4,2);
        $table->set_col_spacings(10);
        $table->set_row_spacings(10);
        $table->set_border_width(10);
        
        my $i = 0;
        foreach (@{$self->{extractedArray}})
        {
            (my $capsField = $_) =~ s/^(.)/\U$1\E/;
            $self->{$_.'Cb'} = new Gtk2::CheckButton($model->getDisplayedLabel($_).$parent->{lang}->{Separator});
            $self->{$_.'Cb'}->set_active(1);
            $self->{$_} = new Gtk2::Label;
            $table->attach($self->{$_.'Cb'}, 0, 1, $i, $i+1, 'fill', 'fill', 0, 0);
            $table->attach($self->{$_}, 1, 2, $i, $i+1, 'fill', 'fill', 0, 0);
            $i++;
        }

        $self->vbox->pack_start($table,1,1,0);

        $self->{importButton} = new Gtk2::Button($parent->{lang}->{ExtractImport});
        $self->add_action_widget($self->{importButton}, 'ok');

        $self->{parent} = $parent;
        return $self;
    }
}

use GCExportImport;

{
    package GCItemExtracter;
    use base 'GCExportImportBase';
    
    sub getInfo
    {
    }

    sub new
    {
        my ($proto, $parent, $fileName, $panel, $model) = @_;
        my $class = ref($proto) || $proto;
        
        my $fileSize = -s $fileName;

        my $self = {fileName => $fileName,
                    fileSize => $fileSize,
                    parent => $parent,
                    panel => $panel,
                    model => $model};
        
        bless($self, $class);
        
        return $self;
    }
}


1;
