package LDFM::MainController;
use utf8;
use warnings;
use strict;
use base 'Gtk2::GladeXML::Simple';
use Gtk2::Ex::Simple::List;
use Readonly;
use Path::Class;
our $VERSION = '0.01';
sub new {
my ($class,%params)=@_;
my $self=$class->SUPER::new($params{glade_file});
$self->simplify_list('left');
$self->simplify_list('right');
$self->update_list_with_path('left',$ENV{HOME});
$self->update_list_with_path('right','/');
return $self;
}
sub simplify_list {
my ($self,$side)=@_;
my $list_name="${side}_list";
$self->{$list_name}=Gtk2::Ex::Simple::List->new_from_treeview(
$self->{$list_name},
'File' => 'text',
'Type' => 'text',
'Size' => 'int',
);
$self->{"${side}_data"}=$self->{$list_name}->{data};
return;
}
sub update_list_with_path {
my ($self,$side,$path)=@_;
my $newpath;
if ($path eq '..') {
$newpath=$self->{"cur_${side}_path"}->parent;
}
else {
$newpath=dir($path)->absolute($self->{"cur_${side}_path"})->cleanup;
}
return unless -d $newpath;
$self->{"cur_${side}_path"}=$newpath;
$self->{"${side}_path"}->set_text($newpath->stringify);
my @dir_list=();
for my $item ($newpath->children(all=>1)) {
my @row=($item->relative($newpath)->stringify);
if ($item->isa('Class::Path::Dir')) {
push @row,'DIR',0;
}
else {
push @row,'FILE',-s $item;
}
push @dir_list,[@row];
}
@{$self->{"${side}_data"}}=@dir_list;
}
sub set_left_path {
my ($self,$widget)=@_;
$self->update_list_with_path('left',$widget->get_text());
return;
}
sub set_right_path {
my ($self,$widget)=@_;
$self->update_list_with_path('right',$widget->get_text());
return;
}
sub use_a_row {
my ($self,$side,$tree_path)=@_;
my ($row_num)=$tree_path->get_indices();
my $row_ref=$self->{"${side}_data"}->[$row_num];
my $relpath=$row_ref->[0];
$self->update_list_with_path($side,$relpath);
}
sub use_left_row {
my ($self,$widget,$tree_path)=@_;
$self->use_a_row('left',$tree_path);
return;
}
sub use_right_row {
my ($self,$widget,$tree_path)=@_;
$self->use_a_row('right',$tree_path);
return;
}
sub quit {
Gtk2->main_quit;
}
1;