Changeset 474 in Sophya for trunk


Ignore:
Timestamp:
Oct 19, 1999, 11:37:53 AM (26 years ago)
Author:
ercodmgr
Message:

PIConsole, amelioration historique + commentaires - Reza 18/10/99

Location:
trunk/SophyaPI/PI
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PI/Tests/pitcons.cc

    r402 r474  
    8989 
    9090
    91 scons->AcceptCmd(true);
     91scons->AcceptCmd(true,8);
    9292// RedirectOutStream(scons);
    9393// RedirectErrStream(scons);
     
    189189
    190190    case 10110 :
    191       if (scons) scons->AcceptCmd(true);
     191      if (scons) scons->AcceptCmd(true,5);
    192192      break;
    193193    case 10111 :
  • trunk/SophyaPI/PI/picons.cc

    r403 r474  
    77#include "picons.h"
    88
     9
     10//++
     11// Class        PIConsole
     12// Lib          PI
     13// include      picons.h
     14//
     15//      Cette classe fournit une partie des services equivalentes
     16//      a une console. Les sorties stdout et stderr peuvent etre
     17//      redirigees sur un objet *PIConsole* (Voir "PIApplication").
     18//      La classe offre aussi la possibilite de gestion d'un ScrollBar,
     19//      ainsi que la saisie et l'edition de commande, avec la gestion
     20//      d'un buffer de rappel.
     21//      de *Drawer* avec la gestion de zoom (agrandissement).
     22//      * Bouton-1 : Envoie le message "PIMsg_Active". Permet aussi
     23//      la selection d'un rectangle pour le copie/coller
     24//      * Bouton-2 : Effectue l'operation Copier/*Coller* sur la ligne
     25//      d'edition de commandes.
     26//      de commande (convention Xt)
     27//      * Bouton-3 : Affiche le menu des options d'affichage.
     28//
     29//      Gestion du clavier :
     30//      * <Alt>O : Affiche le menu des options d'affichage.
     31//      * <Alt>V : Copier/*Coller* Copie le texte depuis le buffer copier/coller
     32//      sur la ligne d'edition de commande.
     33//      * <Alt>A : Selectionne toute la fenetre pour *Copier*/Coller
     34//      * <Alt>L : Liste des commandes dans le tampon de rappel.
     35//
     36//      Commandes d'edition :
     37//      * <Ctl>A : Debut de ligne.
     38//      * <Ctl>E : Fin de ligne.
     39//      * <Ctl>K : Effacement jusqu'en fin de ligne.
     40//      * <Ctl>C : Effacement de la ligne.
     41//      * Curseur gauche, droite : deplacement curseur
     42//      * Cursur Haut,bas : rappel de commande
     43//      * Backspace, del : effacement de caracteres
     44//      * <Return> : Validation
     45//--
     46//++
     47// Links        Parents
     48// PIBaseWdg
     49//--
    950
    1051// #define DEBUG_PICONS 1
     
    4788static int Scb_Width = 14;
    4889
     90
     91//++
     92// Titre        Constructeur
     93//--
     94//++
     95// PIConsole(PIContainer* par, const char* nom, PIMessage msg, \
     96//           int nl, int nc, int sx, int sy, int px, int py, bool scb)
     97//      Creation d'un objet PIConsole, avec "nl" lignes et  "nc" colonnes.
     98//      "sx,sy" indique la taille de la fenetre. Si "scb==true", un
     99//      ScrollBar est cree associe a l'objet PIConsole.
     100//--
     101
    49102/* --Methode-- */
    50103PIConsole::PIConsole(PIContainer* par, const char* nom, PIMessage msg,
     
    119172if (opmc) { delete opmc;  opmc=NULL; }
    120173}
     174
     175
     176//++
     177// Titre        Méthodes
     178//      le type "enum PIVAType" est utilise pour definir les attributs
     179//      graphiques du texte affiche dans l'objet PIConsole. Les attributs
     180//      de texte et de couleur peuvent etre combine a l'aide de l'operateur
     181//      ou logique (|)
     182//|  PIVA_Def : Attribut par defaut
     183//|  PIVA_Bold : Caracteres gras
     184//|  PIVA_Ital : Caracteres italiques
     185//|  PIVA_Reverse : Caracteres en video inverse
     186//|  PIVA_DefCol : Couleur par defaut
     187//|  PIVA_Red : couleur rouge
     188//|  PIVA_Blue : Couleur bleue
     189//|  PIVA_Green : Couleur verte
     190//|  PIVA_Yellow : couleur jaune
     191//|  PIVA_Magenta : couleur mauve
     192//-- 
     193
     194//++
     195// void  AddChar(char c, unsigned char va= PIVA_Def, bool ref=true)
     196//      Ajout d'un caractere a la position courante. si "ref==true",
     197//      la fenetre est rafraichie. le caractere newline declenche
     198//      un retour a la ligne.
     199// void  AddStr(const char* strg, unsigned char va= PIVA_Def, bool ref=true);
     200//      Ajout d'une chaine de caracteres a partir de la position courante.
     201//      si "ref==true", la fenetre est rafraichie. le caractere newline declenche
     202//      un retour a la ligne.
     203// void  AcceptCmd(bool acc=true, int nrecmx=20)
     204//      Active/desactive l'edition de commandes. "nrecmx" indique la profondeur
     205//      du tampon de rappel de commandes. Le message associe a l'objet PIConsole
     206//      avec la qualificatif "PIMsg_OK" est envoye lors de la validation de la
     207//      commande.
     208// string  GetCmdString()
     209//      Renvoie la chaine de caractere correspondant a la ligne editee.
     210//--
    121211
    122212/* --Methode-- */
     
    316406    return;
    317407    }
     408  else if (key == 'L' || key == 'l') {  // Pour lister le buffer de rappel
     409    int nmxrec = (mNComm < NMxRecall) ? mNComm : NMxRecall;
     410    if (nmxrec < 1)  return;
     411    AddStr("PIConsole - Command history : \n",  PIVA_Def, false);
     412    int ridx = mRCindx+nmxrec;
     413    int kk;
     414    char strg[64];
     415    for(kk=0; kk<nmxrec; kk++) {
     416      sprintf(strg, "%d- ", mNComm-nmxrec+kk+1);
     417      AddStr(strg, PIVA_Def, false);
     418      AddStr(mRStr[ridx%nmxrec].c_str(), PIVA_Def, false);
     419      AddChar('\n', PIVA_Def, false);
     420      ridx++;
     421      }
     422    AddChar('\n', PIVA_Def, false);
     423    Refresh();
     424    return;
     425    }
    318426  }
    319427
     
    325433if (kmod == PIKM_Cntl) {
    326434  switch (key) {
    327     case 1 :  // <Cntl> A
     435    case 1 :  // <Cntl> A  Debut de ligne
    328436      mCCP = 0;
    329437      break;
    330     case 5 :  // <Cntl> E
     438    case 3 :  // <Cntl> C  On efface la ligne
     439      mCCP = mCLC = 0;
     440      mCmdStr[mCLC] = '\0';
     441      mRindx = mRCindx;
     442      mChangeFg = true;
     443      break;
     444    case 5 :  // <Cntl> E  Fin de ligne
    331445      mCCP = mCLC;
    332446      break;
    333     case 11 :  // <Cntl> K
     447    case 11 :  // <Cntl> K  On efface jusqu'en fin de ligne
    334448      mCLC = mCCP;
    335449      break;
     
    382496          }
    383497        int nmxrec = ((mNComm+1) < NMxRecall) ? mNComm+1 : NMxRecall;
    384         if (key == PIK_Up)  {
    385           mRindx--;
    386           if (mRindx < 0)  mRindx = 0;
    387           }
    388         else {
    389           mRindx++;
    390           if (mRindx >= nmxrec) mRindx= nmxrec-1;
    391           }
    392         mCLC = mCCP = mRStr[mRindx].length();
    393         for(k=0; k< mCLC; k++)  mCmdStr[k] =  mRStr[mRindx][k];
     498        if (key == PIK_Up) {
     499           mRindx --;
     500           if (mRindx < 0) mRindx += nmxrec;
     501           }
     502        else mRindx++;
     503        int ridx = mRindx%nmxrec;
     504        mCLC = mCCP = mRStr[ridx].length();
     505        for(k=0; k< mCLC; k++)  mCmdStr[k] =  mRStr[ridx][k];
    394506        mCmdStr[mCLC] = '\0';     
    395507        }     
Note: See TracChangeset for help on using the changeset viewer.