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();
}