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 )