App-Chart

 view release on metacpan or  search on metacpan

lib/App/Chart/Gtk2/DownloadDialog.pm  view on Meta::CPAN

  if ($response eq RESPONSE_START) {
    $self->_do_start_button;

  } elsif ($response eq RESPONSE_STOP) {
    my $treeview = $self->{'jobs_treeview'};
    my $selection = $treeview->get_selection;
    my ($model, $iter) = $selection->get_selected;
    my $job = $model->get_value ($iter, 0);
    $job->stop;

  } elsif ($response eq RESPONSE_CLEAR) {
    my $textbuf = $self->{'textbuf'};
    $textbuf->delete ($textbuf->get_start_iter, $textbuf->get_end_iter);
    if (App::Chart::Gtk2::JobQueue->can('remove_done')) { # if loaded
      App::Chart::Gtk2::JobQueue->remove_done;
    }
    if (App::Chart::Gtk2::Subprocess->can('remove_done')) { # if loaded
      App::Chart::Gtk2::Subprocess->remove_done;
    }

  } elsif ($response eq 'close') {
    # as per a keyboard close, defaults to raising 'delete-event', which in
    # turn defaults to a destroy
    $self->signal_emit ('close');

  } elsif ($response eq 'help') {
    require App::Chart::Manual;
    App::Chart::Manual->open(__p('manual-node','Download'), $self);
  }
}

sub _update_stop_sensitive {
  my ($self) = @_;
  my $treeview = $self->{'jobs_treeview'};
  my $selection = $treeview->get_selection;
  my ($model, $iter) = $selection->get_selected;
  my $job = $iter && $model->get_value ($iter, 0);
  my $sensitive = $job && $job->is_stoppable;
  $self->set_response_sensitive (RESPONSE_STOP, $sensitive);
}
sub _update_clear_sensitive {
  my ($self) = @_;

  my $anything_to_clear = do {
    my $textbuf = $self->{'textbuf'};
    $textbuf->get_char_count != 0
  } || do {
    App::Chart::Gtk2::JobQueue->can('remove_done')  # if loaded
        && List::Util::first {$_->get('done')} App::Chart::Gtk2::JobQueue->all_jobs;
  } || do {
    App::Chart::Gtk2::Subprocess->can('remove_done')  # if loaded
        && List::Util::first {! $_->pid} App::Chart::Gtk2::Subprocess->all_subprocesses;
  };
  $self->set_response_sensitive (RESPONSE_CLEAR, $anything_to_clear);
}

# 'button-press-event' on the treeview
sub _do_proc_treeview_button_press {
  my ($treeview, $event, $self) = @_;
  if ($event->button == 3) {
    require App::Chart::Gtk2::SubprocessStopMenu;
    App::Chart::Gtk2::SubprocessStopMenu->popup_from_treeview ($event, $treeview);
  }
  return Gtk2::EVENT_PROPAGATE;
}

# 'changed' on the treeview selection
sub _do_selection_changed {
  my ($selection, $self) = @_;
  _update_stop_sensitive ($self);
}

# 'row-changed' on the JobQueue model
sub _do_job_row_changed {
  my ($model, $path, $iter, $self) = @_;
  _update_stop_sensitive ($self);

  if (my $hide = $self->{'hide_on_success'}) {
    my $job = $model->get_value ($iter, 0);
    if ($job == $hide && $job->status eq __('Done')) {
      $self->hide;
    }
  }
}

# 'set_cell_data_func' to display a cell in the job model row
sub _job_cell_status {
  my ($treecolumn, $renderer, $model, $iter) = @_;
  my $job = $model->get_value ($iter, 0);
  my $str = join (' - ', $job->type // '', $job->status // ());
  $renderer->set (text => $str);
}

# 'set_cell_data_func' to display a cell in the subprocess model row
sub _proc_cell_status {
  my ($treecolumn, $renderer, $model, $iter) = @_;
  my $proc = $model->get_value ($iter, 0);
  my $str = $proc->status;
  $renderer->set (text => $str);
}

# 'button-press-event' on the treeview
sub _do_jobs_treeview_button_press {
  my ($treeview, $event) = @_;
  if ($event->button == 3) {
    require App::Chart::Gtk2::JobStopMenu;
    my $self = $treeview->get_toplevel;
    my $menu = ($self->{'job_menu'} ||= App::Chart::Gtk2::JobStopMenu->new);
    $menu->popup_from_treeview ($event, $treeview);
  }
  return Gtk2::EVENT_PROPAGATE;
}


#------------------------------------------------------------------------------
# generic helpers


1;
__END__

=for stopwords popup

=head1 NAME

App::Chart::Gtk2::DownloadDialog -- download dialog widget

=head1 SYNOPSIS

 use App::Chart::Gtk2::DownloadDialog;
 App::Chart::Gtk2::DownloadDialog->popup;

=head1 WIDGET HIERARCHY

C<App::Chart::Gtk2::DownloadDialog> is a subclass of C<Gtk2::Dialog>.

    Gtk2::Widget
      Gtk2::Container
        Gtk2::Bin
          Gtk2::Window
            Gtk2::Dialog
              App::Chart::Gtk2::DownloadDialog

=head1 DESCRIPTION

...

=head1 FUNCTIONS

=over 4

=item C<< App::Chart::Gtk2::DownloadDialog->popup () >>

=item C<< App::Chart::Gtk2::DownloadDialog->popup ($symbol) >>

Popup a C<DownloadDialog> dialog, re-presenting any existing one or
otherwise creating a new one.

The optional C<$symbol> parameter is put into the symbol entry field, so the
user can have that already entered on choosing the "One Symbol" download.

=back

=head1 SEE ALSO

L<App::Chart>

=head1 HOME PAGE



( run in 1.635 second using v1.01-cache-2.11-cpan-140bd7fdf52 )