// This may look like C code, but it is really -*- C++ -*- // composant graphique de type console (terminal) // R. Ansari 12/97 // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA #ifndef PICONSOLE_H #define PICONSOLE_H #include "pisysdep.h" #include PISTDWDG_H #include PICONT_H #include PIBWDG_H enum PIVAType { PIVA_Def = 0, PIVA_Bold = 1 << 0, PIVA_Ital = 1 << 1, PIVA_Reverse = 1 << 2, // Le 4eme bit (<<3) est reserve pour l'usage interne (PIVA_Select) PIVA_DefCol = 0, PIVA_Red = 1 << 4, PIVA_Blue = 2 << 4, PIVA_Green = 3 << 4, PIVA_Yellow = 4 << 4, PIVA_Magenta = 5 << 4 }; class PIConsole : public PIBaseWdg { public: PIConsole(PIContainer* par, char* nom, PIMessage msg, int nl, int nc, int sx=300, int sy=200, int px=0, int py=0, bool scb=true); ~PIConsole(); // Interface d utilisation : void AddChar(char c, unsigned char va= PIVA_Def, bool ref=true); void AddStr(const char* strg, unsigned char va= PIVA_Def, bool ref=true); void SelectFont(PIFontSize sz=PI_NormalSizeFont); void AutoSize(int nl=-1, int nc=-1); void PreferedSize(int& sx, int& sy); void AcceptCmd(bool acc=true, int nrecmx=20); void SetPrompt(const char* prompt); inline int WindNbLines() { return mWSzL; } inline int NbLines() { return mNL; } inline string GetCmdString() { return(mCmd); } // Gestion des evenements input/draw virtual void Draw(PIGraphic* g, int x0, int y0, int dx, int dy); virtual void Resize(); virtual void Keyboard(int key, PIKeyModifier kmod); virtual void But1Press(int x, int y); virtual void Ptr1Move(int x, int y); virtual void But1Release(int x, int y); virtual void But2Press(int x, int y); virtual void But3Press(int x, int y); // Gestion de copier/coller virtual void PasteSelection(unsigned int typ, void *pdata, unsigned int l); virtual void* ProvideSelection(unsigned int& typ, unsigned int& len); virtual void SelectionLost(); virtual void SelectionTransferEnd(); protected: void AssocScrollBar(PIContainer* par, char* nom, bool scb, int sx, int sy, int px, int py); void ScrollUp(); void SetDispOffset(int ldeb=-1); void ClearLine(int l); void DisplayLines(PIGraphicGen* g, int l1, int l2); void UpdCmdLine(); void ClrCmd(); void CmdAddChar(int key); void SelFgBgCol(PIColors fc=PI_Black, PIColors bc=PI_White); void SaveSelection(); // Pour copier la selection dans un buffer virtual void Process(PIMessage msg, PIMsgHandler* sender, void* data=NULL); int mNL, mNC; // Nb de lignes, colonnes total de la console int mCurL, mCurC; // Numero de ligne, colonne courante int mWSzL, mWSzC; // Taille de fenetre en lignes, colonnes int mOffL; // Offset d affichage (lignes) int mNCmdL, mLCOff; // Nb de lignes reserve a l entree des commandes int mDCOff; // Offset (en caractere) pour l affichage de la ligne de commande char* mText; // Contenu de la console unsigned char* mAtt; // Attributs du contenu (bold, ...) int* mLPo; // Adresse des lignes ds les tableaux mText, mAtt char* mStrBuf; // Buffer int mFHaut, mFLarg; // Hauteur, Largeur des caracteres PIFontSize mFTaille; // Taille des caracteres PIColors mFgC, mBgC; // Couleur Avant - arriere plan char mPrompt[32]; // Le prompt char* mCmdStr; // La commande int mCCP, mCLC; // Position du curseur, longeur de la commande string mCmd; // Le string de la derniere commande validee // Pour le rappel des commandes int NMxRecall, mNComm; // Profondeur de la pile de rappels, nb de commandes string * mRStr; // Stockage des chaines int mRCindx, mRindx; // Index pour le rappel bool mChangeFg; // Texte modifie // Gestion du buffer de copie char* mCPBuffer; unsigned int mCPBufLen; int mCPbeginC, mCPbeginL; int mCPendC, mCPendL; // S il y a un scroll-bar associe PIScrollBar* mScb; PIMessage msgScb; }; #endif