Author: bdonlan
Date: 2004-05-31 19:08:55 -0400 (Mon, 31 May 2004)
New Revision: 215
Modified:
trunk/haver-gtk/bin/haver-gtk.pl
trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm
trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm
trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm
Log:
Fix /close
Modified: trunk/haver-gtk/bin/haver-gtk.pl
===================================================================
--- trunk/haver-gtk/bin/haver-gtk.pl 2004-05-31 22:53:50 UTC (rev 214)
+++ trunk/haver-gtk/bin/haver-gtk.pl 2004-05-31 23:08:55 UTC (rev 215)
@@ -30,7 +30,7 @@
# For data needed by page handlers as well as main code
our %globals;
-sub POE::Kernel::ASSERT_DEFAULT {1}
+#sub POE::Kernel::ASSERT_DEFAULT {1}
#sub POE::Kernel::TRACE_DEFAULT {1}
use Gtk;
@@ -46,7 +46,6 @@
use Haver::Client::Gtk::Page::Query;
use Haver::Client::Gtk::Page::Rawlog;
use Haver::Client::Gtk::Page::Server;
-# XXX: Implement config files
use Data::Dumper;
use Carp;
@@ -68,11 +67,30 @@
my %queries;
my %channels;
+sub notify_sub {
+ my ($page, $added) = @_;
+ print "notify_sub ref = ", ref $page, " added = $added\n";
+ if ($page->isa('Haver::Client::Gtk::Page::Channel')) {
+ print "is channel\n";
+ if ($added) {
+ $channels{$page->get_channel()} = $page;
+ } else {
+ delete $channels{$page->get_channel()};
+ }
+ } elsif ($page->isa('Haver::Client::Gtk::Page::Query')) {
+ print "is query\n";
+ if ($added) {
+ $queries{$page->get_uid()} = $page;
+ } else {
+ delete $queries{$page->get_uid()};
+ }
+ }
+}
+
sub get_query_page ($) {
my $page = $queries{$_[0]};
if(!$page) {
$page = $pages->add_page(new
Haver::Client::Gtk::Page::Query($_[0]));
- $queries{$_[0]} = $page;
$page->print_page("Starting query with $_[0]");
}
return $page;
@@ -185,6 +203,7 @@
my $vbox = Gtk::VBox->new(0,0);
$pages = new Haver::Client::Gtk::Pages;
+ $pages->register_notify(\¬ify_sub);
$vbox->pack_start($pages->get_gui(), 1, 1, 0);
$pages->get_gui()->show;
@@ -377,8 +396,7 @@
sub haver_joined {
my ($kernel, $heap, $channel) = @_[KERNEL,HEAP,ARG1];
unless (exists $channels{$channel}) {
- my $page = $pages->add_page(new
Haver::Client::Gtk::Page::Channel($channel, TRUE));
- $channels{$channel} = $page;
+ $pages->add_page(new
Haver::Client::Gtk::Page::Channel($channel, TRUE));
}
}
@@ -402,15 +420,9 @@
my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG1];
my ($chan) = @$args;
- my $page = $channels{$chan};
- if ($page) {
- $page->join();
- $pages->set_page($page);
- return;
- }
- $page = $pages->add_page(new Haver::Client::Gtk::Page::Channel($chan,
FALSE));
+ my $page = $channels{$chan} || $pages->add_page(new
Haver::Client::Gtk::Page::Channel($chan, FALSE));
$page->join();
- $channels{$chan} = $page;
+ $pages->set_page($page);
}
sub cmd_users {
Modified: trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm 2004-05-31
22:53:50 UTC (rev 214)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm 2004-05-31
23:08:55 UTC (rev 215)
@@ -184,6 +184,10 @@
$self->{joining} = 1;
}
+sub get_channel {
+ return $_[0]->{channel};
+}
+
### SESSION EVENTS
sub _joined {
Modified: trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm 2004-05-31 22:53:50 UTC
(rev 214)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm 2004-05-31 23:08:55 UTC
(rev 215)
@@ -92,6 +92,10 @@
$self->_display_msg($args);
}
+sub get_uid {
+ return $_[0]->{UID};
+}
+
### EVENTS
sub _pmsg {
Modified: trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm 2004-05-31 22:53:50 UTC
(rev 214)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm 2004-05-31 23:08:55 UTC
(rev 215)
@@ -20,6 +20,11 @@
use warnings;
use strict;
+use constant {
+ TRUE => 1,
+ FALSE => 0,
+};
+
use Gtk;
use Data::Dumper;
use Carp;
@@ -82,6 +87,9 @@
$page->added($self) if $page->can('added');
+ print Dumper $self;
+ $_->($page, TRUE) for (values %{$self->{notifies}});
+
return $page;
}
@@ -120,6 +128,8 @@
splice @{$self->{pagenum}}, $page->{pagenum}, 1;
+ $_->($page, FALSE) for (values %{$self->{notifies}});
+
$self->renumber_pages();
}
@@ -139,4 +149,15 @@
}
}
+sub register_notify {
+ # Register a subref to be called when a page is added or removed
+ my ($self, @notifies) = @_;
+ $self->{notifies}{$_} = $_ for @notifies;
+}
+
+sub unregister_notify {
+ my ($self, @notifies) = @_;
+ delete $self->{notifies}{$_} for @notifies;
+}
+
1;