123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- #ifndef __GUI_H
- #define __GUI_H
- #include <stdlib.h>
- #include "typedefs.h"
- #include "resource.h"
- // modal result codes
- enum MODAL_RESULT {
- mrNone = 0,
- mrOk,
- mrCancel,
- mrAbort,
- mrRetry,
- mrIgnore,
- mrYes,
- mrNo,
- mrUser,
- };
- enum GEVENT_TYPE {
- evNone = 0x00,
- evMouseDown = 0x01,
- evMouseUp = 0x02,
- evMouseRepeat = 0x04,
- evMouseDrag = 0x08,
- evMouse = 0xFF,
- evKeyDown = 0x100,
- evKeyUp = 0x200,
- evKey = 0xF00,
- evCommand = 0x1000,
- evBroadcast = 0x2000,
- evMessage = 0xF000,
- };
- struct MOUSE_GEVENT
- {
- int time;
- int button;
- int x, y;
- int dx, dy;
- BOOL doubleClick;
- };
- struct KEY_GEVENT
- {
- BYTE ascii;
- BYTE make;
- union
- {
- int shiftFlags;
- struct
- {
- unsigned shift : 1;
- unsigned control : 1;
- unsigned alt : 1;
- unsigned lshift : 1;
- unsigned rshift : 1;
- unsigned lcontrol : 1;
- unsigned rcontrol : 1;
- unsigned lalt : 1;
- unsigned ralt : 1;
- };
- };
- };
- struct MESSAGE
- {
- int command;
- };
- struct GEVENT
- {
- GEVENT_TYPE type;
- int time;
- union
- {
- MOUSE_GEVENT mouse;
- KEY_GEVENT key;
- MESSAGE message;
- };
- void Clear( void ) { type = evNone; }
- };
- extern Resource gGuiRes;
- void SetBlinkOn( void );
- void SetBlinkOff( void );
- BOOL IsBlinkOn( void );
- void UpdateBlinkClock( int ticks );
- void CenterString(int x, int y, char *s, int foreColor);
- void DrawBevel( int x0, int y0, int x1, int y1, int color1, int color2 );
- void DrawRect( int x0, int y0, int x1, int y1, int color );
- int GetStringBox( char *title, char *s );
- int GetNumberBox( char *title, int n, int nDefault );
- class Widget
- {
- public:
- int left, top, width, height;
- BOOL Contains(int x, int y)
- { return x >= left && y >= top && x < left + width && y < top + height; }
- Widget *prev, *next, *owner;
- BOOL canFocus;
- BOOL canDefault;
- BOOL isContainer;
- Widget( int left, int top, int width, int height ) :
- left(left), top(top), width(width), height(height), canFocus(FALSE), canDefault(FALSE),
- isContainer(FALSE) {};
- virtual ~Widget() {};
- virtual void Paint( int x, int y, BOOL hasFocus ) = 0;
- virtual void HandleEvent( GEVENT *event ) = 0;
- virtual void EndModal( MODAL_RESULT result ) { owner->EndModal(result); }
- };
- typedef void (*CLICK_PROC)( Widget * );
- class HeadWidget : public Widget
- {
- public:
- HeadWidget() : Widget(0, 0, 0, 0) {};
- virtual void Paint( int, int, BOOL ) {};
- virtual void HandleEvent( GEVENT * ) {}
- };
- class Container : public Widget
- {
- public:
- BOOL isModal;
- MODAL_RESULT endState;
- Widget *focus;
- Widget *drag; // receives drag and up events
- HeadWidget head;
- void Insert( Widget *widget );
- void Remove( Widget *widget );
- Container( int left, int top, int width, int height);
- virtual ~Container();
- virtual BOOL SetFocus( int dir );
- virtual void Paint( int x, int y, BOOL hasFocus );
- virtual void HandleEvent( GEVENT *event );
- virtual void EndModal( MODAL_RESULT result );
- };
- class Panel : public Container
- {
- public:
- int size1, size2, size3;
- Panel( int left, int top, int width, int height, int size1, int size2, int size3) :
- Container(left, top, width, height), size1(size1), size2(size2), size3(size3)
- { canFocus = FALSE; };
- virtual void Paint( int x, int y, BOOL hasFocus );
- };
- class TitleBar : public Widget
- {
- public:
- char string[256];
- int len;
- TitleBar( int left, int top, int width, int height, char *s );
- virtual void Paint( int x, int y, BOOL hasFocus );
- virtual void HandleEvent( GEVENT * );
- };
- class Window : public Panel
- {
- Container *client;
- TitleBar *titleBar;
- public:
- void Insert( Widget *widget ) { client->Insert(widget); }
- Window( int left, int top, int width, int height, char *title);
- };
- class Button : public Widget
- {
- protected:
- MODAL_RESULT result;
- CLICK_PROC clickProc;
- BOOL pressed;
- public:
- Button( int left, int top, int width, int height, MODAL_RESULT result ) :
- Widget(left, top, width, height), result(result), pressed(FALSE), clickProc(NULL)
- {}
- Button( int left, int top, int width, int height, CLICK_PROC clickProc ) :
- Widget(left, top, width, height), result(mrNone), pressed(FALSE), clickProc(clickProc)
- {}
- virtual void Paint( int x, int y, BOOL hasFocus );
- virtual void HandleEvent( GEVENT *event );
- };
- class TextButton : public Button
- {
- char *text;
- public:
- TextButton( int left, int top, int width, int height, char *text, MODAL_RESULT result ) :
- Button(left, top, width, height, result), text(text)
- { canFocus = TRUE; }
- virtual void Paint( int x, int y, BOOL hasFocus );
- virtual void HandleEvent( GEVENT *event );
- };
- class BitButton : public Button
- {
- RESHANDLE hBitmap;
- public:
- BitButton( int left, int top, int width, int height, RESHANDLE hBitmap, CLICK_PROC clickProc) :
- Button( left, top, width, height, clickProc), hBitmap(hBitmap) {};
- virtual void Paint( int x, int y, BOOL hasFocus );
- };
- class EditText : public Widget
- {
- public:
- char string[256];
- int len;
- int pos;
- int maxlen;
- EditText( int left, int top, int width, int height, char *s );
- virtual void Paint( int x, int y, BOOL hasFocus );
- virtual void HandleEvent( GEVENT *event );
- };
- class EditNumber : public EditText
- {
- public:
- int value;
- EditNumber( int left, int top, int width, int height, int n );
- virtual void HandleEvent( GEVENT *event );
- };
- #define kSBWidth 11
- #define kSBHeight 10
- class ThumbButton : public Button
- {
- public:
- ThumbButton( int left, int top, int height ) :
- Button( left, top, kSBWidth, height, mrNone) {};
- virtual void HandleEvent( GEVENT *event );
- };
- class ScrollButton : public BitButton
- {
- public:
- ScrollButton( int left, int top, RESHANDLE hBitmap, CLICK_PROC clickProc ) :
- BitButton( left, top, kSBWidth, kSBHeight, hBitmap, clickProc) {};
- virtual void HandleEvent( GEVENT *event );
- };
- class ScrollBar : public Container
- {
- private:
- int min;
- int max;
- int size;
- ScrollButton *pbUp, *pbDown;
- Container *pcThumbBar;
- ThumbButton *pbThumb;
- public:
- int value;
- ScrollBar( int left, int top, int height, int min, int max, int value);
- virtual void Paint( int x, int y, BOOL hasFocus );
- void ScrollRelative( int offset );
- void SetValue( int value, int size = 0 );
- void SetRange( int min, int max );
- };
- MODAL_RESULT ShowModal( Container *dialog );
- #endif
|