Gtk2-Ex-ICal-Recur

 view release on metacpan or  search on metacpan

lib/Gtk2/Ex/ICal/Recur.pm  view on Meta::CPAN

	my $start_date_label = Gtk2::Label->new('Starting on');
	$start_date_label->set_alignment(0, 0.5);	
	
	my $end_on_label = Gtk2::Label->new('and ending on');
	$end_on_label->set_alignment(0, 0.5);	
	
	my $end_after_label = Gtk2::Label->new('and ending after');
	$end_after_label->set_alignment(0, 0.5);
	my $count = Gtk2::SpinButton->new_with_range(1,100,1);
	$self->{duration}->{count} = $count;
	my $occurrences_label = Gtk2::Label->new(' occurrences ');
	$occurrences_label->set_alignment(0, 0.5);	
	
	$table->attach($start_date_label,1,2,0,1,'fill','fill',0,0);
	$table->attach($self->{duration}->{dtstart}->{button},2,3,0,1,'fill','fill',0,0);
	
	my $end_on_radio = Gtk2::RadioButton->new;
	my $end_after_radio = Gtk2::RadioButton->new($end_on_radio);
	$self->{duration}->{end_on_radio} = $end_on_radio;
	$self->{duration}->{end_after_radio} = $end_after_radio;
	
	$self->{duration}->{dtend}->{button}->set_sensitive($end_on_radio->get_active);
	$end_on_label->set_sensitive($end_on_radio->get_active);
	$end_after_label->set_sensitive($end_after_radio->get_active);
	$count->set_sensitive($end_after_radio->get_active);
	$occurrences_label->set_sensitive($end_after_radio->get_active);

	$end_on_radio->signal_connect('toggled' => 
		sub {
			$self->{duration}->{dtend}->{button}->set_sensitive($end_on_radio->get_active);
			$end_on_label->set_sensitive($end_on_radio->get_active);
			$end_after_label->set_sensitive($end_after_radio->get_active);
			$count->set_sensitive($end_after_radio->get_active);
			$occurrences_label->set_sensitive($end_after_radio->get_active);
		}
	);
	
	$table->attach_defaults($end_on_radio,0,1,1,2);
	$table->attach_defaults($end_on_label,1,2,1,2);
	$table->attach_defaults($self->{duration}->{dtend}->{button},2,3,1,2);

	$table->attach_defaults($end_after_radio,0,1,2,3);
	$table->attach_defaults($end_after_label,1,2,2,3);
	$table->attach_defaults($count,2,3,2,3);
	$table->attach_defaults($occurrences_label,3,4,2,3);
	return $table;
}

sub exceptions {
	my ($self) = @_;
	my $slist = Gtk2::Ex::Simple::List->new ('Exceptions'    => 'text',);
	$slist->get_selection->set_mode ('multiple');
	$slist->set_headers_visible(FALSE);
	my $buttonbox = Gtk2::HBox->new;
	my $addbutton = Gtk2::Button->new_from_stock('gtk-add');
	my $removebutton = Gtk2::Button->new_from_stock('gtk-remove');
	$addbutton->signal_connect('button-release-event' => 
		sub {
			my ($self, $event) = @_;
			my $cal = Gtk2::Calendar->new;
			my $calwindow = Gtk2::Window->new('popup');
			my $vbox = Gtk2::VBox->new;
			my $ok = Gtk2::Button->new_from_stock('gtk-ok');
			my $cancel= Gtk2::Button->new_from_stock('gtk-cancel');
			$ok->signal_connect('clicked' => 
				sub {
					my ($year, $month, $day) = $cal->get_date;
					$month = month()->[$month];
					#push @{$slist->{data}}, ["(not yet implemented)"] if ($#{@{$slist->{data}}} <= 0);
					push @{$slist->{data}}, ["$month $day\, $year"];
					$calwindow->hide;
				}
			);
			$cancel->signal_connect('clicked' => 
				sub {
					$calwindow->hide;
				}
			);
			my $hbox = Gtk2::HBox->new;
			$hbox->pack_start($ok, TRUE, TRUE, 0);
			$hbox->pack_start($cancel, TRUE, TRUE, 0);
			$vbox->pack_start($cal, TRUE, TRUE, 0);
			$vbox->pack_start($hbox, TRUE, TRUE, 0);
			$calwindow->add($vbox);
			$calwindow->set_position('mouse');
			$calwindow->show_all;
		}
	);
	$removebutton->signal_connect('button-release-event' => 
		sub {
			my @sel = $slist->get_selected_indices;
			my @temp = @{$slist->{data}};
			my @newlist;
			my %hash = map { $_ => 1 } @sel;
			for (my $i=0; $i<=$#temp; $i++) {
				push @newlist, [$temp[$i]->[0]] unless $hash{$i};
			}
			@{$slist->{data}} = ();
			foreach my $x (@newlist) {
				push @{$slist->{data}}, $x;
			}			
		}
	);
	$buttonbox->pack_start($addbutton, TRUE, TRUE, 0);
	$buttonbox->pack_start($removebutton, TRUE, TRUE, 0);
	my $vbox = Gtk2::VBox->new;
	my $scroll = Gtk2::ScrolledWindow->new;
	$scroll->set_policy('never','automatic');
	$scroll->add($slist);
	$self->{exceptionslist} = $slist;
	$vbox->pack_start($scroll, TRUE, TRUE, 0);
	$vbox->pack_start($buttonbox, FALSE, FALSE, 0);
	return $vbox;
}

sub month {
	return [
		'Jan',
		'Feb',
		'Mar',
		'Apr',



( run in 1.822 second using v1.01-cache-2.11-cpan-364913b4093 )