# A GTK based console program
#
# usage: gtkconsole [<callsign>] [<host> <port>]
-#
+#
# Copyright (c) 2006-2007 Dirk Koopman G1TLH
#
#
# search local then perl directories
BEGIN {
# root of directory tree for this system
- $root = "/spider";
+ $root = "/spider";
$root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
}
use Screen;
-use vars qw(@modules $font);
+use vars qw(@modules $font);
@modules = (); # is the list of modules that need init calling
# on them. It is set up by each 'use'ed module
our $main; # the main screen
our $scr_width; # calculated screen dimensions
our $scr_height;
-our ($dx, $cmd, $ann, $wcy, $wwv); # scrolling list windows
+our ($dx, $cmd, $ann, $wcy, $wwv, $chat); # scrolling list windows
our $bot; # the cmd entry window
our $date; # the current date
+# other windows
+our $annwin; # the announcement window handle
+our $dxwin; # the dx spot window handle
+our $wwvwin; # wwv window handle
+our $wcywin; # wcy window handle
+our $chatwin; # chat window handle
+
require "$root/local/DXVars.pm" if -e "$root/local/DXVars.pm";
# read in the user data
our $user = read_user_data();
our $call;
our $passwd;
-our $host;
+our $host = 'localhost';
our $port = 7300;
-#
+#
# read in gtkconsole file
#
Gtk2::Rc->set_default_files("$root/gtkconsole/gtkconsolerc", "$ENV{HOME}/.gtkconsolerc", ".gtkconsolerc");
Gtk2::Rc->reparse_all;
-
+
# sort out a callsign, host and port, looking in order
# 1. the command line
# 2. any defaults in the user data;
unless ($call && $host) {
my $node = $user->{clusters}->{$user->{node}};
-
+
if ($node->{call} || $user->{call}) {
$call = $node->{call} || $user->{call} || $main::myalias;
$host = $node->{passwd};
sendmsg('set/nobeep');
my $sock_helper = Gtk2::Helper->add_watch($sock->fileno, 'in', \&tophandler, $sock);
-
+
# the main loop
$main->show_all;
$bot->grab_focus;
{
my ($fd, $condx, $socket) = @_;
- my $offset = length $rbuf;
+ my $offset = defined $rbuf ? length $rbuf : 0;
my $l = sysread($socket, $rbuf, 1024, $offset);
if (defined $l) {
if ($l) {
Gtk2->main_quit;
}
1;
-
+
}
sub handlemsg
$dx->{lasttime} = $t;
}
$dx->add_data([$ts, @$ref[0,1,15,3,4,16], stim($ref->[2]) ]);
-
+ $dxwin->show_all;
}
sub handle_ann
my $self = shift;
my $ref = shift;
my ($t, $ts) = (time, '');
- my $s;
- $s = ref $ref ? join ', ',@$ref : $ref;
+# my $s;
+# $s = ref $ref ? (join ', ',@$ref) : $ref;
if (($ann->{lasttime}||0) != $t) {
$ts = tim($t);
$ann->{lasttime} = $t;
}
- chomp $s;
+# chomp $s;
$ann->add_data([$ts, @$ref[3,1,2]]);
+ $annwin->show_all;
}
sub handle_wcy
{
my $self = shift;
my $ref = shift;
- my $s;
- $s = ref $ref ? join ', ',@$ref : $ref;
+# my $s;
+# $s = ref $ref ? join ', ',@$ref : $ref;
- chomp $s;
+# chomp $s;
$wcy->add_data([tim(), @$ref[10,4,5,3,6,2,7,8,9,1] ]);
+ $wcywin->show_all;
}
sub handle_wwv
{
my $self = shift;
my $ref = shift;
+# my $s;
+# $s = ref $ref ? join ', ',@$ref : $ref;
+
+# chomp $s;
+ $wwv->add_data([tim(), @$ref[6,2,3,4,5,1] ]);
+ $wwvwin->show_all;
+}
+
+
+sub handle_chat
+{
+ my $self = shift;
+ my $ref = shift;
+ my ($t, $ts) = (time, '');
my $s;
- $s = ref $ref ? join ', ',@$ref : $ref;
+ $s = ref $ref ? (join ', ',@$ref) : $ref;
+
+ if (($ann->{lasttime}||0) != $t) {
+ $ts = tim($t);
+ $ann->{lasttime} = $t;
+ }
chomp $s;
- $wwv->add_data([tim(), @$ref[6,2,3,4,5,1] ]);
+ $chat->add_data([$ts, @$ref[3,1,2]]);
+ $chatwin->show_all;
}
sub read_user_data
{
my $u;
-
+
if (-e $userfn) {
my $fh = new IO::File $userfn;
my $s = undef;
}
unless ($u) {
print "$userfn missing or unreadable, starting afresh!\n";
-
+
$u = {
clusters => {
'LOCAL' => {host => '127.0.0.1', port => 7300},
sub write_user_data
{
my $u = shift;
-
+
my $fh = new IO::File ">$userfn";
if ($fh) {
my $dd = new Data::Dumper([ $u ]);
$dd->Indent(1);
- $dd->Terse(1);
$dd->Quotekeys(0);
$fh->print($dd->Dumpxs);
$fh->close;
{
$main = new Gtk2::Window('toplevel');
my $scr = $main->get_screen;
- $scr_width = int ($scr->get_width > 1280 ? 1280 : $scr->get_width) * 0.99;
- $scr_height = int $scr->get_height * 0.5;
+ $scr_width = $scr->get_width;
+ $scr_width = 700 if $scr_width > 700;
+ $scr_height = int ($scr->get_height * 0.66);
$main->set_default_size($scr_width, $scr_height);
$main->signal_connect('delete_event', sub { Gtk2->main_quit; });
},
];
-
+
my $menu = Gtk2::SimpleMenu->new(menu_tree => $menutree, default_callback => \&def_menu_callback, user_data => $user);
$vbox->pack_start($menu->{widget}, 0, 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);
+# my $bhpane = Gtk2::HPaned->new;
+# $vbox->pack_end($bhpane, 1, 1, 0);
# 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);
-
- #
- # LEFT HAND SIDE
- #
- # The announce list
- $ann = Screen::List->new(fields =>[
- RxTime => 'tt',
- From => 'tt',
- To => 'tt',
- Announcement => 'ttlesslong',
- ],
- hint => 1,
- frame => 'Announcements',
- size => [$scr_width * 0.45, $scr_height * 0.33],
- );
+# my $lhvpane = Gtk2::VPaned->new;
+# my $rhvpane = Gtk2::VPaned->new;
+# $bhpane->pack1($lhvpane, 1, 0);
+# $bhpane->pack2($rhvpane, 1, 0);
- $lhvpane->pack1($ann->widget, 1, 0);
# The command list
- my $lhvbox = Gtk2::VBox->new(0, 1);
+# my $lhvbox = Gtk2::VBox->new(0, 1);
$cmd = Screen::List->new(fields => [
RxTime => 'tt',
Information => 'ttlong',
],
- size => [$scr_width * 0.45, $scr_height * 0.66],
+ size => [$scr_width, $scr_height * 0.66],
);
- $lhvbox->pack_start($cmd->widget, 1, 1, 0);
+ $vbox->pack_start($cmd->widget, 1, 1, 0);
# callsign and current date and time
$date->{tick} = Glib::Timeout->add(1000, \&updatetime, $date);
$hbox->pack_start( $calllabel, 0, 1, 0 );
$hbox->pack_end($date, 0, 1, 0);
- $lhvbox->pack_start($hbox, 0, 1, 0);
- $lhvbox->pack_start(Gtk2::HSeparator->new, 0, 1, 0);
+ $vbox->pack_start($hbox, 0, 1, 0);
+ $vbox->pack_start(Gtk2::HSeparator->new, 0, 1, 0);
# the bottom handler
$bot = new Gtk2::Entry;
$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);
+ $vbox->pack_end($bot, 0, 1, 0);
+# $lhvpane->pack2($lhvbox, 1, 0);
$bot->grab_default;
#
- # RIGHT HAND SIDE
+ #
#
+ #
+ # The announce list
+ $annwin = new Gtk2::Window('toplevel');
+ $ann = Screen::List->new(fields =>[
+ RxTime => 'tt',
+ From => 'tt',
+ To => 'tt',
+ Announcement => 'ttlesslong',
+ ],
+ hint => 1,
+ frame => 'Announcements',
+ size => [$scr_width * 0.85, $scr_height * 0.25],
+ );
+ $annwin->add($ann->widget);
+# $annwin->show_all;
+
+ # The announce list
+ $chatwin = new Gtk2::Window('toplevel');
+ $chat = Screen::List->new(fields =>[
+ RxTime => 'tt',
+ From => 'tt',
+ To => 'tt',
+ Chat => 'ttlesslong',
+ ],
+ hint => 1,
+ frame => 'Chat',
+ size => [$scr_width * 0.85, $scr_height * 0.25],
+ );
+ $chatwin->add($chat->widget);
+# $annwin->show_all;
+
# DX window
+ $dxwin = new Gtk2::Window('toplevel');
$dx = Screen::List->new(fields => [
'RxTime' => 'tt',
'QRG' => 'qrg',
hint => 1,
frame => "DX Spots",
maxsize => 500,
- size => [$scr_width * 0.45, $scr_height * 0.45],
+ size => [$scr_width * 0.9, $scr_height * 0.25],
);
- $rhvpane->pack1($dx->widget, 1, 0);
+# $rhvpane->pack1($dx->widget, 1, 0);
+ $dxwin->add($dx->widget);
+# $dxwin->show_all;
# The wwv list
- my $rhvbox = Gtk2::VBox->new(0, 1);
+ $wwvwin = new Gtk2::Window('toplevel');
+ # my $rhvbox = Gtk2::VBox->new(0, 1);
$wwv = Screen::List->new( fields =>[
RxTime => 'tt',
From => 'tt',
policy => ['never', 'automatic'],
frame => 'WWV Data',
);
- $rhvbox->pack_start($wwv->widget, 1, 1, 0);
+ $wwvwin->add($wwv->widget);
+# $wwvwin->show_all;
+
+# $rhvbox->pack_start($wwv->widget, 1, 1, 0);
# The wcy list
+ $wcywin = new Gtk2::Window('toplevel');
$wcy = Screen::List->new(fields => [
RxTime => 'tt',
From => 'tt',
ExpK => 'int',
A => 'int',
R => 'int',
- SFI => 'int',
+ SFI => 'int',
SA => 'tt',
GMF => 'tt',
Aurora => 'tt',
- Hour => 'tt'
+ Hour => 'tt'
],
hint => 1,
policy => ['never', 'automatic'],
frame => 'WCY Data',
);
- $rhvbox->pack_start($wcy->widget, 1, 1, 0);
- $rhvbox->set_size_request($scr_width * 0.45, $scr_height * 0.33);
- $rhvpane->pack2($rhvbox, 1, 0);
+# $rhvbox->pack_start($wcy->widget, 1, 1, 0);
+# $rhvbox->set_size_request($scr_width * 0.45, $scr_height * 0.33);
+# $rhvpane->pack2($rhvbox, 1, 0);
+ $wcywin->add($wcy->widget);
+# $wcywin->show_all;
}