require 'ncurses' include Ncurses ESC=27; def DrawBox(fenetre) fenetre.erase; fenetre.attron(Ncurses.COLOR_PAIR(5)); Ncurses.box(fenetre,ACS_VLINE,ACS_HLINE); fenetre.attroff(Ncurses.COLOR_PAIR(3)); end def Loading(fenetre_support,i,texte_explicatif) begin_y_fenetre_support=Ncurses.getbegy(fenetre_support); begin_x_fenetre_support=Ncurses.getbegx(fenetre_support); taille_y_fenetre_support=Ncurses.getmaxy(fenetre_support); taille_x_fenetre_support=Ncurses.getmaxx(fenetre_support); if((i*(taille_x_fenetre_support-2))/100 < 1) n=1; else n=(i*(taille_x_fenetre_support-2))/100; end fenetre_interne=WINDOW.new(taille_y_fenetre_support-2,n,begin_y_fenetre_support+1,begin_x_fenetre_support+1); fenetre_interne.bkgd(Ncurses.COLOR_PAIR(4)); DrawBox(fenetre_support); Ncurses.mvwaddstr(fenetre_support,0,(taille_x_fenetre_support-texte_explicatif.length+2)/2," " + texte_explicatif + " "); Ncurses.mvwprintw(fenetre_support,taille_y_fenetre_support-1,(taille_x_fenetre_support-(i.to_s.length+2))/2," %d%s ",i,"%"); stdscr.refresh; fenetre_support.refresh; fenetre_interne.refresh; Ncurses.delwin(fenetre_interne); end # On initialise Ncurses. stdscr = Ncurses.initscr; # ON configurer l'interface. Ncurses.start_color; Ncurses.curs_set(0); Ncurses.noecho; Ncurses.cbreak; Ncurses.keypad(stdscr, true); # On crée les couleurs. Ncurses.init_pair(1,COLOR_WHITE,COLOR_BLACK); Ncurses.init_pair(2,COLOR_WHITE,COLOR_BLUE); Ncurses.init_pair(3,COLOR_BLUE,COLOR_CYAN); Ncurses.init_pair(4,COLOR_WHITE,COLOR_RED); Ncurses.init_pair(5,COLOR_BLACK,COLOR_CYAN); # On crée la barre de progression en fonction de la taille du terminal. maxy=Ncurses.getmaxy(stdscr); maxx=Ncurses.getmaxx(stdscr); x=maxx-8; shadow_barre=WINDOW.new(3,x,(maxy-3)/2+1,(maxx-x)/2+2); barre_de_progression=WINDOW.new(3,x,(maxy-3)/2,(maxx-x)/2); stdscr.bkgd(Ncurses.COLOR_PAIR(2)); shadow_barre.bkgd(Ncurses.COLOR_PAIR(1)); barre_de_progression.bkgd(Ncurses.COLOR_PAIR(3)); Ncurses.addstr("Tapez la touche que vous voulez pour continuer.\nTapez echap pour sortir."); stdscr.refresh; # On lance l'actionement de l'interface. while stdscr.getch!=ESC i=1; while i<=100 shadow_barre.refresh(); Loading(barre_de_progression,i,"Installation paquet n°#{i}"); i=i+1; end end Ncurses.delwin(barre_de_progression); Ncurses.endwin;