X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=gtkconsole%2Fgtkconsole;h=6b3a7798a5c8973029816cc64d80cd7af021f373;hb=2592f24e43c0417d0d314671c1986f7bdb9ee056;hp=724f0fc53b60c8d29c39ad2b48807090f75ff5ba;hpb=c20912fa90a1c3dd97d437e08691b5dc043dd869;p=spider.git diff --git a/gtkconsole/gtkconsole b/gtkconsole/gtkconsole index 724f0fc5..6b3a7798 100755 --- a/gtkconsole/gtkconsole +++ b/gtkconsole/gtkconsole @@ -14,6 +14,7 @@ BEGIN { $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'}; unshift @INC, "$root/perl"; # this IS the right way round! + unshift @INC, "$root/gtkconsole"; unshift @INC, "$root/local"; } @@ -26,6 +27,7 @@ use vars qw(@modules); # that has Gtk stuff in it use DXVars; +use DXUtil; use IO::Socket::INET; use Gtk qw(-init); use Text; @@ -70,7 +72,6 @@ $main->set_title("gtkconsole - The DXSpider Console - $call"); my $vbox = new Gtk::VBox(0, 1); $vbox->border_width(1); $main->add($vbox); -$vbox->show; # the menu bar my @menu = ( @@ -87,31 +88,52 @@ my $menu = $itemf->get_widget('
'); $vbox->pack_start($menu, 0, 1, 0); $menu->show; -# create a vertically paned window and stick it in the bottom of the screen -my $paned = new Gtk::VPaned; -$vbox->pack_end($paned, 1, 1, 0); my $top = new Text(1); my $toplist = $top->text; $toplist->set_editable(0); -$paned->pack1($top, 1, 1); # add the handler for incoming messages from the node my $tophandler = Gtk::Gdk->input_add($sock->fileno, ['read'], \&tophandler, $sock); my $rbuf = ""; # used in handler +$toplist->{signalid} = $toplist->signal_connect(insert_text => \&doinsert, $toplist); +#$bot->{signalid} = $bot->signal_connect(insert_text => \&botinsert, $bot); +$vbox->pack_start($top, 1, 1, 0); +$vbox->show; + # the bottom handler -my $bot = new Text(1); -my $botlist = $bot->text; -$botlist->set_editable(1); -$botlist->signal_connect('activate', \&bothandler); -$botlist->can_focus(1); -$botlist->can_default(1); -$botlist->grab_focus; -$botlist->grab_default; -$toplist->{signalid} = $toplist->signal_connect(insert_text => \&doinsert); -$paned->pack2($bot, 0, 1); -$paned->show; +my $bot = new Gtk::Entry; +$bot->set_editable(1); +$bot->signal_connect('activate', \&bothandler); +$bot->can_focus(1); +$bot->can_default(1); +$bot->grab_focus; +$bot->grab_default; +$bot->show; + +# a horizontal box +my $hbox = new Gtk::HBox; +$hbox->show; + +# callsign and current date and time +my $calllabel = new Gtk::Label($call); +my $date = new Gtk::Label(cldatetime(time)); +Gtk->timeout_add(1000, \&updatetime); +$calllabel->show; +$date->show; + +$hbox->pack_start( $calllabel, 0, 1, 0 ); +$hbox->pack_end($date, 0, 1, 0); + + +$vbox->pack_start($hbox, 0, 1, 0); + +# nice little separator +my $separator = new Gtk::HSeparator(); +$vbox->pack_start( $separator, 0, 1, 0 ); +$separator->show(); +$vbox->pack_start($bot, 0, 1, 0); # the main loop $main->show_all; @@ -121,26 +143,41 @@ Gtk->main; # handlers # +sub updatetime +{ + $date->set_text(cldatetime(time)); + 1; +} + sub doinsert { my ($self, $text) = @_; # we temporarily block this handler to avoid recursion $self->signal_handler_block($self->{signalid}); - my $pos = $self->insert($self->{font}, undef, undef, $text); + my $pos = $self->insert($self->{font}, $toplist->style->black, $toplist->style->white, $text); $self->signal_handler_unblock($self->{signalid}); # we already inserted the text if it was valid: no need # for the self to process this signal emission $self->signal_emit_stop_by_name('insert-text'); - $self->signal_emit('activate') if $text eq "\n"; + 1; +} + +sub botinsert +{ + my ($self, $text) = @_; + + printf "%s\n", $text; + 1; } sub bothandler { my ($self, $data) = @_; - my ($msg) = $self->get_chars =~ /([^\n]*)\r?\n$/; - $msg ||= ''; + my $msg = $self->get_text; + $msg =~ s/\r?\n$//; + $self->set_text(''); senddata($msg); }