add panes
[spider.git] / gtkconsole / gtkconsole
index 4b3a34eda8c8b891b6a3058bd5bb86dd1bb1292a..cfa771b0b39f7a8d6e17e78051d1dda812e7a270 100755 (executable)
@@ -2,11 +2,15 @@
 #
 # A GTK based console program
 #
-# Copyright (c) 2001 Dirk Koopman G1TLH
+# Copyright (c) 2001-6 Dirk Koopman G1TLH
 #
 # $Id$
 #
 
+use strict;
+
+our $root;
+
 # search local then perl directories
 BEGIN {
        # root of directory tree for this system
@@ -18,13 +22,13 @@ BEGIN {
        unshift @INC, "$root/local";
 }
 
-use strict;
-
 use Glib;
 use Gtk2 qw(-init);
 use Gtk2::Helper;
 use Gtk2::SimpleList;
 
+use Text::Wrap;
+
 use vars qw(@modules $font);                    
 
 @modules = ();                                 # is the list of modules that need init calling
@@ -33,9 +37,14 @@ use vars qw(@modules $font);
 use DXVars;
 use DXUtil;
 use IO::Socket::INET;
-use Text;
-use DebugHandler;
 
+# 
+# read in gtkconsole file
+
+Gtk2::Rc->set_default_files("$root/gtkconsole/gtkconsolerc", "$ENV{HOME}/.gtkconsolerc", ".gtkconsolerc");
+print join(', ', Gtk2::Rc->get_default_files), "\n";
+Gtk2::Rc->reparse_all;
 #
 # main initialisation
 #
@@ -50,8 +59,8 @@ if ($ssid) {
 
 die "You cannot connect as your cluster callsign ($main::mycall)\n" if $call eq $main::mycall;
 
-my $host = 'localhost';
-my $port = 7301;
+my $host = 'gb7djk.dxcluster.net';
+my $port = 7300;
 
 my $sock = IO::Socket::INET->new(PeerAddr=>$host, PeerPort=>$port);
 die "Cannot connect to  $host/$port ($!)\n" unless $sock;
@@ -74,7 +83,10 @@ sendmsg('I', 'set/nobeep');
 #
 # main window
 my $main = new Gtk2::Window('toplevel');
-$main->set_default_size(600, 600);
+my $scr = $main->get_screen;
+my $scr_width = $scr->get_width;
+my $scr_height = $scr->get_height;
+$main->set_default_size($scr_width, $scr_height/2);
 $main->signal_connect('delete_event', sub { Gtk2->main_quit; });
 $main->set_title("gtkconsole - The DXSpider Console - $call");
 
@@ -96,19 +108,18 @@ my $menu = $itemf->get_widget('<main>');
 $vbox->pack_start($menu, 0, 1, 0);
 
 
-# another hbox is packed as the bottom of the vbox
-my $bhbox = Gtk2::HBox->new(0, 1);
-$vbox->pack_end($bhbox, 1, 1, 0);
+# a paned hbox is packed as the bottom of the vbox
+my $bhpane = Gtk2::HPaned->new;
+$vbox->pack_end($bhpane, 1, 1, 0);
 
-# now pack two vboxes into the hbox
-my $lhvbox = Gtk2::VBox->new(0, 1);
-my $rhvbox = Gtk2::VBox->new(0, 1);
-$bhbox->pack_start($lhvbox, 1, 1, 5);
-$bhbox->pack_start(Gtk2::VSeparator->new, 0, 1, 0);
-$bhbox->pack_end($rhvbox, 1, 1, 5);
+# now create the lh and rh panes
+my $lhvpane = Gtk2::VPaned->new;
+my $rhvpane = Gtk2::VPaned->new;
+$bhpane->pack1($lhvpane, 1, 0);
+$bhpane->pack2($rhvpane, 1, 0);
 
 # first add a column type for the QRG
-my $font = 'monospace 10';
+my $font = 'monospace 9';
 my $oddbg = 'light blue';
 my $evenbg = 'white';
 
@@ -118,7 +129,7 @@ Gtk2::SimpleList->add_column_type( 'qrg',
                      attr     => sub {
                           my ($treecol, $cell, $model, $iter, $col_num) = @_;
                           my $info = $model->get ($iter, $col_num);
-                          $cell->set(text => sprintf("%.1f", $info), font => $font);
+                          $cell->set(text => sprintf("%.1f", $info), font => $font, xalign => 1.0);
                      }
                 );
 
@@ -133,6 +144,39 @@ Gtk2::SimpleList->add_column_type( 'tt',
                      }
                 );
 
+Gtk2::SimpleList->add_column_type( 'ttlong',
+                     type     => 'Glib::Scalar',
+                     renderer => 'Gtk2::CellRendererText',
+                     attr     => sub {
+                          my ($treecol, $cell, $model, $iter, $col_num) = @_;
+                          my $info = $model->get ($iter, $col_num);
+                                                 $Text::Wrap::columns = 80;
+                          $cell->set(text => join("\n",wrap("","",$info)), font => $font);
+                     }
+                );
+
+Gtk2::SimpleList->add_column_type( 'ttlesslong',
+                     type     => 'Glib::Scalar',
+                     renderer => 'Gtk2::CellRendererText',
+                     attr     => sub {
+                          my ($treecol, $cell, $model, $iter, $col_num) = @_;
+                          my $info = $model->get ($iter, $col_num);
+                                                 $Text::Wrap::columns = 65;
+                          $cell->set(text => join("\n",wrap("","",$info)), font => $font);
+                     }
+                );
+
+Gtk2::SimpleList->add_column_type( 'ttshort',
+                     type     => 'Glib::Scalar',
+                     renderer => 'Gtk2::CellRendererText',
+                     attr     => sub {
+                          my ($treecol, $cell, $model, $iter, $col_num) = @_;
+                          my $info = $model->get ($iter, $col_num);
+                                                 $Text::Wrap::columns = 30;
+                          $cell->set(text => join("\n",wrap("","",$info)), font => $font);
+                     }
+                );
+
 
 #
 # LEFT HAND SIDE
@@ -144,36 +188,36 @@ my $dxlist = Gtk2::SimpleList->new(
                                                                   'QRG' => 'qrg',
                                                                   'DX Call' => 'tt',
                                                                   'Grid' => 'tt',
-                                                                  'Remarks' => 'tt',
+                                                                  'Remarks' => 'ttshort',
                                                                   'By' => 'tt',
                                                                   'Grid' => 'tt',
                                                                   'TxTime' => 'tt',
                                                                  );
+$dxlist->set_rules_hint(1);
 my $dxscroll = Gtk2::ScrolledWindow->new (undef, undef);
 $dxscroll->set_shadow_type ('etched-out');
 $dxscroll->set_policy ('never', 'automatic');
 #$dxscroll->set_size_request (700, 400);
 $dxscroll->add($dxlist);
 $dxscroll->set_border_width(5);
-$lhvbox->pack_start($dxscroll, 1, 1, 0);
+
+$lhvpane->pack1($dxscroll, 1, 0);
 
 # The command list
+my $lhvbox = Gtk2::VBox->new(0, 1);
 my $cmdlist = Gtk2::SimpleList->new(
                                                                        RxTime => 'tt',
-                                                                       Information => 'tt',
+                                                                       Information => 'ttlong',
                                                                   );
 my $cmdscroll = Gtk2::ScrolledWindow->new (undef, undef);
 $cmdscroll->set_shadow_type ('etched-out');
-$cmdscroll->set_policy ('never', 'automatic');
+$cmdscroll->set_policy ('automatic', 'automatic');
 #$cmdscroll->set_size_request (700, 400);
 $cmdscroll->add($cmdlist);
 $cmdscroll->set_border_width(5);
 $lhvbox->pack_start($cmdscroll, 1, 1, 0);
 
 
-# nice little separator
-$lhvbox->pack_start(Gtk2::HSeparator->new, 0, 1, 0 );
-
 # callsign and current date and time
 my $hbox = new Gtk2::HBox;
 my $calllabel = new Gtk2::Label($call);
@@ -190,6 +234,7 @@ $bot->set_editable(1);
 $bot->signal_connect('activate', \&bothandler);
 $bot->can_default(1);
 $lhvbox->pack_end($bot, 0, 1, 0);
+$lhvpane->pack2($lhvbox, 1, 0);
 $bot->grab_default;
 
 #
@@ -201,26 +246,30 @@ my $annlist = Gtk2::SimpleList->new(
                                                                        RxTime => 'tt',
                                                                        From => 'tt',
                                                                        To => 'tt',
-                                                                       Announcement => 'tt',
+                                                                       Announcement => 'ttlesslong',
                                                                   );
+$annlist->set_rules_hint(1);
 my $annscroll = Gtk2::ScrolledWindow->new (undef, undef);
 $annscroll->set_shadow_type ('etched-out');
 $annscroll->set_policy ('automatic', 'automatic');
 #$annscroll->set_size_request (700, 400);
 $annscroll->add($annlist);
 $annscroll->set_border_width(5);
-$rhvbox->pack_start($annscroll, 0, 1, 0);
+$rhvpane->pack1($annscroll, 1, 0);
 
 # The wwv list
+my $rhvbox = Gtk2::VBox->new(0, 1);
+
 my $wwvlist = Gtk2::SimpleList->new(
                                                                        RxTime => 'tt',
                                                                        From => 'tt',
                                                                        SFI => 'int',
                                                                        A => 'int',
                                                                        K => 'int',
-                                                                       Remarks => 'tt',
+                                                                       Remarks => 'ttshort',
                                                                        Hour => 'tt'
                                                                   );
+$wwvlist->set_rules_hint(1);
 my $wwvscroll = Gtk2::ScrolledWindow->new (undef, undef);
 $wwvscroll->set_shadow_type ('etched-out');
 $wwvscroll->set_policy ('never', 'automatic');
@@ -241,15 +290,19 @@ my $wcylist = Gtk2::SimpleList->new(
                                                                        SA => 'tt',
                                                                        GMF => 'tt',
                                                                        Aurora => 'tt',
-                                                                       Time => 'tt'
+                                                                       Hour => 'tt'
                                                                   );
+$wcylist->set_rules_hint(1);
 my $wcyscroll = Gtk2::ScrolledWindow->new (undef, undef);
 $wcyscroll->set_shadow_type ('etched-out');
 $wcyscroll->set_policy ('never', 'automatic');
-#$wcyscroll->set_size_request (700, 200);
 $wcyscroll->add($wcylist);
 $wcyscroll->set_border_width(5);
 $rhvbox->pack_start($wcyscroll, 1, 1, 0);
+$rhvbox->set_size_request (-1, $scr_height / 4);
+
+
+$rhvpane->pack2($rhvbox, 1, 0);
 
 my $sock_helper = Gtk2::Helper->add_watch($sock->fileno, 'in', \&tophandler, $sock);
  
@@ -322,7 +375,7 @@ sub handlemsg
                if (__PACKAGE__->can($handle)) {
                        __PACKAGE__->$handle($list);
                } else {
-                       push @$list, $cmd;
+                       unshift @$list, $cmd;
                        __PACKAGE__->handle_def($list);
                }
        }
@@ -336,9 +389,9 @@ sub handle_cmd
        my $s;
        $s = ref $ref ? join ', ',@$ref : $ref;
 
-       if (exists $cmdlist->{lasttime} != $t) {
+       if (($cmdscroll->{lasttime}||0) != $t) {
                $ts = tim($t);
-               $cmdlist->{lasttime} = $t;
+               $cmdscroll->{lasttime} = $t;
        }
 
        chomp $s;
@@ -353,9 +406,9 @@ sub handle_def
        $s = ref $ref ? join ', ',@$ref : $ref;
        my ($t, $ts) = (time, '');
 
-       if (exists $cmdlist->{lasttime} != $t) {
+       if (($cmdscroll->{lasttime}||0) != $t) {
                $ts = tim($t);
-               $cmdlist->{lasttime} = $t;
+               $cmdscroll->{lasttime} = $t;
        }
        
        chomp $s;
@@ -368,9 +421,9 @@ sub handle_dx
        my $ref = shift;
        my ($t, $ts) = (time, '');
 
-       if (exists $dxlist->{lasttime} != $t) {
+       if (($dxscroll->{lasttime}||0) != $t) {
                $ts = tim($t);
-               $dxlist->{lasttime} = $t;
+               $dxscroll->{lasttime} = $t;
        }
        push @{$dxlist->{data}}, [$ts,  @$ref[0,1,15,3,4,16], stim($ref->[2]) ];
        
@@ -384,13 +437,13 @@ sub handle_ann
        my $s;
        $s = ref $ref ? join ', ',@$ref : $ref;
 
-       if (exists $cmdlist->{lasttime} != $t) {
+       if (($annscroll->{lasttime}||0) != $t) {
                $ts = tim($t);
-               $cmdlist->{lasttime} = $t;
+               $annscroll->{lasttime} = $t;
        }
 
        chomp $s;
-       push @{$cmdlist->{data}}, [$ts,  @$ref[0,1,2]];
+       push @{$annlist->{data}}, [$ts,  @$ref[3,1,2]];
 }
 
 sub handle_wcy
@@ -401,7 +454,7 @@ sub handle_wcy
        $s = ref $ref ? join ', ',@$ref : $ref;
 
        chomp $s;
-       push @{$cmdlist->{data}}, [tim(),  @$ref[10,4,5,3,6,2,7,8,9,1] ];
+       push @{$wcylist->{data}}, [tim(),  @$ref[10,4,5,3,6,2,7,8,9,1] ];
 }
 
 sub handle_wwv
@@ -412,7 +465,7 @@ sub handle_wwv
        $s = ref $ref ? join ', ',@$ref : $ref;
 
        chomp $s;
-       push @{$cmdlist->{data}}, [tim(),  @$ref[6,2,3,4,5,1] ];
+       push @{$wwvlist->{data}}, [tim(),  @$ref[6,2,3,4,5,1] ];
 }
 
 #