Author: bdonlan
Date: 2004-05-30 22:43:23 -0400 (Sun, 30 May 2004)
New Revision: 211

Modified:
   trunk/haver-gtk/bin/haver-gtk.pl
   trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm
Log:
Removed a number of get_page calls in haver-gtk.pl; allowed page name collisions


Modified: trunk/haver-gtk/bin/haver-gtk.pl
===================================================================
--- trunk/haver-gtk/bin/haver-gtk.pl    2004-05-31 02:25:47 UTC (rev 210)
+++ trunk/haver-gtk/bin/haver-gtk.pl    2004-05-31 02:43:23 UTC (rev 211)
@@ -65,11 +65,14 @@
 
 my $pages;
 my $status;
+my %queries;
+my %channels;
 
 sub get_query_page ($) {
-       my $page = $pages->get_page("=$_[0]");
+       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;
@@ -99,9 +102,6 @@
        alias => $config->{Alias},
 );
 
-
-
-
 if ($@) {
        my $e = $@;
        set_locale Gtk;
@@ -363,9 +363,8 @@
 sub haver_disconnected {
        my ($kernel, $heap) = @_[KERNEL,HEAP];
        $status->print_page("Disconnected");
-       for($pages->get_pages()) {
-               next unless ($_->get_name() =~ /^\#/);
-               $pages->del_page($_);
+       foreach my $page (values %channels, values %queries) {
+               $pages->del_page($page);
        }
        $heap->{clist} = {};
        $kernel->yield('connect_win');
@@ -377,15 +376,16 @@
 
 sub haver_joined {
        my ($kernel, $heap, $channel) = @_[KERNEL,HEAP,ARG1];
-       unless ($pages->get_page("#$channel")) {
-               $pages->add_page(new 
Haver::Client::Gtk::Page::Channel($channel, TRUE));
+       unless (exists $channels{$channel}) {
+               my $page = $pages->add_page(new 
Haver::Client::Gtk::Page::Channel($channel, TRUE));
+               $channels{$channel} = $page;
        }
 }      
 
 sub haver_pmsg {
        my ($kernel, $args) = @_[KERNEL,ARG0];
        my $who = $args->[1];
-       if (!$pages->get_page("=$who")) {
+       if (!$queries{$who}) {
                my $page = get_query_page("$who");
                $page->process_pmsg($args);
        }
@@ -402,13 +402,15 @@
        my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG1];
        my ($chan) = @$args;
 
-       my $page = $pages->get_page("#$chan");
+       my $page = $channels{$chan};
        if ($page) {
                $page->join();
                $pages->set_page($page);
                return;
        }
-       $pages->add_page(new Haver::Client::Gtk::Page::Channel($chan, 
FALSE))->join();
+       $page = $pages->add_page(new Haver::Client::Gtk::Page::Channel($chan, 
FALSE));
+       $page->join();
+       $channels{$chan} = $page;
 }
 
 sub cmd_users {
@@ -482,12 +484,16 @@
 sub cmd_close {
        my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG1];
        my $page = $pages->get_current_page();
-       unless($args->[0] =~ /^\s*$/) {
+       unless ($args->[0] =~ /^\s*$/) {
                $page = $pages->get_page($args->[0]);
-               if(!$page) {
+               if (!$page) {
                        $status->print_page("No such page $args->[0]");
                        return;
                }
+               if (ref $page) {
+                       $status->print_page("Ambigous page $args->[0]");
+                       return;
+               }
        }
        if($page->can("close")) {
                if($page->close()) {

Modified: trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm       2004-05-31 02:25:47 UTC 
(rev 210)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm       2004-05-31 02:43:23 UTC 
(rev 211)
@@ -50,7 +50,10 @@
        } elsif($id =~ /^[0-9]+$/) {
                return $self->{pagenum}[$id];
        } else {
-               return $self->{pagenam}{$id};
+               my $pset = $self->{pagenam}{$id};
+               return undef unless (defined($pset) && @$pset);
+               return $pset->[0] if @$pset == 1;
+               return [EMAIL PROTECTED];
        }
 }
 
@@ -61,36 +64,27 @@
 }
 
 sub add_page ($$) {
-       my ($self, $hash) = @_;
-       my $name = $hash->{name};
-       if(exists $self->{pagenam}{$name}) {
-               croak "Page already exists: $name with ", Dumper 
$self->{pagenam}{$name};
-       }
-       $hash->{parent} = $self;
-       $hash->{string} = $name;
-       $hash->{pagenum} = scalar @{$self->{pagenum}};
-       push @{$self->{pagenum}}, $hash;
-       $self->{pagenam}{$name} = $hash;
-       $self->{notebook}->append_page($hash->{frame}, $hash->{label});
-       $hash->{frame}->show;
-       $self->set_page($hash);
-       $hash->added($self) if $hash->can('added');
-       return $hash;
-}
+       my ($self, $page) = @_;
 
-sub create_page ($$@) {
-       ### XXX: Should be deprecated
-       my ($self, $type, @args) = @_;
-       require "Haver/Client/Gtk/Page/$type.pm";
-       my $page = "Haver::Client::Gtk::Page::$type"->new(@args);
+       my $name = $page->{name};
+       
+       $page->{parent} = $self;
+       $page->{string} = $name; # XXX: why is this here?
+       $page->{pagenum} = scalar @{$self->{pagenum}};
+       
+       push @{$self->{pagenum}}, $page;
+       push @{$self->{pagenam}{$name}}, $page;
+
+       $self->{notebook}->append_page($page->{frame}, $page->{label});
+       $page->{frame}->show;
+
+       $self->set_page($page);
+
+       $page->added($self) if $page->can('added');
+
        return $page;
 }
 
-sub new_page ($@) {
-       my ($self, $type, @args) = @_;
-       return $self->add_page($self->create_page($type, @args));
-}
-
 sub get_current_page ($) {
        my $self = shift;
        my $page = $self->{notebook}->get_current_page();
@@ -106,15 +100,26 @@
 
 sub del_page ($$) {
        my ($self, $id) = @_;
-       my $pagestruct = $self->get_page($id);
-       if(!defined $pagestruct) {
+       my $page = $self->get_page($id);
+
+       if(!defined $page) {
                carp "Warning: page $id not found";
                return;
        }
-       $pagestruct->removed() if $pagestruct->can('removed');
-       $self->{notebook}->remove_page($pagestruct->{pagenum});
-       delete $self->{pagenam}{$pagestruct->{string}};
-       splice @{$self->{pagenum}}, $pagestruct->{pagenum}, 1;
+       
+       $page->removed() if $page->can('removed');
+       
+       $self->{notebook}->remove_page($page->{pagenum});
+
+       $self->{pagenam}{$page->{string}} = 
+       grep { $_ != $page } $self->{pagenam}{$page->{string}};
+
+       if ([EMAIL PROTECTED]>{pagenam}{$page->{string}}}) {
+               delete $self->{pagenam}{$page->{string}};
+       }
+       
+       splice @{$self->{pagenum}}, $page->{pagenum}, 1;
+
        $self->renumber_pages();
 }
 


Reply via email to