#ifndef GUICLSS #define GUICLSS // ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» // º NPSGUI.LIB Ç¿ // º GUICLS.CPP º³ // º Copyright 1993, Nearly Perfect Software. º³ // º All rights reserved º³ // º º³ // º This file is included in NPSGUI as a set of º³ // º middle-level classes for use by the library º³ // º user. It is intended as a programming example º³ // º and is included as source code. It may be º³ // º modified as needed and used in any application º³ // º that uses NPSGUI, as long as this comment º³ // º block is included. º³ // º º³ // º þ Written by Brad Broerman º³ // º þ Last Modified: 02/14/95 º³ // º þ Revision 2.5 º³ // ÈÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ³ // ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ class radiopanel : public panel { // This class is a panel with multiple rbuttons on it, along with // text. it allows the selection of one parameter at a time, sort of line // the buttons on a radio. // // Please be aware of a bug I have discovered... When you select a button // with the mouse, either using selectbtn(btnhit(), or using checkforevent(), // the mouse driver will 'stick', and it will report that the buttons are down, // when actually, they may not be. // // It looks somewhat like this: -------------------- // | Header text | <-- The header, centered. // | | // This button is selected--> | 0 Item 1 | <-- The buttons text. // But all the others aren't. | O Item 2 | // | O Item 3 | // | O Item 4 | // -------------------- // // Parameters: X,Y,W,H : Same as in the Panel class. // Hdr : The name of the radiopanel. // list : A string containing a comma seperated list of elements, as above. // k : The 'keep track of background' flag. // c : A color parameter. // no : A number corresponding to a button, starting with 1. // // Preconditions: X,Y,W,H: Same as Panel. // Hdr : Must contain a valid string. // List : Mist consist of at least 1 item. and no more than 20. // k : Same as Panel. // c : Must be a valid color number (0-16) // no : Must be 0 < no <= Number of items. // // rbutton *Buttons[20]; // Pointers to the buttons. char *Header; // The header. char *Items[20]; // The list of text items for the buttons. int NumItems; // The number of items. int TextClr; // The text color. int BtnSel; // The current selected button. public: radiopanel(int x, int y, int w, int h, int d, char *Hdr, char *list, int k); ~radiopanel(); void setbtnclr(int c); // Changes the radio buttons color. void settextclr(int c); // Changes the text color. void show(); // Displays the radiopanel. void hide(); // Hides teh radiopanel. int btnhit(); // Returns the number corresponding to the button the cursor is on. void selectbtn(int no); // Selects a button. int btnselected(); // Returns the number of the button selected. void btnclear(); // Clears all buttons. int checkforevent(); // Waits for a button to be selected, or escape key. // Uses mouse, and up/down arrow keys. // Returns TRUE if button selected, false if none. }; struct attr { int Fgd : 4; int Bkg : 4; }; class textplane : public gbase { // This class allows the input and output of text to graphics text windows // in a way that is similar to using cin and cout in the text modes. It also // emulates ANSI and VT100 displays (decodes the escape sequences). // // Parameters: X,Y,W,H : Same as the other classes. // tc : The initial color of the text. // bc : The default, and initial background color. // // Preconditions: X,Y,W,H: Same as in Panel. // tc : Can be any valid color (0 - 16) // bc : Can be any color from BLACK (0) to LIGHTGRAY(7); // // On Input, the insertioin routines for long, and double are undefined // if an overflow occurs, or if invalid inputs are entered. Also, NO overflow // checking is used for string input. YOU MUST ENSURE THAT AN OVERFLOW DOES NOT OCCUR. // // char *Buffer; // Graphics buffer used in hiding and restoring display. int CsrX,CsrY,// The X and Y coordinates of the next character. OldX,OldY,// The old position of the cursor. DefBkgClr,// The default background color. BkgClr, // The current background color. TxtClr, // The current text color. Bold, // The Bold or normal flag. Echo, // echo the entered characrter or not. ShowCsr, // Show the cursor or not. CsrShwn, // Tells if the cursor is shown or not. SavX,SavY,// The stored coordinates of the cursor (for ANSI & VT100). TermEm, // The terminal emulation used. isShown; // Wether or not the plane is being shown. char STR[20]; // Collection buffer for escape sequences, and printable strings. char *TxtBuf; // Storage for the text buffer. attr *AtrBuf; // Storage for the text attribute buffer. unsigned SBBSize, // The size of the scrollback buffer. CurScrn; // The offset into the buffer that the current screen starts. int SIndex, // Index for STR. REscSeq; // Flag that indicates an escape sequence is being compiled. void ANSI_Decode(char c); // Decodes ANSI escape sequences. void VT100_Decode(char c); // Decodes VT100 escape sequences. void Print_Char(char c); // Displays the character on the screen. void move_csr(void); // moves the cursor to the new x & y. public: textplane (int x, int y, int w, int h, int tc = 15, int bc=0); ~textplane(); void show(); // Display a textplane. void hide(); // Prepares a textplane to be hidden. void drawscrn(char far *B,attr far *A,int L); // Re-draws the screen, starting at the top, and going down L lines. int setbuffsize(unsigned); // Resets the size of the scrollback buffer. void settxtclr(int c); // Set the text color. void setbkgclr(int c); // Set the background color. void gotoxy(int x, int y); // Move the cursor to x,y (in pixels). void settermem(int t); // Sets the terminal emulation. (ANSI, VT100, ASCII) void setcsr(int F); // Turns the cursor on & off (1,0). void clearwin(void); // Clears the textplane to the background color. char peek(void); // Check the next keyboard character without extracting it. char *gettxt(void); // returns a copy of the screen text buffer. char *getatr(void); // returns a copy of the screen attribute buffer. unsigned getscrnptr(void); // returns the current screen offset in the text buffer. unsigned getbufsize(void); // returns the size of the screen text buffers. textplane &operator << (char &c); // The formatted inserters. textplane &operator << (char *c); textplane &operator << (int &I); textplane &operator << (long &L); textplane &operator << (double &D); textplane &operator >> (char &c); // The formatted extractors. textplane &operator >> (char *c); textplane &operator >> (int &I); textplane &operator >> (long &L); textplane &operator >> (double &D); textplane &setecho() // Turns on character echoing. { Echo = 1; return *this; } textplane &clrecho() // Turns off character echoing. { Echo = 0; return *this; } }; class selectbar : public instrn { // The selection bar class is an instrn class with a button that pulls down a // list of options that can be selected with the mouse or the keyboard. To use with // a keyboard, the down arrow pulls down the list, and then the item can be highlighted // with the arrow keys. To select, press [Enter] and to quit, press [Esc]. The button // is placed on the right of the instrn, and the X,Y,Width, and Height of the components // must be chosen so that the object is within the screen area. The selection panel extends // down textheight+2 pixels for every option, it begins 2 pixels below the instrn, and has a // depth of 1. The total width is: w+bw+2*d+4, and the total height is: h+2*d+3+(textheight()+2)*# // options. The List is a string containing a comma seperated list, the same as the menubar. // The other options and parameters are the same as previous classes. panel *PlDn; // The pulled-down panel. button *DnBtn; // The button. int BW, // The button's width. pulled_down, // Non-Zero if the panel is pulled-down. itm_selected, // Contains the number of the last item selected. num_itms, // Contains the number of items in the list. Hi_Clr; // The highlight color. char *List; // The string containing the comma seperated list of options. public: selectbar(int x, int y, int w, char *Lst, int bw=8, int h=12, int c=7, int bc=7, int k=0); ~selectbar(void); void show(void); // Shows a selection bar. void hide(void); // Removes a selection bar. void pulldown(void); // Pulls down the options panel. void pushup(void); // Pushes the options panel back up. void push(void); // Pushes the button. void rels(void); // Releases the button. void selitem (int); // Selects an item, (highlights it). 1st item is #1. void clritem (void); // Clears any selected item. char *getinput(); // The full get-input routine, with the selection panel implemented. char *getitem(void); // Gets the string form of the option selected. char *inptstrn(); // Just gets the typed-in string from the instrn. int itmselected(void); // Gets the number of the option selected. int itmhit(void); // Returns the number of the option the mouse cursor is over. int btnhit(void); // Returns TRUE (non-zero) if the mouse cursor is on the button. int pnlhit(void); // Returns TRUE if the mouse cursor is on the options panel. void resize(int w, int h); // Changes the width and height of the selection bar. void moveto (int x, int y); // Moves a selection bar to the new coordinates. void setbtnclr(int c=7); // Changes the button color. void sethiclr(int c=12 ); // Changes the highlight color. void setbkgclr(int c=7); // Changes the background (panel & instrn) color. }; class wndow : public bevel { // This is a window, similar to other GUIs. It has a close button in the // upper left corner, a caption bar at the top right, and a border. This can // be used instead of a panel or bevel for child windows in an application. // The close button is ALWAYS the same size (11x11) and the caption bar is // always 11 high. Also, the color default to light gray, but can be changed. // // // Parameters: x,y,w,h,d,bw,k : These are the same as the bevel class and // should be self-explanitory. // c : This is a color value (0-15). Use the defined // constants from graphics.h // caption : This is the caption to be displayed in the // caption bar. // // // // Preconditions: x,y,w,h,d,bw,k : Same as bevel, except that the width // should be large enough to handle the // close button (11 pixels) plus the text // of the caption. If not, results could be // very messy. Also, d should NOT be larger // than 2. Again, if not, results could be // messy. // c : Should be a valid color (0 to 15). // caption : Should point to a valid string. DO NOT // make it NULL. If you do not want a caption // make caption equil to "" (a null string). // // protected: char *Caption; // Holds the caption text. button *cl_button; // The close button. panel *cap_panl; // The caption panel int Client_Clr, // The color of the client area. (defaults to light gray) Txt_Clr; // The color of the caption text. (defaults to white) public: wndow(int x,int y,int w,int h,int d,int bw,char *caption,int k=1);// Creates a window. ~wndow(); // Deletes a window. void show(void); // Shows a window. void moveto(int x, int y); // Moves a window to a new location. void resize(int w, int h); // Changes the width & height of a window. void setbkgclr(int c); // Changes the border color of the window. void setcliclr(int c); // Clanges the color of the client area. void setcapclr(int c); // Changes the color of the caption bar. void settxtclr(int c); // Changes the color of the caption text. int clbtnhit(void); // Returns true if the mouse cursor is over the close button. void clbtnprs(void); // Presses the close button. void clbtnrls(void); // Releases the close button. int clbtnpressed(void); // Returns true if the close button is pressed. int capbarhit(void); // Returns true if the mouse cursor is over the caption bar. }; #endif