JaM
view release on metacpan or search on metacpan
lib/JaM/GUI/IO_Filter.pm view on Meta::CPAN
sub build_edit_pane {
my $self = shift; $self->trace_in;
my %par = @_;
my ($filter_id) = @par{'filter_id'};
$self->blank_edit_pane;
my $filter = JaM::Filter::IO->load (
dbh => $self->dbh,
filter_id => $filter_id
);
$self->dump($filter);
$self->selected_filter($filter);
my $vbox = Gtk::VBox->new(0, 5);
$vbox->set_border_width(5);
$vbox->show;
$self->gtk_filter_frame->add($vbox);
$self->gtk_filter_vbox ($vbox);
# Name and action of the filter
my $table = Gtk::Table->new ( 2, 2, 0 );
$table->show;
$table->set_row_spacings ( 2 );
$table->set_col_spacings ( 2 );
$table->set_border_width ( 0 );
my $label = Gtk::Label->new ("Name");
$label->show;
my $entry = Gtk::Entry->new;
$entry->show;
$table->attach_defaults ($label, 0, 1, 0, 1);
$table->attach_defaults ($entry, 1, 2, 0, 1);
$label = Gtk::Label->new ("Action");
$label->show;
my $radio_vbox = Gtk::VBox->new (0, 0);
$radio_vbox->show;
my $radio1_hbox = Gtk::HBox->new (0, 0);
$radio1_hbox->show;
my $radio1 = Gtk::RadioButton->new ("Drop in folder");
$radio1->show;
my $radio2 = Gtk::RadioButton->new ("Delete", $radio1);
# currently we support only the drop operation
# $radio2->show;
my $folder_entry = Gtk::Entry->new;
$folder_entry->show;
$folder_entry->set_text("Click to select folder");
$folder_entry->set_editable(0);
$self->gtk_filter_folder ( $folder_entry );
my $folder_menu = $self->gtk_folder_menu;
$folder_entry->signal_connect('button_press_event', sub {
my ($widget, $event) = @_;
$folder_menu->popup (undef, undef, undef, $event->{button});
});
$radio1_hbox->pack_start($radio1, 0, 1, 0);
$radio1_hbox->pack_start($folder_entry, 1, 1, 0);
$radio_vbox->pack_start($radio1_hbox, 0, 1, 0);
$radio_vbox->pack_start($radio2, 0, 1, 0);
$table->attach_defaults ($label, 0, 1, 1, 2);
$table->attach_defaults ($radio_vbox, 1, 2, 1, 2);
my $sep = Gtk::HSeparator->new;
$sep->show;
my $op_hbox = Gtk::HBox->new (0, 5);
$op_hbox->show;
my $op_label = Gtk::Label->new(" Rules are combined with... ");
$op_label->show;
my $op_radio_and = Gtk::RadioButton->new ("and");
$op_radio_and->show;
my $op_radio_or = Gtk::RadioButton->new ("or", $op_radio_and);
$op_radio_or->show;
my $rule_add_button = Gtk::Button->new ("Add new rule");
$rule_add_button->show;
$rule_add_button->signal_connect ("clicked", sub { $self->add_new_rule } );
$op_hbox->pack_start($rule_add_button, 0, 1, 0);
$op_hbox->pack_start($op_label, 0, 1, 0);
$op_hbox->pack_start($op_radio_and, 0, 1, 0);
$op_hbox->pack_start($op_radio_or, 0, 1, 0);
$vbox->pack_start($table, 0, 1, 0);
$vbox->pack_start($sep, 0, 1, 0);
$vbox->pack_start($op_hbox, 0, 1, 0);
# fill values
$entry->set_text ($filter->name);
if ( $filter->action eq 'drop' ) {
$radio1->set_active(1);
} else {
$radio2->set_active(1);
}
if ( $filter->operation eq 'and' ) {
$op_radio_and->set_active(1);
} else {
$op_radio_or->set_active(1);
}
if ( $filter->folder_id ) {
$folder_entry->set_text (
JaM::Folder->by_id($filter->folder_id)->path
);
}
# connect signals
$entry->signal_connect ('changed', sub {
$filter->name($entry->get_text);
my $list = $self->gtk_filter_list;
my $row = $list->selection;
$list->set_text ($row, 0, $filter->name);
( run in 0.884 second using v1.01-cache-2.11-cpan-364913b4093 )