diff --git a/sw/supervision/Paparazzi/CpGui.pm b/sw/supervision/Paparazzi/CpGui.pm index 0d33a7418a..834b80c2b6 100755 --- a/sw/supervision/Paparazzi/CpGui.pm +++ b/sw/supervision/Paparazzi/CpGui.pm @@ -33,10 +33,19 @@ sub onProgramSelected { sub onSessionSelected { my ($self, $session_name) = @_; + $self->{'session_command_'.$session_name}->configure(-state => 'disabled'); $self->start_session($session_name); $self->add_session_page($session_name); } +sub onCloseSession { + my ($self, $session_name) = @_; + print "on close session\n"; + $self->kill_session($session_name); + $self->{'session_command_'.$session_name}->configure(-state => 'active'); + $self->remove_session_page($session_name); +} + use constant LIST_WIDTH => 80; use constant LIST_HEIGHT => 20; @@ -59,8 +68,9 @@ sub build_gui { my $session_menu = $menubar->Menubutton(-text => 'Sessions')->pack(-side => 'left');; my $sessions = $self->get('-sessions'); foreach my $session_name (keys %{$sessions}) { - $session_menu->command( -label => $session_name, - -command => [\&onSessionSelected, $self, $session_name] ); + $self->{'session_command_'.$session_name} = + $session_menu->command( -label => $session_name, + -command => [\&onSessionSelected, $self, $session_name] ); } my $program_menu = $menubar->Menubutton(-text => 'Programs')->pack(-side => 'left');; my $programs = $self->get(-programs); @@ -262,12 +272,13 @@ sub add_session_page { my $sessions = $self->get('-sessions'); my $session = $sessions->{$session_name}; my $hlist = $session_page->Scrolled ('HList', + -scrollbars => 'o', -header => 1, -columns => 3, -width => LIST_WIDTH, -height => LIST_HEIGHT, -command => [\&on_session_pgm_clicked, $self, $session_name], - )->grid(-sticky => 'nsew'); + )->grid(-columnspan => 2); $hlist->header('create', 0, -text => 'name'); $hlist->header('create', 1, -text => 'status'); $hlist->header('create', 2, -text => 'args'); @@ -281,9 +292,19 @@ sub add_session_page { $hlist->itemCreate($i, 2, -text => 'blah' ); } $self->{$session_name.'hlist'} = $hlist; +# $session_page->Button( -text => "killall")->grid(-column => 0, -row => 1); + $session_page->Button( -text => "close", + -command => [\&onCloseSession, $self, $session_name])->grid(-column => 1, -row => 1); $notebook->raise($page_id); } +sub remove_session_page { + my ($self, $session_name) = @_; + my $notebook = $self->{notebook}; + my $page_id = "session_".$session_name; + $notebook->delete($page_id); +} + sub on_session_pgm_clicked { print "in CpGui::on_session_pgm_clicked @_\n"; my ($self, $session_name, $pgm_idx) = @_; diff --git a/sw/supervision/Paparazzi/CpSessionMgr.pm b/sw/supervision/Paparazzi/CpSessionMgr.pm index d38c475c23..56e998388a 100644 --- a/sw/supervision/Paparazzi/CpSessionMgr.pm +++ b/sw/supervision/Paparazzi/CpSessionMgr.pm @@ -124,6 +124,14 @@ sub start_session { } } +sub kill_session { + my ($self, $session_name) = @_; + my $session = $self->get('-sessions')->{$session_name}; + my @progs = @{$session->{pgms}}; + foreach my $pgm_idx (0..@progs-1) { + $self->toggle_program_in_session($session_name, $pgm_idx) if ($self->get_session_program_status($session_name, $pgm_idx)); + } +} sub get_session_program_status { my ($self, $session_name, $pgm_idx) = @_;