Author: dylan
Date: 2004-05-27 00:47:45 -0400 (Thu, 27 May 2004)
New Revision: 170

Added:
   trunk/haver-gtk/Build.PL
   trunk/haver-gtk/COPYING
   trunk/haver-gtk/MANIFEST.SKIP
   trunk/haver-gtk/bin/
   trunk/haver-gtk/bin/haver-gtk.pl
Removed:
   trunk/haver-gtk/haver-gtk.pl
Log:
CPAN-ified haver-gtk. :)


Added: trunk/haver-gtk/Build.PL
===================================================================
--- trunk/haver-gtk/Build.PL    2004-05-27 03:45:57 UTC (rev 169)
+++ trunk/haver-gtk/Build.PL    2004-05-27 04:47:45 UTC (rev 170)
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+use Module::Build;
+my $build = Module::Build->new(
+#      module_name        => 'Haver::Client::Gtk',
+       dist_name          => 'haver-gtk',
+       dist_version_from  => 'bin/haver-gtk.pl',
+       dist_author        => 'Bryan Donlan <[EMAIL PROTECTED]>',
+       dist_abstract      => 'Gtk haver client',
+       license            => 'gpl',
+       requires           => {
+               'perl'            => '5.8.0',
+               POE               => 0.27,
+               Gtk               => 0.7009,
+               Haver             => 0.06,
+               'POE::Component::Client::Haver' => 0.06
+       },
+       create_makefile_pl => 'passthrough',
+       script_files => [glob('bin/*.pl')],
+);
+
+$build->create_build_script;
+
+


Property changes on: trunk/haver-gtk/Build.PL
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/haver-gtk/COPYING
===================================================================
--- trunk/haver-gtk/COPYING     2004-05-27 03:45:57 UTC (rev 169)
+++ trunk/haver-gtk/COPYING     2004-05-27 04:47:45 UTC (rev 170)
@@ -0,0 +1,326 @@
+                          GNU GENERAL PUBLIC LICENSE
+                             Version 2, June 1991
+
+           Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+           59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+         Everyone is permitted to copy and distribute verbatim copies
+          of this license document, but changing it is not allowed.
+
+                                   Preamble
+
+  The licenses  for most software are designed  to  take away your  freedom to
+share and change it.  By contrast, the GNU General  Public License is intended
+to guarantee your freedom to share and change  free software--to make sure the
+software is free for  all its users.  This General  Public License  applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it.  (Some other  Free Software Foundation software is
+covered by the GNU Library General Public License  instead.)  You can apply it
+to your programs, too.
+
+  When we speak of free software, we are referring to freedom, not price.  Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this  service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it  in new free  programs; and that you know you
+can do these things.
+
+  To protect your rights, we  need to make  restrictions that forbid anyone to
+deny  you  these  rights or  to   ask you to   surrender   the rights.   These
+restrictions translate to certain  responsibilities for you if  you distribute
+copies of the software, or if you modify it.
+
+  For example, if you  distribute copies of  such a program, whether gratis or
+for  a fee, you must  give the recipients all the  rights that  you have.  You
+must  make sure that they, too,  receive or can get the  source code.  And you
+must show them these terms so they know their rights.
+
+  We protect your rights with  two steps: (1)  copyright the software, and (2)
+offer you  this license which  gives you legal  permission to copy, distribute
+and/or modify the software.
+
+  Also,  for each author's protection and  ours, we want  to make certain that
+everyone understands that there is no warranty for this free software.  If the
+software is modified by someone else and passed on,  we want its recipients to
+know that what they have is not the original,  so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+  Finally, any free program is threatened constantly  by software patents.  We
+wish to   avoid  the  danger that    redistributors  of a free   program  will
+individually obtain patent licenses, in effect making the program proprietary.
+To  prevent this, we  have made it clear that  any patent must be licensed for
+everyone's free use or not licensed at all.
+
+  The precise terms and  conditions for copying, distribution and modification
+follow.
+
+                          GNU GENERAL PUBLIC LICENSE
+       TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License.  The "Program", below, refers to any such program
+or work,  and a "work  based on the  Program" means either  the Program or any
+derivative work  under copyright law:  that is to say,  a work  containing the
+Program or  a  portion of  it, either  verbatim  or with  modifications and/or
+translated into   another language.   (Hereinafter, translation    is included
+without limitation in the term "modification".)  Each licensee is addressed as
+"you".
+
+Activities  other than copying, distribution  and modification are not covered
+by this License; they are  outside its scope.   The act of running the Program
+is not restricted, and  the  output from the   Program is covered only if  its
+contents constitute  a work based on  the Program (independent  of having been
+made  by running the Program).    Whether that is  true  depends  on what  the
+Program does.
+
+  1. You may copy and distribute verbatim copies  of the Program's source code
+as   you  receive it,  in   any medium, provided  that   you conspicuously and
+appropriately  publish  on each   copy  an  appropriate copyright  notice  and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to   the absence of  any  warranty; and give any   other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a  copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your  copy or copies of the  Program or any portion of it,
+thus forming   a  work based  on  the Program,  and  copy  and distribute such
+modifications or work under  the terms of Section 1  above, provided that  you
+also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply  to the modified work   as a whole.  If  identifiable
+sections of that work are not derived from  the Program, and can be reasonably
+considered independent and separate works  in  themselves, then this  License,
+and its  terms, do not  apply to  those  sections when  you distribute them as
+separate works.  But when you distribute the same sections as  part of a whole
+which is a work based on the Program, the distribution of the whole must be on
+the terms of this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it  is not the intent  of this section to  claim  rights or contest your
+rights to work written entirely by you; rather, the  intent is to exercise the
+right to control the  distribution of derivative  or collective works based on
+the Program.
+
+In addition, mere aggregation of  another work not  based on the Program  with
+the Program (or with a work based on the Program) on a  volume of a storage or
+distribution  medium does not  bring the  other work under   the scope of this
+License.
+
+  3. You may  copy and distribute the  Program (or a  work based  on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The  source code for  a work means  the preferred form  of the work for making
+modifications to  it.  For an executable work,  complete source code means all
+the source code  for all modules  it  contains, plus any  associated interface
+definition   files,  plus   the   scripts used to     control compilation  and
+installation  of the executable.  However, as  a special exception, the source
+code  distributed need not include anything   that is normally distributed (in
+either source or binary form) with the major components (compiler, kernel, and
+so on) of the   operating system on  which the  executable runs, unless   that
+component itself accompanies the executable.
+
+If distribution  of executable or  object code is made   by offering access to
+copy from  a  designated place, then  offering equivalent  access to  copy the
+source code from  the same place counts   as distribution of the source  code,
+even though third parties are not compelled to copy the  source along with the
+object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License.  Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License.  However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+  5. You  are not required  to accept this License, since  you have not signed
+it.  However,  nothing else grants you permission  to modify or distribute the
+Program or  its derivative works.  These actions  are prohibited by law if you
+do  not  accept  this License.   Therefore, by   modifying or distributing the
+Program (or any work  based on the Program), you  indicate your  acceptance of
+this  License to  do   so, and  all  its  terms  and conditions  for  copying,
+distributing or modifying the Program or works based on it.
+
+  6.   Each time you redistribute    the Program (or  any  work  based on  the
+Program),  the recipient automatically receives   a license from the  original
+licensor to copy, distribute or modify the Program  subject to these terms and
+conditions.   You may not  impose any further  restrictions on the recipients'
+exercise of the rights granted herein.   You are not responsible for enforcing
+compliance by third parties to this License.
+
+  7. If,   as a  consequence of  a  court judgment   or allegation   of patent
+infringement   or for   any  other  reason (not    limited  to patent issues),
+conditions are imposed on you (whether by court order, agreement or otherwise)
+that contradict the  conditions of this License, they  do not excuse  you from
+the conditions of this License.   If you cannot  distribute  so as to  satisfy
+simultaneously your obligations  under this  License  and any  other pertinent
+obligations, then as a consequence you may  not distribute the Program at all.
+For example, if a patent license  would not permit royalty-free redistribution
+of the Program by all those who receive  copies directly or indirectly through
+you, then the only way you could satisfy both it and  this License would be to
+refrain entirely from distribution of the Program.
+
+If any  portion of  this  section is held  invalid  or unenforceable under any
+particular circumstance, the balance  of the section  is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims  or to contest validity of  any such  claims; this
+section has the sole purpose of protecting  the integrity of the free software
+distribution system, which is implemented  by public license practices.   Many
+people    have made  generous  contributions to   the  wide range  of software
+distributed through that system in reliance  on consistent application of that
+system; it is up to  the author/donor  to decide if  he or  she is willing  to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section  is intended to  make thoroughly clear what  is  believed to be a
+consequence of the rest of this License.
+
+  8. If the  distribution and/or use of  the Program is  restricted in certain
+countries   either  by patents  or   by copyrighted  interfaces,  the original
+copyright holder who places the Program under this License may add an explicit
+geographical  distribution limitation  excluding   those countries,   so  that
+distribution  is permitted only  in or among  countries not thus excluded.  In
+such case, this License incorporates the limitation as if  written in the body
+of this License.
+
+  9. The Free  Software Foundation may  publish revised and/or new versions of
+the General Public   License from time  to  time.  Such  new versions  will be
+similar in spirit to the present version, but may  differ in detail to address
+new problems or concerns.
+
+Each version  is  given a  distinguishing version   number.   If the   Program
+specifies a version number of this License which applies to  it and "any later
+version", you have the option of following the terms  and conditions either of
+that  version  or  of  any   later version published   by  the   Free Software
+Foundation.  If the Program does not specify a version number of this License,
+you may choose any version ever published by the Free Software Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free programs
+whose  distribution conditions are different, write  to  the author to ask for
+permission.    For software   which  is   copyrighted  by  the  Free  Software
+Foundation,   write  to  the Free    Software   Foundation; we sometimes  make
+exceptions for  this.   Our  decision will be   guided  by  the  two goals  of
+preserving  the free  status of all  derivatives  of our free software  and of
+promoting the sharing and reuse of software generally.
+
+                                 NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
+STATED IN WRITING  THE COPYRIGHT  HOLDERS   AND/OR OTHER  PARTIES PROVIDE  THE
+PROGRAM "AS  IS" WITHOUT WARRANTY  OF ANY KIND,  EITHER EXPRESSED  OR IMPLIED,
+INCLUDING, BUT  NOT LIMITED TO, THE IMPLIED  WARRANTIES OF MERCHANTABILITY AND
+FITNESS  FOR A  PARTICULAR PURPOSE.  THE  ENTIRE RISK  AS  TO THE  QUALITY AND
+PERFORMANCE OF THE  PROGRAM IS WITH YOU.  SHOULD  THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  12. IN  NO EVENT UNLESS REQUIRED  BY APPLICABLE LAW  OR AGREED TO IN WRITING
+WILL ANY   COPYRIGHT HOLDER,   OR  ANY OTHER   PARTY  WHO  MAY  MODIFY  AND/OR
+REDISTRIBUTE  THE PROGRAM AS PERMITTED  ABOVE, BE LIABLE   TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL,   INCIDENTAL OR CONSEQUENTIAL DAMAGES  ARISING
+OUT OF THE USE OR INABILITY TO  USE THE PROGRAM  (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED  INACCURATE OR LOSSES  SUSTAINED BY YOU OR
+THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                         END OF TERMS AND CONDITIONS
+
+                How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest possible
+use to  the public, the  best way to achieve this  is to make it free software
+which everyone can redistribute and change under these terms.
+
+  To do  so, attach the following  notices  to the program.    It is safest to
+attach them to  the start of  each source file  to most effectively convey the
+exclusion of warranty; and each file should have at least the "copyright" line
+and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program 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 2 of the License, or
+    (at your option) any later version.
+
+    This program 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 this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands  `show w' and `show  c' should show  the appropriate
+parts of the General  Public License.  Of course,  the commands you use may be
+called something   other than  `show  w' and   `show  c'; they  could  even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should  also  get your  employer  (if you work   as a programmer)  or your
+school,  if any,  to   sign  a "copyright disclaimer"    for the  program,  if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This  General Public License does not  permit  incorporating your program into
+proprietary  programs.   If  your program  is  a  subroutine library,  you may
+consider it  more useful to  permit linking  proprietary applications with the
+library.  If this is what you  want to do, use  the GNU Library General Public
+License instead of this License.

Added: trunk/haver-gtk/MANIFEST.SKIP
===================================================================
--- trunk/haver-gtk/MANIFEST.SKIP       2004-05-27 03:45:57 UTC (rev 169)
+++ trunk/haver-gtk/MANIFEST.SKIP       2004-05-27 04:47:45 UTC (rev 170)
@@ -0,0 +1,11 @@
+\.old$
+\.bak
+store
+blib
+_build
+^Build$
+^\.#
+\.svn
+\.tar\.gz$
+^data
+^conf

Copied: trunk/haver-gtk/bin/haver-gtk.pl (from rev 169, 
trunk/haver-gtk/haver-gtk.pl)

Deleted: trunk/haver-gtk/haver-gtk.pl
===================================================================
--- trunk/haver-gtk/haver-gtk.pl        2004-05-27 03:45:57 UTC (rev 169)
+++ trunk/haver-gtk/haver-gtk.pl        2004-05-27 04:47:45 UTC (rev 170)
@@ -1,631 +0,0 @@
-#!/usr/bin/perl -w
-# vim: set ft=perl ts=4 sw=4:
-# cmod.pl - Conspiracy game engine for Haver
-# Rules: http://norinel.aftran.com/stuff/usingcmod.html
-# 
-# Copyright (C) 2004 Bryan Donlan, Dylan William Hardison.
-# 
-# This module 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 2 of the License, or
-# (at your option) any later version.
-#
-# This module 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 this module; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-package main;
-
-use strict;
-use warnings;
-use constant {
-       TRUE => 1,
-       FALSE => 0,
-};
-
-# For data needed by page handlers as well as main code
-our %globals;
-
-sub POE::Kernel::ASSERT_DEFAULT {1}
-
-use Gtk;
-use Gtk::Keysyms;
-use POE qw(Component::Client::Haver);
-
-use Haver::OS;
-use Haver::Config;
-# XXX: Implement config files
-use Data::Dumper;
-use Carp;
-
-our $PACKAGE = __PACKAGE__;
-our $VERSION = 0.00;
-
-my %gui;
-# Connection window fields
-my @fields = qw{Address UID Password};
-my @required_fields = qw{Address UID};
-my @saved_fields = qw{Address UID};
-
-sub _call {
-        return POE::Kernel->call(POE::Kernel->get_active_session(), @_);
-}
-
-my %pages;
-my @pages;
-
-sub get_page ($) {
-       my $id = $_[0];
-       if(ref($id)) {
-               return $id;
-       } elsif($id =~ /^[0-9]+$/) {
-               return $pages[$id];
-       } else {
-               return $pages{$id};
-       }
-}
-
-sub set_page ($) {
-       my $hash = get_page $_[0];
-       $gui{notebook}->set_page($hash->{pagenum});
-}
-
-sub add_page ($) {
-       my ($hash) = @_;
-       my $name = $hash->{name};
-       if(exists $pages{$name}) {
-               croak "Page already exists: $name with ", Dumper $pages{$name};
-       }
-       $hash->{string} = $name;
-       $hash->{pagenum} = @pages;
-       push @pages, $hash;
-       $pages{$name} = $hash;
-       $gui{notebook}->append_page($hash->{frame}, $hash->{label});
-       $hash->{frame}->show;
-       set_page $hash;
-       return $hash;
-}
-
-sub create_page ($@) {
-       my ($type, @args) = @_;
-       require "Haver/Client/Gtk/Page/$type.pm";
-       my $page = "Haver::Client::Gtk::Page::$type"->new(@args);
-       return $page;
-}
-
-sub new_page ($@) {
-       my ($type, @args) = @_;
-       return add_page create_page($type, @args);
-}
-
-sub get_current_page () {
-       my $page = $gui{notebook}->get_current_page();
-       return get_page $page;
-}
-
-sub renumber_pages () {
-       for(0..$#pages) {
-               $pages[$_]->{pagenum} = $_;
-       }
-}
-
-sub del_page ($) {
-       my $id = $_[0];
-       my $pagestruct = get_page $id;
-       if(!defined $pagestruct) {
-               carp "Warning: page $id not found";
-               return;
-       }
-       $gui{notebook}->remove_page($pagestruct->{pagenum});
-       delete $pages{$pagestruct->{string}};
-       splice @pages, $pagestruct->{pagenum}, 1;
-       renumber_pages();
-}
-
-sub get_query_page ($) {
-       my $page = get_page "=$_[0]";
-       if(!$page) {
-               $page = new_page 'Query', $_[0];
-               $page->print_page("Starting query with $_[0]");
-       }
-       return $page;
-}
-
-sub print_current (@) {
-       return get_current_page()->print_page(@_);
-}
-
-my ($user, $confdir, $config);
-
-eval {
-       $user = Haver::OS->current_user();
-       $confdir = Haver::OS->config_find(
-               scope => 'user',
-               name => 'haver-gtk',
-               type => 'dir',
-       );
-
-       $globals{config} = $config = Haver::Config->new(
-               file => "$confdir/config",
-               default => {
-                       UID => $ENV{USER} || '',
-                       Address => 'hardison.net:7070',
-               },
-       );
-};
-
-if ($@) {
-       my $e = $@;
-       set_locale Gtk;
-       init Gtk;
-       my $win = new Gtk::Window("toplevel");
-       $win->set_title("haver-gtk");
-       my $vbox = new Gtk::Vbox(FALSE, 0);
-       my $lbl = new Gtk::Label("Error loading configuration file:\n\n$e");
-       my $btn = new Gtk::Button("Quit");
-       $vbox->pack_start($lbl, TRUE, TRUE, 0);
-       $vbox->pack_start($btn, FALSE, FALSE, 0);
-       $lbl->show;
-       $btn->show;
-       $win->add($vbox);
-       $vbox->show;
-       $win->show;
-
-       $win->signal_connect("delete_event", sub { exit 1; });
-       $btn->signal_connect("clicked", sub { exit 1; });
-       
-       main Gtk;
-       exit 1;
-}
-
-POE::Session->create(
-       package_states => [$PACKAGE => [qw{
-       _start
-       input
-       entry_key_pressed
-       connect_win
-       do_connect
-       quit
-       haver_connected
-       haver_connect_fail
-       haver_disconnected
-       haver_raw_in
-       haver_raw_out
-       haver_login_request
-       haver_login
-       haver_login_fail
-       haver_msg
-       haver_pmsg
-       haver_joined
-       haver_parted
-       haver_join
-       haver_part
-       haver_quit
-       haver_users
-       cmd_join
-       cmd_j
-       cmd_users
-       cmd_part
-       cmd_quit
-       cmd_msg
-       cmd_act
-       cmd_me
-       cmd_query
-       cmd_close
-       }]]);
-
-POE::Kernel->run();
-
-$config->save;
-
-sub _start {
-       my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
-       POE::Component::Client::Haver->new("haver", version => 
"haver-gtk/$VERSION");
-       $kernel->post("haver", "register", "all");
-       
-       # Create the main window
-       $gui{main_window} = Gtk::Window->new("toplevel");
-       $gui{main_window}->set_title("Haver-gtk $VERSION");
-       $gui{main_window}->set_position("center");
-       $kernel->signal_ui_destroy($gui{main_window});
-
-       if(defined $config->{window_x} && defined $config->{window_x}
-       && defined $config->{window_w} && defined $config->{window_h}) {
-               # XXX: Sanity checks
-#              $gui{main_window}->move_resize(
-#                      $config->{window_x},
-               #               $config->{window_y},
-               #       $config->{window_w},
-               #       $config->{window_h},
-               #);
-               $gui{main_window}->set_uposition($config->{window_x}, 
$config->{window_y});
-               $gui{main_window}->set_usize($config->{window_w}, 
$config->{window_h});
-       }
-
-       $gui{main_window}->signal_connect("configure-event",
-               sub {
-                       my ($win, $param) = @_;
-                       $config->{window_x} = $param->{x};
-                       $config->{window_y} = $param->{y};
-                       $config->{window_w} = $param->{width};
-                       $config->{window_h} = $param->{height};
-               }
-       );
-       
-       my $vbox = Gtk::VBox->new(0,0);
-       
-       my $notebook = $gui{notebook} = Gtk::Notebook->new();
-       $notebook->set_tab_pos("bottom");
-       
-       $vbox->pack_start($notebook, 1, 1, 0);
-       $notebook->show;
-
-       my $entrybox = $gui{entrybox} = Gtk::HBox->new(FALSE, 0);
-       $vbox->pack_start($entrybox, 0, 1, 0);
-       $entrybox->show;
-       
-       my $entry = $gui{entry} = Gtk::Entry->new();
-       $entry->signal_connect("key-press-event", 
$session->postback("entry_key_pressed"));
-       $entrybox->pack_start($entry, 1, 1, 0);
-       $entry->show;
-
-       my $send = $gui{sendbtn} = Gtk::Button->new("Send");
-       $send->signal_connect("clicked", $session->postback("input"));
-       $entrybox->pack_start($send, 0, 1, 0);
-       $send->show;
-       
-       $gui{main_window}->add($vbox);
-       $vbox->show;
-
-       $gui{main_window}->show;
-
-       new_page("Text", "Server");
-       new_page("Text", "!rawlog");
-       set_page 0;
-
-       $kernel->yield('connect_win');
-}
-
-sub input {
-       my ($kernel, $heap) = @_[KERNEL,HEAP];
-       my $text = $gui{entry}->get_text;
-       $gui{entry}->set_text('');
-       if($text =~ m|^/(\w+)\s*(.*)$|) {
-               _call("cmd_$1", $2);
-               # XXX: Error on nonexistent command
-               return;
-       }
-       if(get_current_page()->can('send_msg')) {
-               get_current_page()->send_msg(q{"}, $text);
-       }
-}
-
-sub entry_key_pressed {
-       my $kernel = $_[KERNEL];
-       my $event = $_[ARG1]->[1];
-       if($event->{keyval} == $Gtk::Keysyms{Return}) {
-               $kernel->yield('input');
-       }
-       # TODO: history
-}
-
-sub connect_win {
-       my ($heap, $session) = @_[HEAP,SESSION];
-       if(defined $gui{connect_win} || $heap->{exiting}) {
-               return;
-       }
-       my %cw;
-       $gui{connect_win} = \%cw;
-       
-       $cw{window} = Gtk::Window->new("toplevel");
-       $cw{window}->set_modal(TRUE);
-       $cw{window}->set_title("Connect to Haver server");
-       $cw{window}->set_position("mouse");
-       
-       my $table = Gtk::Table->new(scalar(@fields) + 1, 2, FALSE);
-       my $opts = [qw{fill shrink expand}];
-       
-       for my $i (0..$#fields) {
-               my $label = Gtk::Label->new($fields[$i]);
-               my $text = $cw{"field_$fields[$i]"} = Gtk::Entry->new();
-
-               $table->attach($label, 0, 1, $i, $i + 1, $opts, $opts, 0, 0);
-               $table->attach($text, 1, 2, $i, $i + 1, $opts, $opts, 0, 0);
-
-               $label->show;
-               $text->show;
-       }
-
-       $cw{"field_Password"}->set_visibility(FALSE);
-
-       my $cbtn = $cw{connect_btn} = Gtk::Button->new("Connect");
-       $cbtn->signal_connect("clicked", $session->postback("do_connect"));
-       $table->attach($cbtn, 0, 1, scalar(@fields), scalar(@fields) + 1,
-               $opts, $opts, 0, 0);
-       $cbtn->show;
-
-       my $qbtn = $cw{quit_btn} = Gtk::Button->new("Quit");
-       $qbtn->signal_connect("clicked", $session->postback("quit"));
-       $table->attach($qbtn, 1, 2, scalar(@fields), scalar(@fields) + 1,
-               $opts, $opts, 0, 0);
-       $qbtn->show;
-
-       for(@saved_fields) {
-               my $value = $config->{$_};
-               if($value) {
-                       $cw{"field_$_"}->set_text($value);
-               }
-       }
-       
-       $cw{window}->add($table);
-       $table->show;
-       $cw{window}->show;
-}
-
-sub do_connect {
-       my ($kernel, $heap) = @_[KERNEL,HEAP];
-       my $info = {};
-       if(!$gui{connect_win}) {
-               carp "Eep! do_connect without connect_win";
-               return;
-       }
-       for(@fields) {
-               $info->{$_} = $gui{connect_win}->{"field_$_"}->get_text();
-       }
-       for(@required_fields) {
-               return if (!defined $info->{$_} || $info->{$_} =~ /^\s*$/);
-       }
-       for(@saved_fields) {
-               $config->{$_} = $info->{$_};
-       }
-       $info->{Address} =~ /^([^:]+)(?::(\d+))?$/ or return;
-       $kernel->post("haver", "connect",
-               Host => $1,
-               Port => $2 || 7070,
-               UID  => $info->{UID},
-               Password => $info->{Password},
-       );
-       get_page(0)->print_page("Connecting to $info->{Address}...");
-       $gui{connect_win}{window}->destroy;
-       delete $gui{connect_win};
-       %globals = %$info;
-}
-
-sub quit {
-       my ($kernel,$heap) = @_[KERNEL,HEAP];
-       $gui{main_window}->destroy;
-       $gui{connect_win}{window}->destroy if $gui{connect_win};
-       $heap->{exiting} = 1;
-       $kernel->post("haver", "destroy");
-}
-
-sub cmd_quit { goto &quit; }
-       
-sub haver_connected {
-       get_page(0)->print_page("Connected, logging in.");
-}
-
-sub haver_connect_fail {
-       my $kernel = $_[KERNEL];
-       my ($args, $scope) = @_[ARG0,ARG1];
-       my ($enum, $estr) = @$args;
-       
-       get_page(0)->print_page("Connection error: $estr");
-       $kernel->yield('connect_win');
-}
-
-sub haver_login_fail {
-       my ($kernel, $args) = @_[KERNEL,ARG0];
-       my $elong = $args->[2];
-
-       get_page(0)->print_page("Login failure: $elong");
-       $kernel->post('haver', 'disconnect');
-}
-
-sub haver_disconnected {
-       my ($kernel, $heap) = @_[KERNEL,HEAP];
-       get_page(0)->print_page("Disconnected");
-       for(keys %pages) {
-               next unless ($_ =~ /^\#/);
-               del_page $_;
-       }
-       $heap->{clist} = {};
-       $kernel->yield('connect_win');
-}
-sub haver_raw_in {
-       my @data = @{$_[ARG0]};
-       get_page('!rawlog')->print_page("S: " . join "\t", @data);
-}
-sub haver_raw_out {
-       my @data = @{$_[ARG0]};
-       get_page('!rawlog')->print_page("C: " . join "\t", @data);
-}
-sub haver_login_request {
-       my $kernel = $_[KERNEL];
-       get_page(0)->print_page("Login failed.");
-       $kernel->post('haver', 'disconnect');
-}
-sub haver_login {
-       get_page(0)->print_page("Logged in.");
-       $_[HEAP]->{ready} = 1;
-}
-sub haver_msg {
-       my ($kernel, $heap, $args, $chan) = @_[KERNEL,HEAP,ARG0,ARG1];
-       my ($type, $from, $text) = (@$args)[0,1,2];
-       my @lines = split "\n", $text;
-       if($type eq q{"}) {
-               get_page("#$chan")->print_page(map { "$from: $_" } @lines);
-       } elsif ($type eq q{:}) {
-               get_page("#$chan")->print_page(map { "* $from $_" } @lines);
-       }
-}
-
-sub haver_pmsg {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       my ($type, $from, $text) = @$args;
-       my @lines = split "\n", $text;  
-       if($type eq q{"}) {
-               get_query_page($from)->print_page(map { "$from: $_" } @lines);
-       } elsif ($type eq q{:}) {
-               get_query_page($from)->print_page(map { "* $from $_" } @lines);
-       }
-}
-
-sub haver_joined {
-       my ($kernel, $heap, $channel) = @_[KERNEL,HEAP,ARG1];
-       unless(exists $heap->{clist}->{$channel}) {
-               get_page(0)->print_page("Joined $channel but didn't want to!");
-               $kernel->post('haver', 'part', $channel);
-               return;
-       }
-       return if(defined $heap->{clist}->{$channel});
-       $heap->{clist}->{$channel} = new_page("Channel", "$channel");
-       get_page("#$channel")->print_page("Joined $channel.");
-       $kernel->post('haver', 'users', $channel);
-}      
-
-sub cmd_join {
-       my ($kernel, $heap, $chan) = @_[KERNEL,HEAP,ARG0];
-       if(exists $heap->{clist}->{$chan}) {
-               set_page "#$chan" if get_page "#$chan";
-               return;
-       }
-       $kernel->post("haver", "join", $chan);
-       $heap->{clist}->{$chan} = undef;
-}
-
-sub haver_join {
-       my ($kernel, $heap, $args, $channel) = @_[KERNEL,HEAP,ARG0,ARG1];
-       my $uid = $args->[0];
-
-       my $page = get_page("#$channel");
-       return unless $page;
-       $page->add_ulist($uid);
-       $page->print_page("$uid has joined $channel.");
-}
-
-sub haver_part {
-       my ($kernel, $heap, $args, $channel) = @_[KERNEL,HEAP,ARG0,ARG1];
-       my $uid = $args->[0];
-
-       my $page = get_page("#$channel");
-       return unless $page;
-       $page->del_ulist($uid);
-       $page->print_page("$uid has left $channel.");
-}
-
-sub haver_quit {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       my ($uid, $why) = @$args;
-
-       for(keys %pages) {
-               next unless $_ =~ /^\#/;
-               my $page = $pages{$_};
-               my $present = $page->del_ulist($uid);
-               $page->print_page("$uid has quit: $why") if($present);
-       }
-}
-
-sub cmd_j { goto &cmd_join }
-
-sub cmd_users {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       my $chan;
-       if($args =~ /^(\w+)/) {
-               $chan = $1;
-       } else {
-               $chan = get_current_page()->{string};
-               unless($chan =~ s/^\#//) {
-                       print_current "That command can only be used in a 
channel window.";
-                       return;
-               }
-       }
-       $kernel->post('haver', 'users', $chan);
-}
-
-sub haver_users {
-       my ($kernel, $heap, $args, $chan) = @_[KERNEL,HEAP,ARG0,ARG1];
-       my @users = @$args;
-       get_page("#$chan")->set_ulist(@users);
-       get_page("#$chan")->print_page("Users for channel $chan:", join(" - ", 
@users)); # XXX: Split into multiple lines
-}
-
-sub haver_parted {
-       my ($kernel, $heap, $chan) = @_[KERNEL,HEAP,ARG1];
-       my $page = delete $heap->{clist}->{$chan};
-       return unless defined $page;
-       del_page $page;
-}
-
-sub cmd_part {
-       my ($kernel, $heap, $chan) = @_[KERNEL,HEAP,ARG0];
-       unless($chan =~ s/^\#?(\w+)$/$1/) {
-               if($chan eq '') {
-                       $chan = get_current_page()->{string};
-                       unless($chan =~ s/^\#//) {
-                               print_current "This is not a channel tab";
-                               return;
-                       }
-               } else {
-                       print_current "Syntax: /part [channel]";
-               }
-       }               
-       if(!defined $heap->{clist}->{$chan}) {
-               delete $heap->{clist}->{$chan};
-               return;
-       }
-       $kernel->post('haver', 'part', $chan);
-}
-
-sub cmd_msg {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       unless($args =~ /^\s*(\S+)\s*(.+)$/) {
-               print_current "Syntax: /msg UID text";
-               return;
-       }
-       get_query_page($1)->send_msg(q{"}, $2);
-}
-
-sub cmd_act {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       unless($args =~ /^\s*(\S+)\s*(.+)$/) {
-               print_current "Syntax: /msg UID text";
-               return;
-       }
-       get_query_page($1)->send_msg(q{:}, $2);
-}
-
-sub cmd_me {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       return unless(get_current_page()->can('send_msg'));
-       get_current_page()->send_msg(q{:}, $args);
-}
-
-sub cmd_query {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       set_page get_query_page($args);
-}
-
-sub cmd_close {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       my $page = get_current_page();
-       unless($args =~ /^\s*$/) {
-               $page = get_page($args);
-               if(!$page) {
-                       print_current "No such page $args";
-                       return;
-               }
-       }
-       if($page->can("close")) {
-               if($page->close()) {
-                       del_page $page;
-               }
-       } else {
-               print_current "Can't close that kind of page, sorry :(";
-       }
-}


Reply via email to