# Copyright 2010, 2011 Kevin Ryde # This file is part of Chart. # # Chart is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation; either version 3, or (at your option) any later version. # # Chart is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. # # You should have received a copy of the GNU General Public License along # with Chart. If not, see . package App::Chart::BrowseHistoryDialog; use 5.010; use strict; use warnings; use Gtk2; use Locale::TextDomain ('App-Chart'); use Gtk2::Ex::Units; use App::Chart; use App::Chart::Annotation; use App::Chart::DBI; use App::Chart::SymbolHistory; use Glib::Object::Subclass 'Gtk2::Dialog', properties => [ Glib::ParamSpec->object ('symbol-history', 'Symbol history', 'Gtk2::TreeModel to display.', 'App::Chart::SymbolHistory', Glib::G_PARAM_READWRITE), ]; use constant { RESPONSE_DELETE => 0, RESPONSE_TODAY => 1 }; use constant { COL_ID => 0, COL_DATE => 1, COL_NOTE => 2 }; sub INIT_INSTANCE { my ($self) = @_; $self->set_title (__('Chart: BrowseHistory')); $self->add_buttons ('gtk-close' => 'close', 'gtk-help' => 'help'); $self->set_response_sensitive (RESPONSE_DELETE, 0); $self->signal_connect (response => \&_do_response); my $vbox = $self->vbox; my $em = Gtk2::Ex::Units::em($self); my $heading = $self->{'heading'} = Gtk2::Label->new (__('(No current)')); $vbox->pack_start ($heading, 0,0,0); my $table = Gtk2::Table->new (1, 2); $vbox->pack_start ($table, 0,0,0); my $tpos = 0; foreach my $i (0, 1) { my $type = ('back', 'forward')[$i]; my $scrolled = $self->{"scrolled_$type"} = Gtk2::ScrolledWindow->new; $scrolled->set (hscrollbar_policy => 'automatic', vscrollbar_policy => 'automatic'); $table->attach ($scrolled, $tpos, $tpos+1, 0,1, ['fill','shrink','expand'], ['fill','shrink','expand'], POSIX::ceil(Gtk2::Ex::Units::width($table,'.2 em')), 0); $tpos++; my $treeview = $self->{"treeview_$type"} = Gtk2::TreeView->new; $treeview->set (headers_visible => 1, reorderable => 0); $treeview->signal_connect (row_activated => \&_do_row_activated); $scrolled->add ($treeview); my $renderer = Gtk2::CellRendererText->new; $renderer->set (xalign => 0, ypad => 0); my $name = (__('Back'),__('Forward'))[$i]; my $column = Gtk2::TreeViewColumn->new_with_attributes ($name, $renderer, text => 0); # $column->set (resizable => 0); $treeview->append_column ($column); } $vbox->show_all; # with sensible annotations list and entry sizes Gtk2::Ex::Units::set_default_size_with_subsizes ($self, [$self->{'scrolled_back'}, '20 em', '15 lines'], [$self->{'scrolled_forward'}, '20 em', '15 lines']); } sub SET_PROPERTY { my ($self, $pspec, $newval) = @_; my $pname = $pspec->get_name; $self->{$pname} = $newval; # per default GET_PROPERTY if ($pname eq 'symbol_history') { $self->{'treeview_back'}->set_model ($newval->{'back_model'}); $self->{'treeview_forward'}->set_model ($newval->{'forward_model'}); } } # 'response' signal handler sub _do_response { my ($self, $response) = @_; if ($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','BrowseHistory'), $self); } # 'row-activated' signal on a TreeView sub _do_row_activated { my ($treeview, $path, $treeviewcolumn) = @_; } sub popup { my ($class) = @_; require App::Chart::Gtk2::Ex::ToplevelBits; return App::Chart::Gtk2::Ex::ToplevelBits::popup ($class, hide_on_delete => 1); } 1; __END__ =for stopwords Popup =head1 NAME App::Chart::BrowseHistoryDialog -- browsing history dialog =head1 SYNOPSIS use App::Chart::BrowseHistoryDialog; App::Chart::BrowseHistoryDialog->popup; =head1 WIDGET HIERARCHY C is a subclass of C. Gtk2::Widget Gtk2::Container Gtk2::Bin Gtk2::Window Gtk2::Dialog App::Chart::BrowseHistoryDialog =head1 DESCRIPTION ... =head1 FUNCTIONS =over 4 =item C<< App::Chart::BrowseHistoryDialog->popup () >> Popup a C dialog, re-presenting an existing one or otherwise creating a new one. =back =cut