All pastes #129800 Raw Edit

Anonymous

public text v1 · immutable
#129800 ·published 2006-08-13 18:29 UTC
rendered paste body
/* Filename: Screen.h
 * Size: 3.20kB
 * Last Modified: Sat Jun 24 17:36:08 2006
 * Author: Ben Hearsum
 *
 * This comment was automatically generated by header.pl
 * http://www.wittydomain.com/software
 */

#ifndef SCREEN_H
#define SCREEN_H

#include <stdio.h>
#include <deque>

extern "C" {
    #include "dtio.h"
}

using namespace std;

class Screen;

/* an field of text with a certain starting position, length, and editability */
class Field {
protected:
    int row, col, len;
    bool is_editable;
    char *d;
    int c_pos;

public:
    /* constructors/destructors */
    Field(int r, int c, int width, const char *s="\0", bool edit=true);
    Field(const Field &right);
    Field();
    virtual ~Field();

    /* overloaded operators */
    virtual const Field& operator=(const Field &right);
    /* required for using STL list */
    virtual bool operator==(const Field &right);
    virtual bool operator!=(const Field &right);
    /* required for STL list, but is not meaningful */
    virtual int operator<(const Field &right) { return 0; };

    /* public functions */
    virtual void init(int r=0, int c=0, int width=0, const char *s="\0",
                      bool edit=true);
    virtual void display();
    virtual int edit(Screen *sptr=NULL);
    virtual bool editable()const { return is_editable; };
    virtual int getRow()const { return row; };
    virtual int getCol()const { return col; };
    virtual int getLen()const { return len; };
    virtual void *data()const { return d; };
    virtual Field *clone()const;
    virtual void setData(const char *s, int l);
    virtual void setRow(int r);
    virtual void setCol(int c);
    virtual void setLen(int l);

private:
    /* internal functions */
    void setcPos(int c);
};

#define MAX_FIELDS 50

/* a container for a certain amount of Fields */
class Screen {
    Field *fields[MAX_FIELDS];
    int f_pos;
    int size;
    
public:
    /* constructors/destructors */
    Screen(int row, int col, int len, const char *s=NULL, bool editable=true);
    Screen(const Screen &right):f_pos(0),size(0) { *this = right; };
    Screen():f_pos(0),size(0) {};
    virtual ~Screen();

    /* overloaded operators */
    Screen& operator=(const Screen &right);
    Screen& operator+=(const Field &right);

    /* public functions */
    int add(int row, int col, int len, const char *s=NULL, bool editable=true);
    int add(const Field &f);
    void display(bool clear=false);
    int edit(bool clear=false) { return edit(NULL, clear); };
    int edit(int *pfield=NULL, bool clear=false);
    Field *getField(int n);
    int remove(int n);
};

class Label: public Field {
    char *str;
    bool dynamic;

public:
    Label(int r, int c, int width, const char *s=NULL);
    virtual ~Label();

    void *data()const { return str; }
    void display();
    Label *clone()const;

private:
    void init(int r, int c, int width, const char *s=NULL);
};

class Response: public Field {
    int d;
    char *valid_chars;
    void (*response_f)(Screen *);
public:
    Response(int r, int c, const char *s, int ch=' ',
             void (*fptr)(Screen*)=NULL);
    ~Response();

    void init(int r, int c, const char *s, int ch=' ',
              void (*fptr)(Screen *)=NULL);
    int edit(Screen *sptr=NULL);
    int data() { return d; }
    void setData(int c) { d = c; }
    void display();
    Response* clone()const;

};

class VField: public Field {
    int (*validate_f)(char [], Screen *);

public:
    VField(int r, int c, int w, const char *s="\0",
           int (*fptr)(char [], Screen *)=NULL);
    ~VField();

    int edit(Screen *sptr=NULL);
    void setData(const char *s, int l);
    VField* clone()const;
private:
    void init(int r, int c, int w, const char *s="\0",
              int (*fptr)(char [], Screen *)=NULL);
};

#endif