+
+sub run_checks() {
+ ($submit_extension) = ($submit_filename =~ /\.([^.]+)$/);
+ if (!$submit_extension) {
+ checks_failed("The filename does not have a valid extension");
+ return;
+ }
+ if (!$conn->{"Checks"}) {
+ checks_ok();
+ return;
+ }
+ my $root = $conn->{"root"};
+ my ($task, $part) = split /\//, $selected_task;
+ defined $part or $part = "";
+ my $verdict = `$root/bin/check -s "$submit_filename" $task $part 2>&1`;
+ if ($?) {
+ checks_failed($verdict);
+ } else {
+ checks_ok();
+ }
+}
+
+sub do_submit() {
+ $submit_filename = $chooser->get_filename;
+ $submit_fn_cache{$selected_task} = $submit_filename;
+ msg "Selected $submit_filename";
+ defined $submit_filename or return;
+ -f $submit_filename or return;
+
+ $chooser->destroy;
+ $bbutton_box->destroy;
+
+ $status_label->set_markup("<span size='large'>Checking</span>");
+
+ $submitting_label = Gtk2::Label->new("Please wait...");
+ $subwin_vbox->pack_start_defaults($submitting_label);
+ $subwin->show_all;
+ $subwin->window->set_cursor($busy_cursor);
+
+ # Continue when everything is displayed
+ Glib::Idle->add(sub {
+ $window->Gtk2::Gdk::flush;
+ run_checks();
+ return 0;
+ });
+}
+
+sub submit($) {
+ $check_only = shift @_;
+
+ stop_refresh_timer();
+
+ $subwin = Gtk2::Window->new('toplevel');
+ $subwin->set_default_size(640, 480);
+ $subwin->set_modal(1);
+ $subwin->set_transient_for($window);
+ $subwin->set_destroy_with_parent(1);
+ $subwin->set_title("Submit task $selected_task");
+ $subwin->set_wmclass("submitter", "Submitter");
+ $subwin->signal_connect("delete-event" => sub { end_submit(0); return 0; });
+
+ my $bb_submit = Gtk2::Button->new($check_only ? 'Check' : 'Submit');
+ $bb_submit->set_image(Gtk2::Image->new_from_stock('gtk-apply', 'button'));
+ $bb_submit->signal_connect(clicked => \&do_submit);
+
+ my $bb_cancel = Gtk2::Button->new_from_stock('gtk-cancel');
+ $bb_cancel->signal_connect(clicked => sub { end_submit(1) });
+
+ $bbutton_box = Gtk2::HButtonBox->new;
+ $bbutton_box->pack_start_defaults($bb_submit);
+ $bbutton_box->pack_start_defaults($bb_cancel);
+ $bbutton_box->set_border_width(5);
+
+ my $subwin_label = Gtk2::Label->new;
+ $subwin_label->set_markup("<span size='x-large'>" . ($check_only ? "Checking" : "Submitting") . " $selected_task</span>");
+
+ $status_label = Gtk2::Label->new;
+ $status_label->set_markup("<span size='large'>Please select file to " . ($check_only ? "check" : "submit") . "</span>");
+
+ $chooser = Gtk2::FileChooserWidget->new("open");
+ $chooser->set_local_only(1);
+ $chooser->signal_connect("file-activated" => \&do_submit);
+ $chooser->set_filename($submit_fn_cache{$selected_task}) if defined $submit_fn_cache{$selected_task};
+
+ $subwin_vbox = Gtk2::VBox->new;
+ $subwin_vbox->pack_start($subwin_label, 0, 0, 10);
+ $subwin_vbox->pack_start($status_label, 0, 0, 10);
+ $subwin_vbox->pack_start_defaults($chooser);
+ $subwin_vbox->pack_start($bbutton_box, 0, 0, 0);
+
+ $subwin->add($subwin_vbox);
+ $subwin->show_all;
+}
+
+### MAIN ###
+
+Gtk2->main;
+exit 0;