JaM
view release on metacpan or search on metacpan
lib/JaM/GUI/Folders.pm view on Meta::CPAN
my $folder_object = $self->popup_folder_object;
my $dialog;
$dialog = $self->folder_dialog (
title => "Create Folder",
label => "Enter name for the new folder",
value => "",
cb => sub {
my ($text) = @_;
return $self->create_folder (
parent_folder_object => $folder_object,
name => $text->get_text,
);
}
);
1;
}
sub cb_tree_click {
my $self = shift; $self->trace_in;
my %par = @_;
my ($type, $tree, $node) = @par{'type','tree','node'};
my $opened = $type eq 'expand' ? 1 : 0;
my $folder_object = JaM::Folder->by_id($node->{folder_id});
$folder_object->opened($opened);
$folder_object->save;
1;
}
# callback for folder selection
sub cb_folder_select {
my $self = shift; $self->trace_in;
my ($ctree, $row) = @_;
my $node = $ctree->node_nth( $row );
my $folder_object = JaM::Folder->by_id($node->{folder_id});
$self->selected_folder_object ( $folder_object );
$self->comp('mail')->no_status_change_on_show(1);
$self->comp('subjects')->show (
folder_object => $folder_object,
);
$self->comp('mail')->no_status_change_on_show(0);
my $gui = $self->comp('gui');
$gui->no_subjects_update (1);
$gui->update_folder_limit (
folder_object => $folder_object
);
$gui->no_subjects_update (0);
1;
}
# update ctree item for a specific folder from database
sub update_folder_item {
my $self = shift; $self->trace_in;
my %par = @_;
my ($folder_object, $no_folder_stati) =
@par{'folder_object','no_folder_stati'};
$folder_object ||= $self->selected_folder_object;
$self->debug ("folder_id=".$folder_object->id);
my $name = $folder_object->name;
my $item = $self->gtk_folder_items->{$folder_object->id};
my $widget = $self->gtk_folders_tree;
my ($text, $spacing, $pixmap, $mask) = $widget->node_get_pixtext( $item, 0 );
if ( $name ne $text ) {
$self->debug ("folder name changed: old=$text new=$name");
$widget->node_set_pixtext( $item, 0, $name, $spacing, $pixmap, $mask );
}
my ($mail_sum, $mail_read_sum) = ($folder_object->mail_sum,
$folder_object->mail_read_sum);
$self->debug ("mail_sum=$mail_sum, mail_read_sum=$mail_read_sum");
$widget->set_text( $item, 1, $mail_sum -
$mail_read_sum);
$widget->set_text( $item, 2, $mail_sum);
$widget->node_set_row_style(
$item, ($mail_read_sum < $mail_sum) ?
$self->gtk_unread_style : $self->gtk_read_style
);
$self->update_folder_stati
if not $no_folder_stati;
1;
}
sub update_folder_stati {
my $self = shift; $self->trace_in;
$self->debug ("updating folder read/unread stati");
JaM::Folder->recalculate_folder_stati ( dbh => $self->dbh );
my $folder_items = $self->gtk_folder_items;
my $folders_tree = $self->gtk_folders_tree;
my $all_folders = JaM::Folder->all_folders;
my ($folder_id, $folder, $status, $style);
while ( ($folder_id, $folder) = each %{$all_folders} ) {
next if $folder_id == 1;
$status = $folder->status;
if ( $folder_items->{$folder_id}->{status} ne $status ) {
$style = $self->gtk_read_style;
$style = $self->gtk_unread_style if $status eq 'N';
$style = $self->gtk_unread_child_style if $status eq 'NC';
$folders_tree->node_set_row_style(
$folder_items->{$folder_id}, $style
);
$folder_items->{$folder_id}->{status} = $status;
}
}
1;
}
sub create_folder {
my $self = shift; $self->trace_in;
my %par = @_;
my ($parent_folder_object, $name) =
@par{'parent_folder_object','name'};
my $parent_id = $parent_folder_object->id;
$self->debug ("parent_id=$parent_id name=$name");
# check if name clashes
my $childs_with_same_name = JaM::Folder->query (
where => "parent_id = ? and name=?",
params => [ $parent_folder_object->id, $name ]
);
if ( keys %{$childs_with_same_name} ) {
$self->message_window (
message => "A folder with this name already exists."
);
return;
}
my $folder_items = $self->gtk_folder_items;
my $folders_tree = $self->gtk_folders_tree;
my $parent_item = $folder_items->{$parent_folder_object->id};
my $sibling_item;
my $sibling_folder_object;
if ( $parent_folder_object->leaf ) {
( run in 1.387 second using v1.01-cache-2.11-cpan-f56aa216473 )