[Roma.pm] Aiuto su Strutture FrontEnd ncurses

stefano vital stefano.vital at gmail.com
Fri May 16 06:44:22 PDT 2008


Salve a Tutti , sto cercando di risolvere un problema per un software che
sfrutta i package Curses::Widget e Curses::Widget::Menu
tale software è praticamente un frontend fatto da un menu che permette la
scelta di alcune operazioni di aggiornamento dei miei portali su vps
dalla mia macchina di sviluppo. tale frontend non deve fare altro che
lanciare degli script shell che si occupano di effetture gli aggiornamenti.
Il problema che mi sto ponendo è che io voglio generare tali menu
dinamicamente grazie ad una funzione che esegue un semplice "ls" su una dir
purtruppo questo non riesco proprio a farlo è cioè non riesco a passare al
costruttore dell pacchetto Curses::Widget::Menu un' hash nella maniera in
cui
lui si attende di riceverlo.
Vi incollo il codice:

#!/usr/bin/perl
use warnings;
use Devel::StackTrace;
use Curses;
use Curses::Widgets;  # Included to import select_colour & scankey
use Data::Dumper;
#use Curses::Widgets::TextField;
#use Curses::Widgets::ButtonSet;
#use Curses::Widgets::ProgressBar;
#use Curses::Widgets::TextMemo;
use Curses::Widgets::ListBox;
#use Curses::Widgets::Calendar;
#use Curses::Widgets::ComboBox;
use Curses::Widgets::Menu;
#use Curses::Widgets::Label;

my $menu;
my $mwh;
my $key;

$mwh = new Curses;

noecho();
halfdelay(5);
$mwh->keypad(1);
$mwh->syncok(1);
curs_set(0);
leaveok(1);

main_win();
$key = scankey($mwh);

$menu = Curses::Widgets::Menu->new({
FOREGROUND  => 'white',
  BACKGROUND  => 'yellow',
  BORDER      => 1,
  CURSORPOS => [qw(Aggiornamenti)],
  FOCUSSWITCH => "\t",
  MENUS       => {
    MENUORDER   => [qw(Aggiornamenti Log Tools Help)],
    Aggiornamenti        => {
      ITEMORDER => [qw(Internet Local Exit)],
      Internet      => \&submenu,
      Local         => \&submenu,
      Exit          => sub { exit 0 },
      },
      Log        => {
      ITEMORDER => [qw(View)],
      View      => sub { 1 },
      },
      Tools        => {
      ITEMORDER => [qw(Toolslist)],
      Toolslist      => sub { 1 },
      },
      Help        => {
      ITEMORDER => [qw(Help About)],
      Help      => sub { 1 },
      About     => sub { 1 },
      },
    },

  });
$menu->execute($mwh);
$menu->draw($mwh);
scankey($mwh);

#exit 0;

END {
  # The END block just ensures that Curses always cleans up behind
  # itself
  endwin();
}
exit 0;

##SUBROUTINE##


sub main_win {
  $mwh->erase();
  # This function selects a few common colours for the foreground colour
  $mwh->attrset(COLOR_PAIR(select_colour(qw(red black))));
  $mwh->box(ACS_VLINE, ACS_HLINE);
  $mwh->attrset(0);

  $mwh->standout();
  $mwh->addstr(0, 1, "Welcome to the System Updater of XXXXX");
  $mwh->standend();
}

sub genLstPortalMenu{
my $dirtolist="./binportal";
my @portal;
@portal = `ls ./binportal/`;
return @portal;
}

sub submenu{
   $mwh->erase();
   my $submenu;
   my @listportal = genLstPortalMenu();

$submenu = Curses::Widgets::Menu->new({
     FOREGROUND  => 'white',
     BACKGROUND  => 'yellow',
     BORDER      => 1,
     CURSORPOS => [qw(Portali)],
     FOCUSSWITCH => "\t",
     MENUS       => {
      MENUORDER   => [qw(Portali)],
       Portali        => {
        ITEMORDER => [@listportal],
        *QUI DOVREI INSERIRE UNA STRUTTURA COME QUELLE PER LE ALTRE VOCI
SOTTOSTANTI
        MA GENERATA DINAMICAMENTE E' PURTROPPO NON RIESCO A TROVARE UN MODO.
*        },
       Log        => {
        ITEMORDER => [qw(View)],
         View      => sub { 1 },
        },
       Tools        => {
        ITEMORDER => [qw(Toolslist)],
        Toolslist      => sub { 1 },
        },
       Help        => {
        ITEMORDER => [qw(Help About)],
        Help      => sub { 1 },
        About     => sub { 1 },
        },
     },
    });
$submenu->execute($mwh);
1;
}

Grazie a tutti di avermi letto
Stefano Vitali
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/pipermail/roma/attachments/20080516/0ed74704/attachment-0001.html 


More information about the Roma mailing list