Difference between revisions of "Console Framework Classes 20103 - OOP344"
(→fixed typo) |
(→The Frame work) |
||
Line 1: | Line 1: | ||
=The Frame work= | =The Frame work= | ||
+ | |||
+ | Your objective at this stage is to create a framework of classes designed to interact with the user. This user interface framework then can be used in development of any interactive application. | ||
+ | |||
+ | please note that the class definitions here are minimum requirement for the framework and you are free to add any enhancements or features you find useful. Obviously it would be wise the discuss these enhancements with your professor to make sure they are feasible. | ||
+ | |||
+ | |||
+ | Depending on the section you are in, you may have different scope in number of the classes you create. please double check your professor's notes on the project before you begin. | ||
+ | |||
+ | |||
+ | It is highly recommended to develop the classes in the order they are stated here. At each stage a tester program is provided to help you test your development. Executables of the test programs are available on matrix to show you how it is supposed to run. | ||
+ | |||
+ | |||
+ | Start by creating mock-up classes (class declaration and definition with empty methods that only compiles and don't do anything) | ||
+ | Each class MUST have its own header file to hold its declaration and "cpp" file to hold its implementation. To make sure you do not do circular includes follow these simple guidelines: | ||
+ | * Add recompilation safeguards to all your header files. | ||
+ | * Always use forward declaration if possible instead of including a class. | ||
+ | * Use includes only in files in which the actual header file code is used. avoid "just in case" includes. | ||
+ | |||
+ | |||
+ | |||
+ | |||
== General Internal Header file == | == General Internal Header file == | ||
+ | The general header file holds the common setting and definition between all classes in the frame work. | ||
<big><syntaxhighlight lang="cpp"> | <big><syntaxhighlight lang="cpp"> | ||
#ifndef ___CONFW_H__ | #ifndef ___CONFW_H__ | ||
Line 44: | Line 66: | ||
==Classes== | ==Classes== | ||
+ | These classes encapsulate all the functions written in IOL library in an Object Oriented method: | ||
+ | ===Hierarchy=== | ||
+ | <big><pre> | ||
+ | FWBorder | ||
+ | | | ||
+ | |---FWDialog | ||
+ | | | ||
+ | | | ||
+ | |---FWField | ||
+ | | | ||
+ | |-------- IOLabel | ||
+ | | | | ||
+ | | |-------FWCheck | ||
+ | | |-------FWMenuItem (Maybe?) | ||
+ | | | ||
+ | |-------- FWButton | ||
+ | | | ||
+ | | | ||
+ | |-------- FWLineEdit | ||
+ | | | | ||
+ | | |-------FWValEdit | ||
+ | | | ||
+ | |-------- FWText | ||
+ | | | ||
+ | |-------- FWCheckList (Maybe?) | ||
+ | |-------- FWMenu (Maybe?) | ||
+ | </pre></big> | ||
+ | ===FWBorder=== | ||
+ | FWBorder is the base of all IO entities in our framework. It encapsulate a window or a container in witch IO Fields are to be placed and run. | ||
+ | It encapsulates a border, cordinates and size. | ||
− | |||
====Class Definition==== | ====Class Definition==== | ||
<big><syntaxhighlight lang="cpp"> | <big><syntaxhighlight lang="cpp"> | ||
Line 89: | Line 140: | ||
</syntaxhighlight></big> | </syntaxhighlight></big> | ||
+ | =====Properties===== | ||
+ | int _row, holds the relative coordinate of top row of this border with respect to its container.<br /> | ||
+ | int _col, same as _row, but for _col. <br /> | ||
+ | int _height, height of the entity. <br /> | ||
+ | int _width, width of the entity. <br /> | ||
+ | char _border[9], characters used to draw the border: <br /> | ||
+ | : _border[0], left top | ||
+ | : _border[1], top side | ||
+ | : _border[2], right top | ||
+ | : _border[3], right side | ||
+ | : _border[4], right bottom | ||
+ | : _border[5], bottom side | ||
+ | : _border[6], bottom left | ||
+ | : _border[7], left side | ||
+ | bool _visible; Indicates if the border surrounding the entity is to be drawn or not. | ||
+ | FWBorder* _container; holds the container (another form) which has opened this one. (owner of the current FWBorder0 | ||
====Border Tester==== | ====Border Tester==== | ||
− | |||
[[OOP344 20103 BorderTester | BorderTester.cpp]] | [[OOP344 20103 BorderTester | BorderTester.cpp]] |
Revision as of 22:57, 8 November 2010
Contents
The Frame work
Your objective at this stage is to create a framework of classes designed to interact with the user. This user interface framework then can be used in development of any interactive application.
please note that the class definitions here are minimum requirement for the framework and you are free to add any enhancements or features you find useful. Obviously it would be wise the discuss these enhancements with your professor to make sure they are feasible.
Depending on the section you are in, you may have different scope in number of the classes you create. please double check your professor's notes on the project before you begin.
It is highly recommended to develop the classes in the order they are stated here. At each stage a tester program is provided to help you test your development. Executables of the test programs are available on matrix to show you how it is supposed to run.
Start by creating mock-up classes (class declaration and definition with empty methods that only compiles and don't do anything)
Each class MUST have its own header file to hold its declaration and "cpp" file to hold its implementation. To make sure you do not do circular includes follow these simple guidelines:
- Add recompilation safeguards to all your header files.
- Always use forward declaration if possible instead of including a class.
- Use includes only in files in which the actual header file code is used. avoid "just in case" includes.
General Internal Header file
The general header file holds the common setting and definition between all classes in the frame work.
#ifndef ___CONFW_H__
#define ___CONFW_H__
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <string.h>
extern "C"{
#include "iol.h"
};
#define FW_BORDER_CHARS "/-\\|/-\\|"
#define FW_MAX_NO_FIELDS 100
#define FW_BUTTON_HIT 1
#define FW_MAX_LINE_CHARS (1024u)
#define FW_REFRESH -2
#define FW_FULL_FRAME -1
#define FW_NO_REFRESH 0
enum MessageStatus{ClearMessage,SetMessage};
#ifdef NO_HELPFUNC
# undef NO_HELPFUNC
#endif
#define NO_HELPFUNC ((void(*)(MessageStatus, FWDialog&))(0))
#ifdef NO_VALDFUNC
# undef NO_VALDFUNC
#endif
#define NO_VALDFUNC ((bool(*)(const char*, FWDialog&))(0))
#endif
Classes
These classes encapsulate all the functions written in IOL library in an Object Oriented method:
Hierarchy
FWBorder | |---FWDialog | | |---FWField | |-------- IOLabel | | | |-------FWCheck | |-------FWMenuItem (Maybe?) | |-------- FWButton | | |-------- FWLineEdit | | | |-------FWValEdit | |-------- FWText | |-------- FWCheckList (Maybe?) |-------- FWMenu (Maybe?)
FWBorder
FWBorder is the base of all IO entities in our framework. It encapsulate a window or a container in witch IO Fields are to be placed and run. It encapsulates a border, cordinates and size.
Class Definition
class FWBorder {
int _row;
int _col;
int _height;
int _width;
char _border[9];
bool _visible;
FWBorder* _container;
protected:
int absRow()const;
int absCol()const;
public:
FWBorder(int Row=-1, int Col=-1, int Width=-1,int Height=-1,
bool Visible = false,
const char* Border=FW_BORDER_CHARS,
FWBorder* Container = (FWBorder*)0);
virtual void draw(int refresh = FW_NO_REFRESH)const;
virtual ~FWBorder();
void visible(bool val);
bool visible()const;
void container(FWBorder* theContainer);
FWBorder* container();
bool fullscreen()const;
void row(int val);
int row()const;
void col(int val);
int col()const;
void size(int height, int width);
int height()const;
int width()const;
};
Properties
int _row, holds the relative coordinate of top row of this border with respect to its container.
int _col, same as _row, but for _col.
int _height, height of the entity.
int _width, width of the entity.
char _border[9], characters used to draw the border:
- _border[0], left top
- _border[1], top side
- _border[2], right top
- _border[3], right side
- _border[4], right bottom
- _border[5], bottom side
- _border[6], bottom left
- _border[7], left side
bool _visible; Indicates if the border surrounding the entity is to be drawn or not. FWBorder* _container; holds the container (another form) which has opened this one. (owner of the current FWBorder0
Border Tester
FWField
class FWField: public FWBorder{
protected:
void* _data;
public:
FWField(int Row = 0, int Col = 0,
int Width = 0, int Height =0,
void* Data = (void*) 0,
bool Bordered = false,
const char* Border=FW_BORDER_CHARS);
~FWField();
virtual int edit() = 0;
virtual bool editable() const = 0;
virtual void set(const void* data) = 0;
virtual void* data();
void container(FWDialog* theOwner);
FWDialog* container();
};
FWLabel
class FWLabel: public FWField{
int _length;
void aloCpy(const char* str, int len = -1);
public:
FWLabel(const char *Str, int Row, int Col,
int Len = -1);
FWLabel(int Row, int Col, int Len);
~FWLabel();
void draw(int Refresh = FW_NO_REFRESH) const;
int edit();
bool editable()const;
void set(const void* str);
};
FWDialog
Class Definition
class FWDialog: public FWBorder{
private:
int _fnum;
int _curidx;
FWField* _fld[FW_MAX_NO_FIELDS];
bool _dyn[FW_MAX_NO_FIELDS];
bool _editable;
public:
FWDialog(FWBorder *Container = (FWBorder*)0,
int Row = -1, int Col = -1,
int Width = -1, int Height = -1,
bool Borderd = false,
const char* Border=FW_BORDER_CHARS);
virtual ~FWDialog();
void draw(int fn = FW_NO_REFRESH)const;
int edit(int fn = FW_NO_REFRESH);
int add(FWField* field, bool dynamic = true);
int add(FWField& field, bool dynamic = false);
FWDialog& operator<<(FWField* field);
FWDialog& operator<<(FWField& field);
bool editable();
int fieldNum()const;
int curIndex()const;
FWField& operator[](unsigned int index);
FWField& curField();
};
Dialog and Label Tester
FWLineEdit
Class Definition
class FWLineEdit: public FWField{
bool _dyn;
int _maxdatalen;
int* _insertmode;
int _curpos;
int _offset;
public:
FWLineEdit(char* Str, int Row, int Col, int Width,
int Maxdatalen, int* Insertmode,
bool Bordered = false,
const char* Border=FW_BORDER_CHARS);
FWLineEdit(int Row, int Col, int Width,
int Maxdatalen, int* Insertmode,
bool Bordered = false,
const char* Border=FW_BORDER_CHARS);
~FWLineEdit();
void draw(int Refresh = FW_NO_REFRESH)const;
int edit();
bool editable()const;
void set(const void* Str);
};
Dialog and Line editor Tester
FWButton
Class Definition
class FWButton: public FWField{
int _length;
public:
FWButton(const char *Str, int Row, int Col,
bool Bordered = true,
const char* Border=FW_BORDER_CHARS);
virtual ~FWButton();
void draw(int Refresh = FW_NO_REFRESH) const;
int edit();
bool editable()const;
void set(const void* str);
};
Button Tester
FWCHECK
Class Definition
class FWCheck : public FWLabel {
int _flag;
int _radio;
char _format[4];
public:
FWCheck(bool Checked,const char* Format, const char* Text, int Row, int Col, bool IsRadio = false);
void draw(int Refresh = FW_NO_REFRESH) const;
int edit();
bool editable()const;
void set(const void* flag);
void *data();
};
Button Tester
FWValEdit
Class Definition
class FWValEdit: public FWLineEdit{
void (*_help)(MessageStatus, FWDialog&);
bool (*_validate)(const char*, FWDialog&);
public:
FWValEdit(char* Str, int Row, int Col, int Width,
int Maxdatalen, int* Insertmode,
bool (*Validate)(const char* , FWDialog&) = NO_VALDFUNC,
void (*Help)(MessageStatus, FWDialog&) = NO_HELPFUNC,
bool Bordered = false,
const char* Border=FW_BORDER_CHARS);
FWValEdit(int Row, int Col, int Width,
int Maxdatalen, int* Insertmode,
bool (*Validate)(const char* , FWDialog&) = NO_VALDFUNC,
void (*Help)(MessageStatus, FWDialog&) = NO_HELPFUNC,
bool Bordered = false,
const char* Border=FW_BORDER_CHARS);
int edit();
};