App-Chart

 view release on metacpan or  search on metacpan

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

  return $self->{'view'}->get('symbol');
}

# return the menubar widget
sub menubar {
  my ($self) = @_;
  return $self->{'ui'}->get_widget('/MenuBar');
}

# return App::Chart::Gtk2::Main widget, preferring the transient parent of $dialog,
# if $dialog is given
sub find_for_dialog {
  my ($class, $dialog) = @_;
  if ($dialog
      && $dialog->can('get_transient_for')
      && (my $parent = $dialog->get_transient_for)) {
    if ($parent->isa($class)) {
      return $parent;
    }
  }

  my $screen = $dialog->get_screen;
  foreach my $toplevel (Gtk2::Window->list_toplevels) {
    if ($toplevel->isa($class) && $toplevel->get_screen == $screen) {
      return $toplevel;
    }
  }

  foreach my $toplevel (Gtk2::Window->list_toplevels) {
    if ($toplevel->isa($class)) {
      return $toplevel;
    }
  }
  return $class->new;
}

#------------------------------------------------------------------------------
# mainline

sub main {
  my ($class, $args) = @_;
  ### Main main() args: $args
  ## no critic (ProhibitExit, ProhibitExitInSubroutines)

  my $symbol = $args->[0];
  my $symlist = undef;
  if (@$args > 1 || (Scalar::Util::blessed($symbol)
                     && $symbol->isa('App::Chart::Gtk2::Symlist'))) {
    print STDERR __"chart: only one symbol argument when starting the GUI\n";
    exit 1;
  }

  require Gtk2::Ex::ErrorTextDialog::Handler;
  Glib->install_exception_handler
    (\&Gtk2::Ex::ErrorTextDialog::Handler::exception_handler);
  if (0) {
    ## no critic (RequireLocalizedPunctuationVars)
      $SIG{'__WARN__'} = \&Gtk2::Ex::ErrorTextDialog::Handler::exception_handler;
  }

  Gtk2->disable_setlocale;  # leave LC_NUMERIC alone for version nums
  Gtk2->init;

  Glib::Idle->add
      (sub {
         my $self = $class->instance;
         $self->signal_connect (destroy => sub { Gtk2->main_quit; });

         main::initfile (File::Spec->catfile(App::Chart::chart_directory(),
                                             'gui.pl'));

         $self->show;
         App::Chart::chart_dirbroadcast()->listen;

         if (defined $symbol) {
           my $label = $self->{'view'}->{'initial'}->get_child;
           $label->set_text(__x('Loading {symbol} ...', symbol => $symbol));
           Glib::Idle->add
               (sub {
                  require App::Chart::SymbolMatch;
                  my ($match_symbol, $match_symlist)
                    = App::Chart::SymbolMatch::find ($symbol);
                  if ($match_symbol) {
                    ($symbol, $symlist) = ($match_symbol, $match_symlist);
                  }
                  $self->goto_symbol ($symbol, $symlist);
                  return Glib::SOURCE_REMOVE;
                });
         }
         return Glib::SOURCE_REMOVE;
       },
       Glib::G_PRIORITY_HIGH);
  Gtk2->main;
}

1;
__END__

=for stopwords Eg menubar undef symlist

=head1 NAME

App::Chart::Gtk2::Main -- Chart program main window

=for test_synopsis my ($symbol)

=head1 SYNOPSIS

 use App::Chart::Gtk2::Main;
 App::Chart::Gtk2::Main->open ($symbol)

=head1 WIDGET HIERARCHY

C<App::Chart::Gtk2::Main> is a subclass of C<Gtk2::Window>.

    Gtk2::Widget
      Gtk2::Container
        Gtk2::Bin
          Gtk2::Window
            App::Chart::Gtk2::Main



( run in 0.663 second using v1.01-cache-2.11-cpan-ceb78f64989 )