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(\&notify_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;


Reply via email to