home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1998 May
/
Pcwk5b98.iso
/
Borland
/
Cplus45
/
BC45
/
OWL1.PAK
/
OWL1ALL.H
< prev
next >
Wrap
C/C++ Source or Header
|
1995-08-29
|
95KB
|
2,827 lines
// ObjectWindows 1.0 portability
// (C) Copyright 1995 by Borland International
#if !defined(__OWL1ALL_H)
#define __OWL1ALL_H
#if defined(_CLASSDLL) || defined(__DLL__)
# define _RTLDLL
#endif
#if !defined(BI_OLDNAMES)
#define BI_OLDNAMES
#endif
#include <_defs.h>
#include <typeinfo.h>
#include <fstream.h>
#include <iostream.h>
#include <stdiostr.h>
#include <strstrea.h>
#include <cstring.h>
//
// RTTI and DDVTs don't get along, so we need to disable RTTI
// for OWL 1 code. This also means that we must disable exceptions.
//
#pragma option -RT-
#pragma option -x-
#include <owlrc.h>
#include <stddef.h>
#include <object.h>
#include <windows.h>
#include <dir.h>
#include <array.h>
#include <strng.h>
#include <stdlib.h>
#include <dos.h>
#if defined(BUILD_OWL)
#if !defined(WIN31) || !defined(STRICT)
#error OWL must be built with WIN31 and STRICT defined.
#endif
#if defined(__COMPACT__)
#error OWL cannot be built in Compact model.
#endif
#if defined(__TINY__)
#error OWL cannot be built in Tiny model.
#endif
#else // !defined(BUILD_OWL)
#if !defined(WIN31) || !defined(STRICT)
#error OWL applications must be built with WIN31 and STRICT defined.
#endif
#if defined(__COMPACT__)
#error OWL applications cannot be built in Compact model.
#endif
#if defined(__TINY__)
#error OWL applications cannot be built in Tiny model.
#endif
#endif // !defined(BUILD_OWL)
#if defined(_BUILDOWLDLL)
#define _EXPOWLFUNC _export
#else
#define _EXPOWLFUNC
#endif
#if defined(__cplusplus)
typedef int _FAR & Rint;
typedef int _FAR * Pint;
typedef void _FAR * Pvoid;
typedef void _FAR * _FAR & RPvoid;
typedef char _FAR * Pchar;
typedef const char _FAR * PCchar;
typedef const void _FAR * PCvoid;
// windows 3.0-compatibility types
#if defined(WIN30)
#define _WIN30_API 1
typedef long LONG_30;
typedef unsigned int WORD_30;
typedef unsigned int WORD_30;
typedef unsigned int HDC_30;
typedef unsigned int HWND_30;
typedef unsigned int HINSTANCE_30;
#endif
#endif
/* Since some resource editors strip comments from header files, some
brief comments on the contents of owlrc.h are included here:
The SD_ constants are used for the File Open, File Save, Input,
Search and Replace dialogs.
ID_FNAME, ID_FPATH, ID_FLIST and ID_DLIST are used for TFileDialog.
ID_PROMPT, ID_INPUT, ID_SEARCHTEXT, ID_CASESENSITIVE, ID_REPLACETEXT,
ID_REPLACEALL and ID_PROMPTONREPLACE are used by TSearchDialog.
ID_EDITOR is used by TEditWindow.
ID_MDICLIENT is the default id for TMDIClient and ID_FIRSTMDICHILD
is the id of the first MDI child created by a TMDIClient.
Note that the ID_ constants defined in OWL are all greater than or
equal to ID_RESERVED. Any ID_ constants you use should be less than
ID_RESERVED.
Note that the CM_ constants defined in OWL are all greater than or
equal to CM_RESERVED. Any CM_ constants you use should be less than
CM_RESERVED.
*/
/* Constants for application messages */
#define WM_FIRST 0x0000 /* 0x0000- 0x7FFF window messages */
#define WM_INTERNAL 0x7F00 /* 0x7F00- 0x7FFF reserved for internal use */
#define ID_FIRST 0x8000 /* 0x8000- 0x8FFF child id messages */
#define ID_INTERNAL 0x8F00 /* 0x8F00- 0x8FFF reserved for internal use */
#define NF_FIRST 0x9000 /* 0x9000- 0x9FFF notification messages */
#define NF_INTERNAL 0x9F00 /* 0x9F00- 0x9FFF reserved for internal use */
#define CM_FIRST 0xA000 /* 0xA000- 0xFFFF command messages */
#define CM_INTERNAL 0xFF00 /* 0xFF00- 0xFFFF reserved for internal use */
#define WM_COUNT 0x8000 /* num of window msgs */
#define ID_COUNT 0x1000 /* num of child id msgs */
#define NF_COUNT 0x1000 /* num of notification msgs */
#define CM_COUNT 0x6000 /* num of command msgs */
#define WM_RESERVED WM_INTERNAL - WM_FIRST
#define ID_RESERVED ID_INTERNAL - ID_FIRST
#define ID_FIRSTMDICHILD ID_RESERVED + 1
#define ID_MDICLIENT ID_RESERVED + 2
#define CM_RESERVED CM_INTERNAL - CM_FIRST
/* Bit masks for TWindowsObject Flags */
#define WB_ALIAS 0x01
#define WB_AUTOCREATE 0x02
#define WB_FROMRESOURCE 0x04
#define WB_KBHANDLER 0x08
#define WB_MDICHILD 0x10
#define WB_MDIFRAME 0x20
#define WB_PREDEFINEDCLASS 0x40
#define WB_TRANSFER 0x80
/* Error conditions */
#define EM_INVALIDCHILD -1
#define EM_INVALIDCLIENT -2
#define EM_INVALIDMAINWINDOW -3
#define EM_INVALIDMODULE -4
#define EM_INVALIDWINDOW -5
#define EM_OUTOFMEMORY -6
/* Transfer function flags */
#define TF_GETDATA 0
#define TF_SETDATA 1
#define TF_SIZEDATA 2
/* Checkbox flags indicating check state */
#define BF_CHECKED 0x1
#define BF_GRAYED 0x2
#define BF_UNCHECKED 0x0
// define classes types for isA()
#define moduleClass (__firstOWLClass)
#define applicationClass (moduleClass + 1)
#define scrollerClass (applicationClass + 1)
#define windowClass (scrollerClass + 1)
#define dialogClass (windowClass + 1)
#if defined(__DLL__)
# define _EXPORT _export
#else
# define _EXPORT _CLASSTYPE
#endif
const int DEFAULT_SAFETY_POOL_SIZE = 8192;
_CLASSDEF(SafetyPool)
class _EXPORT SafetyPool
{
public:
static int Allocate(size_t size
= DEFAULT_SAFETY_POOL_SIZE);
static int IsExhausted()
// returns true if safetyPool is exhausted
{ return safetyPool == NULL; };
static int Size;
static Pvoid safetyPool;
};
enum Boolean { False, True };
typedef unsigned short ushort;
typedef unsigned char uchar;
const char EOS = '\0';
typedef int ccIndex;
typedef Boolean (_FAR *ccTestFunc)( Pvoid, Pvoid );
typedef void (_FAR *ccAppFunc)( Pvoid, Pvoid );
const ccNotFound = -1;
const maxCollectionSize = (int)((65536uL - 16)/sizeof( Pvoid ));
const TCOLLECTION_CLASS_HASH_VALUE = 0;
_CLASSDEF(TNSCollection)
_CLASSDEF(TNSSortedCollection)
class _CLASSTYPE TNSCollection
{
public:
TNSCollection( ccIndex aLimit, ccIndex aDelta );
~TNSCollection();
Pvoid at( ccIndex index );
virtual ccIndex indexOf( Pvoid item );
void atFree( ccIndex index );
void atRemove( ccIndex index );
void remove( Pvoid item );
void removeAll();
void free( Pvoid item );
void freeAll();
void atInsert( ccIndex index, Pvoid item );
void atPut( ccIndex index, Pvoid item );
virtual ccIndex insert( Pvoid item );
static void error( ccIndex code, ccIndex info );
Pvoid firstThat( ccTestFunc Test, Pvoid arg );
Pvoid lastThat( ccTestFunc Test, Pvoid arg );
void forEach( ccAppFunc action, Pvoid arg );
void pack();
virtual void setLimit( ccIndex aLimit );
ccIndex getCount()
{ return count; }
protected:
TNSCollection();
Pvoid _FAR *items;
ccIndex count;
ccIndex limit;
ccIndex delta;
Boolean shouldDelete;
private:
virtual void freeItem( Pvoid item );
};
class _CLASSTYPE TNSSortedCollection: public virtual TNSCollection
{
public:
TNSSortedCollection( ccIndex aLimit, ccIndex aDelta) :
TNSCollection( aLimit, aDelta )
{ delta = aDelta; setLimit( aLimit ); }
virtual Boolean search( Pvoid key, ccIndex _FAR & index );
virtual ccIndex indexOf( Pvoid item );
virtual ccIndex insert( Pvoid item );
Boolean duplicates;
protected:
TNSSortedCollection() {};
virtual Pvoid keyOf( Pvoid item ) { return item; }
private:
virtual int compare( Pvoid key1, Pvoid key2 ) = 0;
};
#if !defined( __fLink_def )
#define __fLink_def
struct fLink
{
fLink near *f;
class _CLASSTYPE TStreamableClass near *t;
};
#endif
#define __link( s ) \
extern TStreamableClass s; \
static fLink force ## s = \
{ (fLink near *)&force ## s, (TStreamableClass near *)&s };
typedef unsigned P_id_type;
enum StreamableInit { streamableInit };
/* ------------------------------------------------------------------------*/
/* */
/* class TStreamable */
/* */
/* This is the base class for all storable objects. It provides */
/* three member functions, streamableName(), read(), and write(), which */
/* must be overridden in every derived class. */
/* */
/* ------------------------------------------------------------------------*/
_CLASSDEF(TStreamable)
_CLASSDEF(TStreamableClass)
_CLASSDEF(TStreamableTypes)
_CLASSDEF(TPWrittenObjects)
_CLASSDEF(TPWObj)
_CLASSDEF(TPReadObjects)
_CLASSDEF(pstream)
_CLASSDEF(ipstream)
_CLASSDEF(opstream)
_CLASSDEF(iopstream)
_CLASSDEF(fpbase)
_CLASSDEF(ifpstream)
_CLASSDEF(ofpstream)
_CLASSDEF(fpstream)
class _CLASSTYPE TStreamable
{
friend class _CLASSTYPE opstream;
friend class _CLASSTYPE ipstream;
private:
virtual const Pchar streamableName() const = 0;
protected:
virtual Pvoid read(Ripstream) = 0;
virtual void write(Ropstream) = 0;
};
/* ------------------------------------------------------------------------*/
/* */
/* class TStreamableClass */
/* */
/* Used internally by TStreamableTypes and pstream. */
/* */
/* ------------------------------------------------------------------------*/
typedef PTStreamable (_FAR *BUILDER)();
#define __DELTA( d ) (FP_OFF((TStreamable *)(d *)1)-1)
class _CLASSTYPE TStreamableClass
{
friend class _CLASSTYPE TStreamableTypes;
friend class _CLASSTYPE opstream;
friend class _CLASSTYPE ipstream;
friend class _CLASSTYPE TObjStrmRegRecord;
public:
TStreamableClass( PCchar n, BUILDER b, int d );
protected:
PCchar name;
BUILDER build;
int delta;
};
class _CLASSTYPE TObjStrmRegRecord
{
friend class TStreamableClass;
public:
TObjStrmRegRecord(PTStreamableClass pTStreamableClass);
int Validate();
PTStreamableClass pTStreamableClass;
private:
unsigned short SegmentLimit;
unsigned short Checksum;
Pvoid operator new (size_t s);
void operator delete(Pvoid ptr);
};
/* ------------------------------------------------------------------------*/
/* */
/* class TStreamableTypes */
/* */
/* Maintains a database of all registered types in the application. */
/* Used by opstream and ipstream to find the functions to read and */
/* write objects. */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE TStreamableTypes : private TNSSortedCollection
{
public:
TStreamableTypes() : TNSSortedCollection( 5, 5 )
{duplicates = True;}
~TStreamableTypes() { shouldDelete = False; }
#if !defined(__DLL__)
void registerType( PCTStreamableClass d)
{ insert( (void *)d ); }
#else
void registerType(TObjStrmRegRecord *pTObjStrmRegRecord);
#endif
PCTStreamableClass lookup( PCchar );
Pvoid operator new( size_t sz ) { return ::operator new( sz ); }
Pvoid operator new( size_t, Pvoid arena ) { return arena; }
protected:
virtual Boolean search( Pvoid key, ccIndex _FAR & index );
private:
virtual Pvoid keyOf(Pvoid d);
int compare( Pvoid, Pvoid );
};
/* ------------------------------------------------------------------------*/
/* */
/* class TPWObj */
/* */
/* Used internally by TPWrittenObjects. */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE TPWObj
{
friend class _CLASSTYPE TPWrittenObjects;
friend class _CLASSTYPE TPReadObjects;
friend class _CLASSTYPE ipstream;
friend class _CLASSTYPE opstream;
private:
TPWObj(PCvoid adr, P_id_type id ) : address( Pvoid(adr) ), ident( id ) {}
Pvoid address;
P_id_type ident;
};
/* ------------------------------------------------------------------------*/
/* */
/* class TPWrittenObjects */
/* */
/* Maintains a database of all objects that have been written to the */
/* current object stream. */
/* */
/* Used by opstream when it writes a pointer onto a stream to determine */
/* whether the object pointed to has already been written to the stream. */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE TPWrittenObjects : public TNSSortedCollection
{
friend class _CLASSTYPE opstream;
public:
void removeAll() { curId = 1; TNSSortedCollection::removeAll(); }
private:
TPWrittenObjects() : TNSSortedCollection( 5, 5 ), curId( 1 ) {}
~TPWrittenObjects() { shouldDelete = False; }
void registerObject( PCvoid adr );
P_id_type find( PCvoid adr );
Pvoid keyOf(Pvoid d) { return ((TPWObj *)d)->address; }
int compare( Pvoid, Pvoid );
P_id_type curId;
};
/* ------------------------------------------------------------------------*/
/* */
/* class TPReadObjects */
/* */
/* Maintains a database of all objects that have been read from the */
/* current persistent stream. */
/* */
/* Used by ipstream when it reads a pointer from a stream to determine */
/* the address of the object being referred to. */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE TPReadObjects : public TNSCollection
{
friend class _CLASSTYPE ipstream;
public:
void removeAll() { curId = 1; TNSCollection::removeAll(); }
private:
TPReadObjects() : TNSCollection( 5, 5 ), curId( 1 )
{ insert( 0 ); } // prime it, so we won't use index 0
~TPReadObjects() { shouldDelete = False; }
void registerObject( PCvoid adr );
PCvoid find( P_id_type id ) { return at( id ); }
P_id_type curId;
};
/* ------------------------------------------------------------------------*/
/* */
/* class pstream */
/* */
/* Base class for handling streamable objects. */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE pstream
{
friend class _CLASSTYPE TStreamableTypes;
public:
enum StreamableError { peNotRegistered = 0x1000, peInvalidType = 0x2000 };
enum PointerTypes { ptNull, ptIndexed, ptObject };
_Cdecl pstream( Pstreambuf sb ) { init( sb ); }
virtual _Cdecl ~pstream() {}
int _Cdecl rdstate() const { return state; }
int _Cdecl eof() const { return state & ios::eofbit; }
int _Cdecl fail() const
{ return state & (ios::failbit | ios::badbit | ios::hardfail); }
int _Cdecl bad() const { return state & (ios::badbit | ios::hardfail); }
int _Cdecl good() const { return state == 0; }
void _Cdecl clear( int i = 0 )
{ state = (i & 0xFF) | (state & ios::hardfail); }
_Cdecl operator Pvoid() const { return fail() ? 0 : (void *)this; }
int _Cdecl operator ! () const { return fail(); }
Pstreambuf _Cdecl rdbuf() const { return bp; }
static void initTypes();
static PTStreamableTypes types;
protected:
_Cdecl pstream() {}
void _Cdecl error( StreamableError );
void _Cdecl error( StreamableError, RCTStreamable );
Pstreambuf bp;
int state;
void _Cdecl init( Pstreambuf sbp) { state = 0; bp = sbp; }
void _Cdecl setstate( int b) { state |= (b&0x00FF); }
};
/* ------------------------------------------------------------------------*/
/* */
/* class ipstream */
/* */
/* Base class for reading streamable objects */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE ipstream : virtual public pstream
{
public:
_Cdecl ipstream( Pstreambuf sb) { pstream::init( sb ); }
_Cdecl ~ipstream() {}
streampos _Cdecl tellg()
{ return bp->seekoff( 0, ios::cur, ios::in ); }
Ripstream _Cdecl seekg( streampos );
Ripstream _Cdecl seekg( streamoff, ios::seek_dir );
uchar _Cdecl readByte() { return bp->sbumpc(); }
void _Cdecl readBytes( Pvoid data, size_t sz)
{ bp->sgetn( (char *)data, sz ); }
void _Cdecl freadBytes( void far *data, size_t sz );
ushort _Cdecl readWord();
Pchar _Cdecl readString();
Pchar _Cdecl readString( Pchar, unsigned );
char far *freadString();
char far *freadString( char far *buf, unsigned maxLen );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
signed char _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
unsigned char _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
signed short _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
unsigned short _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
signed int _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
unsigned int _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
signed long _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
unsigned long _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
float _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
double _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream,
long double _FAR & );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream, RTStreamable );
friend Ripstream _Cdecl _EXPOWLFUNC operator >> ( Ripstream, RPvoid);
protected:
_Cdecl ipstream() {}
PCTStreamableClass _Cdecl readPrefix();
Pvoid _Cdecl readData( PCTStreamableClass, PTStreamable );
void _Cdecl readSuffix();
PCvoid _Cdecl find( P_id_type id) { return objs.find( id ); }
void _Cdecl registerObject( PCvoid adr ) { objs.registerObject( adr ); }
private:
TPReadObjects objs;
};
/* ------------------------------------------------------------------------*/
/* */
/* class opstream */
/* */
/* Base class for writing streamable objects */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE opstream : virtual public pstream
{
public:
_Cdecl opstream( Pstreambuf sb) { pstream::init( sb ); }
_Cdecl ~opstream() {}
streampos _Cdecl tellp() { return bp->seekoff( 0, ios::cur, ios::out ); }
Ropstream _Cdecl seekp( streampos pos);
Ropstream _Cdecl seekp( streamoff off, ios::seek_dir dir);
Ropstream _Cdecl flush();
void _Cdecl writeByte( uchar ch) { bp->sputc( ch ); }
void _Cdecl writeBytes( PCvoid data, size_t sz)
{ bp->sputn( (char *)data, sz ); }
void _Cdecl fwriteBytes( const void far *data, size_t sz );
void _Cdecl writeWord( ushort sh)
{ bp->sputn( (char *)&sh, sizeof( ushort ) ); }
void _Cdecl writeString( PCchar );
void _Cdecl fwriteString( const char far * str );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, signed char );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, unsigned char );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, signed short );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, unsigned short );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, signed int );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, unsigned int );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, signed long );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, unsigned long );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, float );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, double );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, long double );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, RTStreamable );
friend Ropstream _Cdecl _EXPOWLFUNC operator << ( Ropstream, PTStreamable );
protected:
_Cdecl opstream() {}
void _Cdecl writePrefix( RCTStreamable );
void _Cdecl writeData( RTStreamable );
void _Cdecl writeSuffix( RCTStreamable )
{ writeByte( ']' ); }
P_id_type _Cdecl find( PCvoid adr ) { return objs.find( adr ); }
void _Cdecl registerObject( PCvoid adr ) { objs.registerObject( adr ); }
private:
TPWrittenObjects objs;
};
/* ------------------------------------------------------------------------*/
/* */
/* class iopstream */
/* */
/* Base class for reading and writing streamable objects */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE iopstream : public ipstream, public opstream
{
public:
_Cdecl iopstream( Pstreambuf sb) { pstream::init( sb ); }
_Cdecl ~iopstream() {}
protected:
_Cdecl iopstream() {}
};
/* ------------------------------------------------------------------------*/
/* */
/* class fpbase */
/* */
/* Base class for handling streamable objects on file streams */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE fpbase : virtual public pstream
{
public:
_Cdecl fpbase() { pstream::init( &buf ); }
_Cdecl fpbase( PCchar, int, int = filebuf::openprot );
_Cdecl fpbase( int f ) : buf (f) { pstream::init( &buf ); }
_Cdecl fpbase( int f, Pchar b, int len) : buf( f, b, len )
{ pstream::init( &buf ); }
_Cdecl ~fpbase() {}
void _Cdecl open( PCchar, int, int = filebuf::openprot );
void _Cdecl attach( int );
void _Cdecl close();
void _Cdecl setbuf( Pchar, int );
Pfilebuf _Cdecl rdbuf() { return &buf; }
private:
filebuf buf;
};
/* ------------------------------------------------------------------------*/
/* */
/* class ifpstream */
/* */
/* Base class for reading streamable objects from file streams */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE ifpstream : public fpbase, public ipstream
{
public:
_Cdecl ifpstream() {}
_Cdecl ifpstream( PCchar name,
int mode = ios::in,
int prot = filebuf::openprot
);
_Cdecl ifpstream(int f) : fpbase( f ) {}
_Cdecl ifpstream( int f, Pchar b, int len) : fpbase(f, b, len) {}
_Cdecl ~ifpstream() {}
Pfilebuf _Cdecl rdbuf() { return fpbase::rdbuf(); }
void _Cdecl open( PCchar,
int = ios::in,
int = filebuf::openprot
);
};
/* ------------------------------------------------------------------------*/
/* */
/* class ofpstream */
/* */
/* Base class for writing streamable objects to file streams */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE ofpstream : public fpbase, public opstream
{
public:
_Cdecl ofpstream() {}
_Cdecl ofpstream( PCchar,
int = ios::out,
int = filebuf::openprot
);
_Cdecl ofpstream( int f) : fpbase( f ) {}
_Cdecl ofpstream( int f, Pchar b, int len ) : fpbase(f, b, len) {}
_Cdecl ~ofpstream() {}
Pfilebuf _Cdecl rdbuf() { return fpbase::rdbuf(); }
void _Cdecl open( PCchar,
int = ios::out,
int = filebuf::openprot
);
};
/* ------------------------------------------------------------------------*/
/* */
/* class fpstream */
/* */
/* Base class for reading and writing streamable objects to */
/* bidirectional file streams */
/* */
/* ------------------------------------------------------------------------*/
class _CLASSTYPE fpstream : public fpbase, public iopstream
{
public:
_Cdecl fpstream() {}
_Cdecl fpstream( PCchar, int, int = filebuf::openprot );
_Cdecl fpstream( int f) : fpbase( f ) {}
_Cdecl fpstream( int f, Pchar b, int len ) : fpbase(f, b, len) {}
_Cdecl ~fpstream() {}
Pfilebuf _Cdecl rdbuf() { return fpbase::rdbuf(); }
void _Cdecl open( PCchar, int, int = filebuf::openprot );
};
_CLASSDEF(TWindow)
_CLASSDEF(TScroller)
#define MaxInt 32767
long LongMulDiv(long Mult1, long Mult2, long Div1);
/* TScroller object */
class _EXPORT TScroller : public Object, public TStreamable
{
public:
PTWindow Window;
long XPos, YPos; // current pos in horz/vert scroll units
long XRange, YRange; // # of scrollable horz/vert scroll units
int XUnit, YUnit; //logical device units per horz/vert scroll unit
int XLine, YLine; // # of horz/vert scroll units per line
int XPage, YPage; // # of horz/vert scroll units per page
BOOL AutoMode; // auto scrolling mode
BOOL TrackMode; // track scroll mode
BOOL AutoOrg; // indicates Scroller offsets origin
BOOL HasHScrollBar;
BOOL HasVScrollBar;
TScroller(PTWindow TheWindow, int TheXUnit, int TheYUnit,
long TheXRange, long TheYRange);
~TScroller();
void SetUnits(int TheXUnit, int TheYUnit);
virtual void SetPageSize();
virtual void SetSBarRange();
void SetRange(long TheXRange, long TheYRange);
#if defined(WIN31)
// windows 3.1 interface
virtual void BeginView(HDC PaintDC, PAINTSTRUCT _FAR & PaintInfo);
#endif
#if defined(WIN30)
// windows 3.0 interface
virtual void BeginView(HDC_30 PaintDC, PAINTSTRUCT _FAR & PaintInfo);
#endif
#if (defined(WIN30) || defined(WIN31)) && !(defined(WIN30) && defined(WIN31))
// this function is never called. it is used to pad the vtable so that
// exactly two BeginView(...) definitions are always present.
virtual void BeginView(void *, void *) { };
#endif
virtual void EndView();
virtual void VScroll(WORD ScrollEvent, int ThumbPos);
virtual void HScroll(WORD ScrollEvent, int ThumbPos);
virtual void ScrollTo(long X, long Y);
/* Scrolls to a position calculated using the passed
"Delta" values. */
void ScrollBy(long Dx, long Dy)
{ ScrollTo(XPos + Dx, YPos + Dy); }
virtual void AutoScroll();
/* Returns a BOOL value indicating whether or not the passed
area (in units) is currently visible. */
BOOL IsVisibleRect(long X, long Y, int XExt, int YExt)
{ return (X + XExt >= XPos) && (Y + YExt >= YPos) &&
(X < XPos + XPage) && (Y < YPos + YPage); }
/* Converts a horizontal range value from the scrollbar to a
horizontal scroll value. */
int XScrollValue(long ARangeUnit)
{ return (int)LongMulDiv(ARangeUnit, MaxInt, XRange); }
/* Converts a vertical range value from the scrollbar to a
vertical scroll value. */
int YScrollValue(long ARangeUnit)
{ return (int)LongMulDiv(ARangeUnit, MaxInt, YRange); }
/* Converts a horizontal scroll value from the scrollbar to
a horizontal range value. */
long XRangeValue(int AScrollUnit)
{ return LongMulDiv(AScrollUnit, XRange, MaxInt); }
/* Converts a vertical scroll value from the scrollbar to
a vertical range value. */
long YRangeValue(int AScrollUnit)
{ return LongMulDiv(AScrollUnit, YRange, MaxInt); }
// define pure virtual functions derived from Object class
virtual classType isA() const
{ return scrollerClass; }
virtual Pchar nameOf() const
{ return "TScroller"; }
virtual hashValueType hashValue() const
{ return InstanceHashValue; }
virtual int isEqual(RCObject testobj) const
{ return (this == &(RTScroller)testobj); }
virtual void printOn(Rostream outputStream) const
{ outputStream << nameOf() << "{ Window = " << Window <<" }\n";}
static PTStreamable build();
protected:
TScroller(StreamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
hashValueType InstanceHashValue;
static hashValueType ClassHashValue;
private:
virtual const Pchar streamableName() const
{ return "TScroller"; }
void __BeginView(HDC PaintDC, PAINTSTRUCT _FAR & PaintInfo);
};
inline Ripstream operator >> ( Ripstream is, RTScroller cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTScroller cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTScroller cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTScroller cl )
{ return os << (PTStreamable )cl; }
// windows 3.1 name confict with TWindowsObject::GetFirstChild()
#if defined(GetFirstChild)
#undef GetFirstChild(hwnd)
#endif
struct TMessage {
HWND Receiver;
WORD Message;
union {
WORD WParam;
struct tagWP {
BYTE Lo;
BYTE Hi;
} WP;
};
union {
DWORD LParam;
struct tagLP {
WORD Lo;
WORD Hi;
} LP;
};
long Result;
};
_CLASSDEF(TMDIClient)
_CLASSDEF(TApplication)
_CLASSDEF(TModule)
_CLASSDEF(TWindowsObject)
typedef TMessage _FAR &RTMessage;
typedef void ( _FAR *TActionFunc )(Pvoid Child, Pvoid ParamList);
typedef BOOL ( _FAR *TCondFunc )(Pvoid Child, Pvoid ParamList);
/* TWindowsObject */
class _EXPORT TWindowsObject : public Object, public TStreamable
{
public:
int Status;
HWND HWindow; // handle to associated MS-Windows window
LPSTR Title;
PTWindowsObject Parent;
TWindowsObject(PTWindowsObject AParent, PTModule AModule = NULL);
virtual ~TWindowsObject();
void SetFlags(WORD Mask, BOOL OnOff);
/* Determines whether the flag whose mask is passed has been set,
returning a BOOL indicator -- True = On, False = Off. */
BOOL IsFlagSet(WORD Mask)
{ return( (Flags & Mask) == Mask); }
PTWindowsObject FirstThat(TCondFunc Test, Pvoid PParamList);
void ForEach(TActionFunc Action, Pvoid PParamList);
PTWindowsObject FirstThat(
BOOL (TWindowsObject::* _FAR Test)(Pvoid, Pvoid), Pvoid PParamList);
void ForEach(
void (TWindowsObject::* _FAR Action)(Pvoid, Pvoid), Pvoid PParamList);
PTWindowsObject Next();
PTWindowsObject GetFirstChild()
{ return ChildList->SiblingList; }
PTWindowsObject GetLastChild()
{ return ChildList; }
PTWindowsObject Previous();
void EnableKBHandler();
void EnableAutoCreate();
void DisableAutoCreate();
void EnableTransfer();
void DisableTransfer();
PTModule GetModule()
{ return Module; }
PTApplication GetApplication()
{ return Application; }
WNDPROC GetInstance()
{ return Instance; }
virtual BOOL Register();
/* Pure virtual function, placeholder for derived classes to redefine to
create an MS_Windows element to be associated with an OWL window
object */
virtual BOOL Create() = 0;
virtual void Destroy();
virtual int GetId();
PTWindowsObject ChildWithId(int Id);
virtual PTMDIClient GetClient();
virtual void SetParent(PTWindowsObject NewParent);
void Show(int ShowCmd);
void SetCaption(LPSTR ATitle);
virtual BOOL CanClose();
void SetTransferBuffer(Pvoid ATransferBuffer)
{ TransferBuffer = ATransferBuffer; }
virtual WORD Transfer(Pvoid DataPtr, WORD TransferFlag);
virtual void TransferData(WORD Direction);
virtual void DefWndProc(RTMessage Msg);
virtual void BeforeDispatchHandler() {}
virtual void AfterDispatchHandler() {}
virtual void DispatchAMessage(WORD AMsg, RTMessage AMessage,
void (TWindowsObject::* _FAR)(RTMessage ));
void CloseWindow();
void GetChildren(Ripstream is);
void PutChildren(Ropstream os);
BOOL CreateChildren();
virtual void ShutDownWindow();
virtual void DrawItem(DRAWITEMSTRUCT far & DrawInfo);
virtual void ActivationResponse(WORD Activated, BOOL IsIconified);
// define pure virtual functions derived from Object class
virtual classType isA() const = 0;
virtual Pchar nameOf() const = 0;
virtual hashValueType hashValue() const
{ return hashValueType(HWindow); }
virtual int isEqual(RCObject testwin) const
{ return this == &(RTWindowsObject)testwin; }
virtual void printOn(Rostream outputStream) const
{ outputStream << nameOf() << "{ HWindow = "
<< (void _FAR *)HWindow << " }\n"; }
static PTStreamable build();
protected:
WNDPROC DefaultProc;
Pvoid TransferBuffer;
virtual void GetWindowClass(WNDCLASS _FAR & AWndClass);
virtual LPSTR GetClassName() = 0;
void RemoveClient()
{ RemoveChild((PTWindowsObject)GetClient()); }
void GetChildPtr(Ripstream is, RPTWindowsObject P);
void PutChildPtr(Ropstream os, PTWindowsObject P);
void GetSiblingPtr(Ripstream is, RPTWindowsObject P);
void PutSiblingPtr(Ropstream os, PTWindowsObject P);
virtual void DefCommandProc(RTMessage Msg);
virtual void DefChildProc(RTMessage Msg);
virtual void DefNotificationProc(RTMessage Msg);
virtual void SetupWindow();
virtual void WMVScroll(RTMessage Msg) =
[WM_FIRST + WM_VSCROLL];
virtual void WMHScroll(RTMessage Msg) =
[WM_FIRST + WM_HSCROLL];
void DispatchScroll(RTMessage Msg);
virtual void WMCommand(RTMessage Msg) =
[WM_FIRST + WM_COMMAND];
virtual void WMDrawItem(RTMessage Msg) =
[WM_FIRST + WM_DRAWITEM];
virtual void WMClose(RTMessage Msg) =
[WM_FIRST + WM_CLOSE];
virtual void WMDestroy(RTMessage Msg) =
[WM_FIRST + WM_DESTROY];
virtual void WMNCDestroy(RTMessage Msg) =
[WM_FIRST + WM_NCDESTROY];
virtual void WMActivate(RTMessage Msg) =
[WM_FIRST + WM_ACTIVATE];
virtual void WMQueryEndSession(RTMessage Msg) =
[WM_FIRST + WM_QUERYENDSESSION];
virtual void CMExit(RTMessage Msg) =
[CM_FIRST + CM_EXIT];
TWindowsObject(StreamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
WNDPROC Instance;
PTApplication Application;
PTModule Module;
WORD Flags;
WORD CreateOrder;
BOOL OrderIsI(Pvoid P, Pvoid I);
BOOL CreateZeroChild(Pvoid P, Pvoid I);
void AssignCreateOrder();
PTWindowsObject ChildList, SiblingList;
void AddChild(PTWindowsObject AChild);
void RemoveChild(PTWindowsObject AChild);
int IndexOf(PTWindowsObject P);
PTWindowsObject At(int APosition);
virtual const Pchar streamableName() const
{ return "TWindowsObject"; }
}; // end of WindowsObject class
/* Returns the Id of the TWindowsObject, used to identify the window
in a specified parent's ChildList. Redefined by TControl
descendants to return their identifier from their attributes
structure. 0 is returned here as the default identifier. This
precludes any window with a 0 Id from being easily found. If you
need to address individual windows, redefine GetId to return
something other than 0.*/
inline int TWindowsObject::GetId()
{ return 0; }
/* Returns a pointer to the TWindowsObject's next sibling (the next
window in its parent's child window list. If this was the last child
added to the list, returns a pointer to the first child added.*/
inline PTWindowsObject TWindowsObject::Next()
{ return SiblingList; }
typedef void ( TWindowsObject::* _FAR TActionMemFunc )(Pvoid Child, Pvoid ParamList);
typedef BOOL ( TWindowsObject::* _FAR TCondMemFunc )(Pvoid Child, Pvoid ParamList);
inline Ripstream operator >> ( Ripstream is, RTWindowsObject cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTWindowsObject cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTWindowsObject cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTWindowsObject cl )
{ return os << (PTStreamable )cl; }
const int BAD_DIALOG_STATUS = -2;
/* TDialog creation atributes */
struct _CLASSTYPE TDialogAttr { // _CLASSTYPE needed by BC++ 2.0
LPSTR Name;
DWORD Param;
};
/* TDialog */
_CLASSDEF(TDialog)
class _EXPORT TDialog : public TWindowsObject
{
public:
TDialogAttr Attr;
BOOL IsModal;
TDialog(PTWindowsObject AParent, LPSTR AName, PTModule AModule = NULL);
TDialog(PTWindowsObject AParent, int ResourceId, PTModule AModule = NULL);
virtual ~TDialog();
virtual BOOL Create();
virtual int Execute();
virtual void CloseWindow(int ARetValue);
virtual void CloseWindow();
virtual void ShutDownWindow(int ARetValue);
virtual void ShutDownWindow();
virtual void Destroy(int ARetValue);
virtual void Destroy();
void SetCaption(LPSTR ATitle);
/* Returns the handle of the dialog's control with the passed Id.*/
HWND GetItemHandle(int DlgItemID)
{ return GetDlgItem(HWindow, DlgItemID); }
/* Sends the passed message to the dialog's control which has
the Id DlgItemID. */
DWORD SendDlgItemMsg(int DlgItemID, WORD AMsg, WORD WParam, DWORD LParam)
{ return SendDlgItemMessage(HWindow, DlgItemID, AMsg, WParam, LParam); }
virtual classType isA() const
{ return dialogClass; }
virtual Pchar nameOf() const
{ return "TDialog"; }
static PTStreamable build();
protected:
virtual void GetWindowClass(WNDCLASS _FAR & AWndClass);
virtual LPSTR GetClassName();
virtual void SetupWindow();
virtual void Ok(RTMessage Msg) = [ID_FIRST + IDOK];
virtual void Cancel(RTMessage Msg) = [ID_FIRST + IDCANCEL];
virtual void WMInitDialog(RTMessage Msg) = [WM_FIRST + WM_INITDIALOG];
virtual void WMQueryEndSession(RTMessage Msg) =
[WM_FIRST + WM_QUERYENDSESSION];
virtual void WMClose(RTMessage Msg) = [WM_FIRST + WM_CLOSE];
TDialog(StreamableInit) : TWindowsObject(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TDialog"; }
};
inline Ripstream operator >> ( Ripstream is, RTDialog cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTDialog cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTDialog cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTDialog cl )
{ return os << (PTStreamable)cl; }
/* TWindow creation attributes */
struct _CLASSTYPE TWindowAttr { // _CLASSTYPE needed by BC++ 2.0
DWORD Style;
DWORD ExStyle;
int X, Y, W, H;
LPSTR Menu; // Menu name
int Id ; // Child identifier
LPSTR Param;
};
/* Window Class */
_CLASSDEF(TWindow)
class _EXPORT TWindow : public TWindowsObject
{
public:
TWindowAttr Attr;
PTScroller Scroller;
HWND FocusChildHandle;
TWindow(PTWindowsObject AParent, LPSTR ATitle, PTModule AModule = NULL);
TWindow(HWND AnHWindow, PTModule AModule = NULL);
virtual ~TWindow();
virtual BOOL AssignMenu(LPSTR MenuName);
virtual BOOL AssignMenu(int MenuId);
virtual BOOL Create();
virtual void ActivationResponse(WORD Activated, BOOL IsIconified);
virtual classType isA() const
{ return windowClass; }
virtual Pchar nameOf() const
{ return "TWindow"; }
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{ return "OWLWindow31"; }
virtual void GetWindowClass(WNDCLASS _FAR & AWndClass);
virtual void SetupWindow();
virtual void WMCreate(RTMessage Msg) = [WM_FIRST + WM_CREATE];
virtual void WMMDIActivate(RTMessage Msg) =
[WM_FIRST + WM_MDIACTIVATE];
virtual void WMHScroll(RTMessage Msg) = [WM_FIRST + WM_HSCROLL];
virtual void WMVScroll(RTMessage Msg) = [WM_FIRST + WM_VSCROLL];
virtual void WMPaint(RTMessage Msg) = [WM_FIRST + WM_PAINT];
#if defined(WIN31)
// windows 3.1 interface
virtual void Paint(HDC PaintDC, PAINTSTRUCT _FAR & PaintInfo);
#endif
#if defined(WIN30)
// windows 3.0 interface
virtual void Paint(HDC_30 PaintDC, PAINTSTRUCT _FAR & PaintInfo);
#endif
#if (defined(WIN30) || defined(WIN31)) && !(defined(WIN30) && defined(WIN31))
// this function is never called. it is used to pad the vtable so that
// exactly two Paint(...) definitions are always present.
virtual void Paint(void *, void *) { };
#endif
virtual void WMSize(RTMessage Msg) = [WM_FIRST + WM_SIZE];
virtual void WMMove(RTMessage Msg) = [WM_FIRST + WM_MOVE];
virtual void WMLButtonDown(RTMessage Msg) = [WM_FIRST + WM_LBUTTONDOWN];
TWindow(StreamableInit) : TWindowsObject(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TWindow"; }
}; // end of Window class
inline Ripstream operator >> ( Ripstream is, RTWindow cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTWindow cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTWindow cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTWindow cl )
{ return os << (PTStreamable)cl; }
#define FILESPEC MAXPATH + MAXEXT
_CLASSDEF(TFileDialog)
/* TFileDialog */
class _EXPORT TFileDialog : public TDialog
{
public:
LPSTR FilePath;
char PathName[MAXPATH];
char Extension[MAXEXT];
char FileSpec[FILESPEC];
TFileDialog(PTWindowsObject AParent, int ResourceId, LPSTR AFilePath,
PTModule AModule = NULL);
virtual BOOL CanClose();
void SelectFileName();
void UpdateFileName();
BOOL UpdateListBoxes();
static PTStreamable build();
protected:
virtual void SetupWindow();
virtual void HandleFName(RTMessage Msg)
= [ID_FIRST + ID_FNAME];
virtual void HandleFList(RTMessage Msg)
= [ID_FIRST + ID_FLIST];
virtual void HandleDList(RTMessage Msg)
= [ID_FIRST + ID_DLIST];
TFileDialog(StreamableInit) : TDialog(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TFileDialog"; }
};
inline Ripstream operator >> ( Ripstream is, RTFileDialog cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTFileDialog cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTFileDialog cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTFileDialog cl )
{ return os << (PTStreamable )cl; }
_CLASSDEF(TInputDialog)
/* TInputDialog */
class _EXPORT TInputDialog : public TDialog
{
public:
LPSTR Prompt;
LPSTR Buffer;
WORD BufferSize;
TInputDialog(PTWindowsObject AParent, LPSTR ATitle,
LPSTR APrompt, LPSTR ABuffer, WORD ABufferSize,
PTModule AModule = NULL);
void TransferData(WORD Direction);
static PTStreamable build();
protected:
virtual void SetupWindow();
TInputDialog(StreamableInit) : TDialog(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TInputDialog"; }
};
inline Ripstream operator >> ( Ripstream is, RTInputDialog cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTInputDialog cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTInputDialog cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTInputDialog cl )
{ return os << (PTStreamable )cl; }
_CLASSDEF(TBWindow)
/* TBWindow */
class _EXPORT TBWindow : public TWindow
{
public:
TBWindow(PTWindowsObject AParent, LPSTR AName,
PTModule AModule = NULL);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "TBWindow";}
virtual void GetWindowClass(WNDCLASS _FAR & AWndClass);
TBWindow(StreamableInit) : TWindow(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TBWindow"; }
};
inline Ripstream operator >> ( Ripstream is, RTBWindow cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTBWindow cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTBWindow cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTBWindow cl )
{ return os << (PTStreamable)cl; }
/* TControl */
_CLASSDEF(TControl)
class _EXPORT TControl : public TWindow {
public:
TControl(PTWindowsObject AParent, int AnId, LPSTR ATitle, int X,
int Y, int W, int H, PTModule AModule = NULL);
TControl(PTWindowsObject AParent, int ResourceId,
PTModule AModule = NULL);
virtual int GetId()
{ return Attr.Id; }
protected:
TControl(StreamableInit) : TWindow(streamableInit) {};
virtual void WMPaint(RTMessage Msg) = [WM_FIRST + WM_PAINT];
virtual void WMDrawItem(RTMessage Msg) = [WM_FIRST + WM_DRAWITEM];
virtual void ODADrawEntire(DRAWITEMSTRUCT far & DrawInfo);
virtual void ODAFocus(DRAWITEMSTRUCT far & DrawInfo);
virtual void ODASelect(DRAWITEMSTRUCT far & DrawInfo);
};
_CLASSDEF(TMDIFrame)
_CLASSDEF(TMDIClient)
/* --------------------------------------------------------
TMDIClient object
-------------------------------------------------------- */
class _EXPORT TMDIClient : public TWindow
{
public:
LPCLIENTCREATESTRUCT ClientAttr;
TMDIClient(PTMDIFrame AParent, PTModule AModule = NULL);
TMDIClient(PTMDIFrame AParent, HWND AnHWindow, PTModule AModule = NULL);
virtual ~TMDIClient();
/* Arranges iconized MDI child windows. */
virtual void ArrangeIcons()
{ SendMessage(HWindow, WM_MDIICONARRANGE, 0, 0); }
/* Cascades the MDI child windows. */
virtual void CascadeChildren()
{ SendMessage(HWindow, WM_MDICASCADE, 0, 0); }
/* Tiles the MDI child windows. */
virtual void TileChildren()
{ SendMessage(HWindow, WM_MDITILE, 0, 0); }
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{ return "MDICLIENT"; }
/* Override TWindow::WMPaint and instead call DefWndProc */
virtual void WMPaint(RTMessage Msg) = [WM_FIRST + WM_PAINT]
{ DefWndProc(Msg); }
/* Override TWindow::WMMDIActivate, instead just call DefWndProc. */
virtual void WMMDIActivate(RTMessage Msg) =
[WM_FIRST + WM_MDIACTIVATE]
{ DefWndProc(Msg); }
TMDIClient(StreamableInit) : TWindow(streamableInit) {}
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TMDIClient"; }
};
inline Ripstream operator >> ( Ripstream is, RTMDIClient cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTMDIClient cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTMDIClient cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTMDIClient cl )
{ return os << (PTStreamable)cl; }
/* --------------------------------------------------------
TMDIFrame object
-------------------------------------------------------- */
class _EXPORT TMDIFrame : public TWindow
{
public:
PTMDIClient ClientWnd; // MDI client window
int ChildMenuPos; // menu position for child menu
PTWindow ActiveChild;
TMDIFrame(LPSTR ATitle, LPSTR MenuName, PTModule AModule = NULL);
TMDIFrame(LPSTR ATitle, int MenuId, PTModule AModule = NULL);
TMDIFrame(HWND AnHWindow, HWND ClientHWnd, PTModule AModule = NULL);
virtual ~TMDIFrame();
/* Constructs the TMDIFrame's MDI client window. */
virtual void InitClientWindow()
{ ClientWnd = new TMDIClient(this); }
/* Returns a pointer to the TMDIFrame's MDI client window. */
virtual PTMDIClient GetClient()
{ return ClientWnd; }
/* Constructs a new MDI child window object. By default,
constructs an instance of TWindow as an MDI child window object.
Will almost always be redefined by descendants to construct an
instance of a user-defined TWindow descendant as an MDI child
window object. */
virtual PTWindowsObject InitChild()
{ return new TWindow(this, ""); }
virtual PTWindowsObject CreateChild();
/* Tiles the MDI child windows by calling the TileChildren method
of the MDI client window object. */
virtual void TileChildren()
{ ClientWnd->TileChildren(); }
/* Cascades the MDI child windows by calling the CascadeChildren
method of the MDI client window object. */
virtual void CascadeChildren()
{ ClientWnd->CascadeChildren(); }
/* Arranges iconized MDI child windows by calling the
ArrangeIcons method of the MDI client window object. */
virtual void ArrangeIcons()
{ ClientWnd->ArrangeIcons(); }
virtual BOOL CloseChildren();
static PTStreamable build();
protected:
virtual void GetWindowClass(WNDCLASS _FAR & AWndClass);
virtual LPSTR GetClassName()
{ return "OWLMDIFrame31"; }
virtual void SetupWindow();
/* Since an MDI child doesn't get MDIACTIVATE messages when the
frame gets (de)activated, call its ActivationResponse here. */
virtual void WMActivate(RTMessage Msg)
{ TWindow::WMActivate(Msg);
if ( ActiveChild )
ActiveChild->ActivationResponse(
Msg.WParam, IsIconic(ActiveChild->HWindow)); }
/* Responds to an incoming "CreateChild" command (with a
CM_CREATECHILD command identifier) by calling CreateChild to
construct and create a new MDI child. */
virtual void CMCreateChild(RTMessage) =
[CM_FIRST + CM_CREATECHILD]
{ CreateChild(); }
/* Responds to an incoming "Tile" command (with a CM_TILECHILDREN
command identifier) by calling TileChildren to tile the MDI
child windows. */
virtual void CMTileChildren(RTMessage) =
[CM_FIRST + CM_TILECHILDREN]
{ TileChildren(); }
/* Responds to an incoming "Cascade" command (with a
CM_CASCADECHILDREN command identifier) by calling
CascadeChildren to cascade the MDI child windows. */
virtual void CMCascadeChildren(RTMessage) =
[CM_FIRST + CM_CASCADECHILDREN]
{ CascadeChildren(); }
/* Responds to an incoming "Arrange" command (with a
CM_ARRANGEICONS command identifier) by calling ArrangeIcons
to arrange the icons of the MDI child windows. */
virtual void CMArrangeIcons(RTMessage) =
[CM_FIRST + CM_ARRANGEICONS]
{ ArrangeIcons(); }
/* Responds to an incoming "CloseAll" command (with a
CM_CLOSECHILDREN command identifier) by calling CloseChildren
to close the MDI child windows. */
virtual void CMCloseChildren(RTMessage) =
[CM_FIRST + CM_CLOSECHILDREN]
{ CloseChildren(); }
TMDIFrame(StreamableInit) : TWindow(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TMDIFrame"; }
};
inline Ripstream operator >> ( Ripstream is, RTMDIFrame cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTMDIFrame cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTMDIFrame cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTMDIFrame cl )
{ return os << (PTStreamable)cl; }
_CLASSDEF(TModule)
// Module Class
class _EXPORT TModule : public Object {
public:
// Lib and WinMain args
HINSTANCE hInstance;
LPSTR lpCmdLine;
int Status;
LPSTR Name;
#if defined(WIN31)
TModule(LPSTR AName, HINSTANCE AnInstance, LPSTR ACmdLine);
#endif
#if defined(WIN30)
TModule(LPSTR AName, HINSTANCE_30 AnInstance, LPSTR ACmdLine);
#endif
virtual ~TModule();
BOOL LowMemory();
void RestoreMemory();
virtual PTWindowsObject ValidWindow(PTWindowsObject AWindowsObject);
virtual PTWindowsObject MakeWindow(PTWindowsObject AWindowsObject);
virtual int ExecDialog(PTWindowsObject ADialog);
HWND GetClientHandle(HWND AnHWindow);
#if defined(WIN31)
// windows 3.1 interface
virtual PTWindowsObject GetParentObject(HWND ParentHandle);
#endif
#if defined(WIN30)
// windows 3.0 interface
virtual PTWindowsObject GetParentObject(HWND_30 ParentHandle);
#endif
#if (defined(WIN30) || defined(WIN31)) && !(defined(WIN30) && defined(WIN31))
// this function is never called. it is used to pad the vtable so that
// exactly two GetParentObject(...) definitions are always present.
virtual PTWindowsObject GetParentObject(void *)
{ return NULL; }
#endif
virtual void Error(int ErrorCode);
// define pure virtual functions derived from Object class
virtual classType isA() const
{ return moduleClass; }
virtual Pchar nameOf() const
{ return "TModule"; }
virtual hashValueType hashValue() const
{ return hashValueType(hInstance); }
virtual int isEqual(RCObject module) const
{ return (hInstance == ((RTModule)module).hInstance); }
virtual void printOn(Rostream outputStream) const
{ outputStream << nameOf() << "{ hInstance = "
<< (void _FAR *)hInstance << " }\n"; }
private:
PTWindowsObject __GetParentObject(HWND ParentHandle);
void __TModule(LPSTR AName, HINSTANCE AnInstance, LPSTR ACmdLine);
}; // end of Module class
extern PTModule Module;
_CLASSDEF(TBDivider)
/* --------------------------------------------------------
TBDivider object
-------------------------------------------------------- */
class _EXPORT TBDivider : public TControl
{
public:
TBDivider(PTWindowsObject AParent, int AnId, LPSTR AText,
int X, int Y, int W, int H, BOOL IsVertical,
BOOL IsBump, PTModule AModule = NULL);
TBDivider(PTWindowsObject AParent, int ResourceId,
PTModule AModule = NULL);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "BORSHADE";}
TBDivider(StreamableInit) : TControl(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TBDivider"; }
};
inline Ripstream operator >> ( Ripstream is, RTBDivider cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTBDivider cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTBDivider cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTBDivider cl )
{ return os << (PTStreamable)cl; }
_CLASSDEF(TBStaticBmp)
/* --------------------------------------------------------
TBStaticBmp object
-------------------------------------------------------- */
class _EXPORT TBStaticBmp : public TControl
{
public:
TBStaticBmp(PTWindowsObject AParent, int AnId, LPSTR AText,
int X, int Y, int W, int H, PTModule AModule = NULL);
TBStaticBmp(PTWindowsObject AParent, int ResourceId,
PTModule AModule = NULL);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "BORBTN";}
TBStaticBmp(StreamableInit) : TControl(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TBStaticBmp"; }
};
inline Ripstream operator >> ( Ripstream is, RTBStaticBmp cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTBStaticBmp cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTBStaticBmp cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTBStaticBmp cl )
{ return os << (PTStreamable)cl; }
/* --------------------------------------------------------
TButton object
-------------------------------------------------------- */
_CLASSDEF(TButton)
class _EXPORT TButton : public TControl
{
public:
BOOL IsDefPB;
TButton(PTWindowsObject AParent, int AnId, LPSTR AText,
int X, int Y, int W, int H, BOOL IsDefault,
PTModule AModule = NULL);
TButton(PTWindowsObject AParent, int ResourceId,
PTModule AModule = NULL);
static PTStreamable build();
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
protected:
BOOL IsCurrentDefPB;
virtual LPSTR GetClassName()
{ return "BUTTON"; }
virtual void SetupWindow();
virtual void WMGetDlgCode(RTMessage Msg) =
[WM_FIRST + WM_GETDLGCODE];
virtual void BMSetStyle(RTMessage Msg) = [WM_FIRST + BM_SETSTYLE];
TButton(StreamableInit) : TControl(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TButton"; }
};
inline Ripstream operator >> ( Ripstream is, RTButton cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTButton cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTButton cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTButton cl )
{ return os << (PTStreamable)cl; }
/* --------------------------------------------------------
TBButton object
-------------------------------------------------------- */
_CLASSDEF(TBButton)
class _EXPORT TBButton : public TButton
{
public:
TBButton(PTWindowsObject AParent, int AnId, LPSTR AText,
int X, int Y, int W, int H, BOOL IsDefault,
PTModule AModule = NULL);
TBButton(PTWindowsObject AParent, int ResourceId,
PTModule AModule = NULL);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "BORBTN";}
TBButton(StreamableInit) : TButton(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TBButton"; }
};
inline Ripstream operator >> ( Ripstream is, RTBButton cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTBButton cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTBButton cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTBButton cl )
{ return os << (PTStreamable)cl; }
_CLASSDEF(TGroupBox)
/* --------------------------------------------------------
TGroupBox object
-------------------------------------------------------- */
class _EXPORT TGroupBox : public TControl
{
public:
BOOL NotifyParent;
TGroupBox(PTWindowsObject AParent, int AnId, LPSTR AText, int X,
int Y, int W, int H, PTModule AModule = NULL);
TGroupBox(PTWindowsObject AParent, int ResourceId,
PTModule AModule = NULL);
virtual void SelectionChanged(int ControlId);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{ return "BUTTON"; }
TGroupBox(StreamableInit) : TControl(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TGroupBox"; }
};
inline Ripstream operator >> ( Ripstream is, RTGroupBox cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTGroupBox cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTGroupBox cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTGroupBox cl )
{ return os << (PTStreamable )cl; }
_CLASSDEF(TBGroupBox)
/* --------------------------------------------------------
TBGroupBox object
-------------------------------------------------------- */
class _EXPORT TBGroupBox : public TGroupBox
{
public:
TBGroupBox(PTWindowsObject AParent, int AnId, LPSTR AText, int X,
int Y, int W, int H, PTModule AModule = NULL);
TBGroupBox(PTWindowsObject AParent, int ResourceId,
PTModule AModule = NULL);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "BORSHADE";}
TBGroupBox(StreamableInit) : TGroupBox(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TBGroupBox"; }
};
inline Ripstream operator >> ( Ripstream is, RTBGroupBox cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTBGroupBox cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTBGroupBox cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTBGroupBox cl )
{ return os << (PTStreamable )cl; }
_CLASSDEF(TListBox)
_CLASSDEF(TListBoxData)
/* --------------------------------------------------------
TListBox object
-------------------------------------------------------- */
class _EXPORT TListBox : public TControl
{
public:
TListBox(PTWindowsObject AParent, int AnId, int X, int Y,
int W, int H, PTModule AModule = NULL);
TListBox(PTWindowsObject AParent, int ResourceId, PTModule AModule = NULL)
: TControl(AParent, ResourceId, AModule){};
int AddString(LPSTR AString);
int InsertString(LPSTR AString, int Index);
int DeleteString(int Index);
void ClearList();
virtual WORD Transfer(Pvoid DataPtr, WORD TransferFlag);
int GetCount();
int FindString(LPSTR AString, int SearchIndex);
int FindExactString(LPSTR AString, int SearchIndex);
int GetString(LPSTR AString, int Index);
int GetStringLen(int Index);
// next four functions only for single-selection
// list boxes (and combo boxes).
int GetSelString(LPSTR AString, int MaxChars);
int SetSelString(LPSTR AString, int SearchIndex);
int GetSelIndex();
int SetSelIndex(int Index);
int GetSelCount();
// next four functions only for multiple-selection list boxes.
int GetSelStrings(LPSTR *Strings, int MaxCount, int MaxChars);
int SetSelStrings(LPSTR *Prefixes, int NumSelections,
BOOL ShouldSet);
int GetSelIndexes(Pint Indexes, int MaxCount);
int SetSelIndexes(Pint Indexes, int NumSelections,
BOOL ShouldSet);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{ return "LISTBOX"; }
virtual WORD GetMsgID(WORD AMsg);
TListBox(StreamableInit) : TControl(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TListBox"; }
};
inline Ripstream operator >> ( Ripstream is, RTListBox cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTListBox cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTListBox cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTListBox cl )
{ return os << (PTStreamable )cl; }
enum msgname {MN_ADDSTRING, MN_INSERTSTRING, MN_DELETESTRING,
MN_RESETCONTENT, MN_GETCOUNT, MN_GETTEXT,
MN_GETTEXTLEN, MN_SELECTSTRING, MN_SETCURSEL,
MN_GETCURSEL, MN_FINDSTRING };
class _EXPORT TListBoxData
{
public:
PArray Strings;
PArray SelStrings;
int SelCount;
TListBoxData();
~TListBoxData();
void AddString(Pchar AString, BOOL IsSelected = FALSE);
void SelectString(LPSTR AString);
void ResetSelections();
int GetSelStringLength(int Index = 0);
void GetSelString(LPSTR Buffer, int BufferSize, int Index = 0);
};
// TScrollBar transfer structure
struct TScrollBarData {
int LowValue;
int HighValue;
int Position;
};
_CLASSDEF(TScrollBar)
/* --------------------------------------------------------
TScrollBar object
-------------------------------------------------------- */
class _EXPORT TScrollBar : public TControl
{
public:
int LineMagnitude, PageMagnitude;
TScrollBar(PTWindowsObject AParent, int AnId, int X, int Y, int W,
int H, BOOL IsHScrollBar, PTModule AModule = NULL);
TScrollBar(PTWindowsObject AParent, int ResourceId,
PTModule AModule = NULL);
void GetRange(Rint LoVal, Rint HiVal);
int GetPosition();
void SetRange(int LoVal, int HiVal);
void SetPosition(int ThumbPos);
int DeltaPos(int Delta);
virtual WORD Transfer(Pvoid DataPtr, WORD TransferFlag);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{ return "SCROLLBAR"; }
virtual void SetupWindow();
virtual void SBLineUp(RTMessage Msg) = [NF_FIRST + SB_LINEUP];
virtual void SBLineDown(RTMessage Msg) = [NF_FIRST + SB_LINEDOWN];
virtual void SBPageUp(RTMessage Msg) = [NF_FIRST + SB_PAGEUP];
virtual void SBPageDown(RTMessage Msg) = [NF_FIRST + SB_PAGEDOWN];
virtual void SBThumbPosition(RTMessage Msg) =
[NF_FIRST + SB_THUMBPOSITION];
virtual void SBThumbTrack(RTMessage Msg) = [NF_FIRST + SB_THUMBTRACK];
virtual void SBTop(RTMessage Msg) = [NF_FIRST + SB_TOP];
virtual void SBBottom(RTMessage Msg) = [NF_FIRST + SB_BOTTOM];
TScrollBar(StreamableInit) : TControl(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TScrollBar"; }
};
inline Ripstream operator >> ( Ripstream is, RTScrollBar cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTScrollBar cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTScrollBar cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTScrollBar cl )
{ return os << (PTStreamable )cl; }
/* TStatic */
_CLASSDEF(TStatic)
class _EXPORT TStatic : public TControl
{
public:
WORD TextLen;
TStatic(PTWindowsObject AParent, int AnId, LPSTR ATitle, int X,
int Y, int W, int H, WORD ATextLen, PTModule AModule = NULL);
TStatic(PTWindowsObject AParent, int ResourceId, WORD ATextLen,
PTModule AModule = NULL);
/* Returns the length of the control's text. */
int GetTextLen()
{ return GetWindowTextLength(HWindow); }
/* Fills the passed string with the text of the associated text
control. Returns the number of characters copied. */
int GetText(LPSTR ATextString, int MaxChars)
{ return GetWindowText(HWindow, ATextString, MaxChars); }
/* Sets the contents of the associated static text control to
the passed string. */
void SetText(LPSTR ATextString)
{ SetWindowText(HWindow, ATextString); }
/* Clears the text of the associated static text control. */
void Clear()
{ SetText(""); }
virtual WORD Transfer(Pvoid DataPtr, WORD TransferFlag);
virtual Pchar nameOf() const
{ return "TStatic"; }
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{ return "STATIC"; }
TStatic(StreamableInit) : TControl(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TStatic"; }
};
inline Ripstream operator >> ( Ripstream is, RTStatic cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTStatic cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTStatic cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTStatic cl )
{ return os << (PTStreamable)cl; }
_CLASSDEF(TComboBox)
_CLASSDEF(TComboBoxData)
/* --------------------------------------------------------
TComboBox object
-------------------------------------------------------- */
class _EXPORT TComboBox : public TListBox
{
public:
WORD TextLen;
TComboBox(PTWindowsObject AParent, int AnId, int X, int Y, int W,
int H, DWORD AStyle, WORD ATextLen, PTModule AModule = NULL);
TComboBox(PTWindowsObject AParent, int ResourceId, WORD ATextLen,
PTModule AModule = NULL);
/* Returns the length of the associated edit control's text. */
int GetTextLen()
{ return GetWindowTextLength(HWindow); }
/* Fills the supplied string with the text of the associated
edit control. Returns the number of characters copied. */
int GetText(LPSTR AString, int MaxChars)
{ return GetWindowText(HWindow, AString, MaxChars); }
void SetText(LPSTR AString);
/* Selects characters in the edit control of the combo box
which are between StartPos and EndPos. Returns CB_ERR if
the combo box does not have an edit control. */
int SetEditSel(int StartPos, int EndPos)
{ return (int)SendMessage(HWindow, CB_SETEDITSEL,
0, MAKELONG(StartPos, EndPos)); }
int GetEditSel(Rint StartPos, Rint EndPos);
/* Clears the text of the associated edit control. */
void Clear()
{ SetText(""); }
void ShowList();
void HideList();
virtual WORD Transfer(Pvoid DataPtr, WORD TransferFlag);
virtual Pchar nameOf() const
{ return "TComboBox"; }
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "COMBOBOX";}
virtual WORD GetMsgID(WORD AnId);
virtual void SetupWindow();
TComboBox(StreamableInit) : TListBox(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TComboBox"; }
};
inline Ripstream operator >> ( Ripstream is, RTComboBox cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTComboBox cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTComboBox cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTComboBox cl )
{ return os << (PTStreamable )cl; }
class _EXPORT TComboBoxData
{
public:
PArray Strings;
Pchar Selection;
TComboBoxData();
~TComboBoxData();
void AddString(Pchar AString, BOOL IsSelected = FALSE);
};
/* --------------------------------------------------------
TCheckBox object
-------------------------------------------------------- */
_CLASSDEF(TCheckBox)
class _EXPORT TCheckBox : public TButton
{
public:
PTGroupBox Group;
TCheckBox(PTWindowsObject AParent,int AnId, LPSTR ATitle, int X,
int Y ,int W, int H, PTGroupBox AGroup,
PTModule AModule = NULL);
TCheckBox(PTWindowsObject AParent, int ResourceId,
PTGroupBox AGroup, PTModule AModule = NULL);
void Check();
void Uncheck();
void Toggle();
WORD GetCheck();
void SetCheck(WORD CheckFlag);
virtual WORD Transfer(Pvoid DataPtr, WORD TransferFlag);
static PTStreamable build();
protected:
virtual void BNClicked(RTMessage Msg) = [NF_FIRST + BN_CLICKED];
/* Override TButton's processing so drawable check boxes and radio
buttons work properly. */
virtual void WMGetDlgCode(RTMessage Msg) =
[WM_FIRST + WM_GETDLGCODE]
{ DefWndProc(Msg); }
TCheckBox(StreamableInit) : TButton(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TCheckBox"; }
};
inline Ripstream operator >> ( Ripstream is, RTCheckBox cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTCheckBox cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTCheckBox cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTCheckBox cl )
{ return os << (PTStreamable )cl; }
_CLASSDEF(TBCheckBox)
/* --------------------------------------------------------
TBCheckBox object
-------------------------------------------------------- */
class _EXPORT TBCheckBox : public TCheckBox
{
public:
TBCheckBox(PTWindowsObject AParent,int AnId, LPSTR ATitle, int X,
int Y ,int W, int H, PTGroupBox AGroup,
PTModule AModule = NULL);
TBCheckBox(PTWindowsObject AParent, int ResourceId,
PTGroupBox AGroup, PTModule AModule = NULL);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "BORCHECK";}
TBCheckBox(StreamableInit) : TCheckBox(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TBCheckBox"; }
};
inline Ripstream operator >> ( Ripstream is, RTBCheckBox cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTBCheckBox cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTBCheckBox cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTBCheckBox cl )
{ return os << (PTStreamable)cl; }
_CLASSDEF(TRadioButton)
/* --------------------------------------------------------
TRadioButton object
-------------------------------------------------------- */
class _EXPORT TRadioButton : public TCheckBox
{
public:
TRadioButton(PTWindowsObject AParent, int AnId, LPSTR ATitle,
int X, int Y, int W, int H, PTGroupBox AGroup,
PTModule AModule = NULL);
TRadioButton(PTWindowsObject AParent, int ResourceId, PTGroupBox AGroup,
PTModule AModule = NULL)
: TCheckBox(AParent, ResourceId, AGroup, AModule){};
static PTStreamable build();
protected:
virtual void BNClicked(RTMessage Msg) = [NF_FIRST + BN_CLICKED];
TRadioButton(StreamableInit) : TCheckBox(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TRadioButton"; }
};
inline Ripstream operator >> ( Ripstream is, RTRadioButton cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTRadioButton cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTRadioButton cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTRadioButton cl )
{ return os << (PTStreamable)cl; }
_CLASSDEF(TBRadioButton)
/* --------------------------------------------------------
TBRadioButton object
-------------------------------------------------------- */
class _EXPORT TBRadioButton : public TRadioButton
{
public:
TBRadioButton(PTWindowsObject AParent, int AnId, LPSTR ATitle,
int X, int Y, int W, int H, PTGroupBox AGroup,
PTModule AModule = NULL);
TBRadioButton(PTWindowsObject AParent, int ResourceId, PTGroupBox AGroup,
PTModule AModule = NULL)
: TRadioButton(AParent, ResourceId, AGroup, AModule){};
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "BORRADIO";}
TBRadioButton(StreamableInit) : TRadioButton(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TBRadioButton"; }
};
inline Ripstream operator >> ( Ripstream is, RTBRadioButton cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTBRadioButton cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTBRadioButton cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTBRadioButton cl )
{ return os << (PTStreamable)cl; }
_CLASSDEF(TBStatic)
/* TBStatic */
class _EXPORT TBStatic : public TStatic
{
public:
TBStatic(PTWindowsObject AParent, int AnId, LPSTR ATitle, int X,
int Y, int W, int H, WORD ATextLen, PTModule AModule = NULL);
TBStatic(PTWindowsObject AParent, int ResourceId, WORD ATextLen,
PTModule AModule = NULL);
virtual Pchar nameOf() const
{ return "TBStatic"; }
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{return "BORSTATIC";}
TBStatic(StreamableInit) : TStatic(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TBStatic"; }
};
inline Ripstream operator >> ( Ripstream is, RTBStatic cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTBStatic cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTBStatic cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTBStatic cl )
{ return os << (PTStreamable)cl; }
_CLASSDEF(TEdit)
/* TEdit */
class _EXPORT TEdit : public TStatic
{
public:
TEdit(PTWindowsObject AParent, int AnId, LPSTR AText, int X,
int Y, int W, int H, WORD ATextLen, BOOL Multiline,
PTModule AModule = NULL);
TEdit(PTWindowsObject AParent, int ResourceId, WORD ATextLen,
PTModule AModule = NULL);
void Undo();
BOOL CanUndo();
void Paste();
void Copy();
void Cut();
int GetNumLines();
int GetLineLength(int LineNumber);
BOOL GetLine(LPSTR ATextString, int StrSize, int LineNumber);
void GetSubText(LPSTR ATextString, int StartPos, int EndPos);
BOOL DeleteSubText(int StartPos, int EndPos);
BOOL DeleteLine(int LineNumber);
void GetSelection(Rint StartPos, Rint EndPos);
BOOL DeleteSelection();
BOOL IsModified();
void ClearModify();
int GetLineFromPos(int CharPos);
int GetLineIndex(int LineNumber);
void Scroll(int HorizontalUnit, int VerticalUnit);
BOOL SetSelection(int StartPos, int EndPos);
void Insert(LPSTR ATextString);
int Search(int StartPos, LPSTR AText, BOOL CaseSensitive);
static PTStreamable build();
protected:
virtual LPSTR GetClassName()
{ return "EDIT"; }
virtual void SetupWindow();
virtual void CMEditCut(RTMessage Msg) = [CM_FIRST + CM_EDITCUT];
virtual void CMEditCopy(RTMessage Msg) = [CM_FIRST + CM_EDITCOPY];
virtual void CMEditPaste(RTMessage Msg) = [CM_FIRST + CM_EDITPASTE];
virtual void CMEditDelete(RTMessage Msg) =
[CM_FIRST + CM_EDITDELETE];
virtual void CMEditClear(RTMessage Msg) = [CM_FIRST + CM_EDITCLEAR];
virtual void CMEditUndo(RTMessage Msg) = [CM_FIRST + CM_EDITUNDO];
virtual void ENErrSpace(RTMessage Msg) = [NF_FIRST + EN_ERRSPACE];
TEdit(StreamableInit) : TStatic(streamableInit) {};
private:
virtual const Pchar streamableName() const
{ return "TEdit"; }
};
inline Ripstream operator >> ( Ripstream is, RTEdit cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTEdit cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTEdit cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTEdit cl )
{ return os << (PTStreamable )cl; }
struct _CLASSTYPE TSearchStruct { // _CLASSTYPE needed for BC++ 2.0
char SearchText[81];
BOOL CaseSensitive;
char ReplaceText[81];
BOOL ReplaceAll;
BOOL PromptOnReplace;
};
_CLASSDEF(TEditWindow)
_CLASSDEF(TSearchDialog)
/* TEditWindow declaration */
class _EXPORT TEditWindow : public TWindow
{
public:
PTEdit Editor;
TSearchStruct SearchStruct;
BOOL IsReplaceOp; // True if the search is a search and replace.
TEditWindow(PTWindowsObject AParent, LPSTR ATitle,
PTModule AModule = NULL);
void DoSearch();
static PTStreamable build();
protected:
virtual void WMSize(RTMessage Msg) = [WM_FIRST + WM_SIZE];
virtual void WMSetFocus(RTMessage Msg) = [WM_FIRST + WM_SETFOCUS];
virtual void CMEditFind(RTMessage Msg) = [CM_FIRST + CM_EDITFIND];
virtual void CMEditFindNext(RTMessage Msg) =
[CM_FIRST + CM_EDITFINDNEXT];
virtual void CMEditReplace(RTMessage Msg) =
[CM_FIRST + CM_EDITREPLACE];
TEditWindow(StreamableInit) : TWindow(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TEditWindow"; }
};
inline Ripstream operator >> ( Ripstream is, RTEditWindow cl )
{ return is >> (RTStreamable )cl; }
inline Ripstream operator >> ( Ripstream is, RPTEditWindow cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTEditWindow cl )
{ return os << (RTStreamable )cl; }
inline Ropstream operator << ( Ropstream os, PTEditWindow cl )
{ return os << (PTStreamable )cl; }
class _EXPORT TSearchDialog : public TDialog
{
public:
TSearchDialog(PTWindowsObject AParent, int ResourceId,
TSearchStruct _FAR &SearchStruct,
PTModule AModule = NULL);
};
/* TFileWindow */
_CLASSDEF(TFileWindow)
class _EXPORT TFileWindow : public TEditWindow
{
public:
LPSTR FileName;
BOOL IsNewFile;
TFileWindow(PTWindowsObject AParent, LPSTR ATitle, LPSTR AFileName,
PTModule AModule = NULL);
virtual ~TFileWindow();
virtual BOOL CanClear();
virtual BOOL CanClose();
void NewFile();
void Open();
BOOL Read();
void ReplaceWith(LPSTR AFileName);
BOOL Save();
BOOL SaveAs();
void SetFileName(LPSTR AFileName);
BOOL Write();
static PTStreamable build();
protected:
virtual void SetupWindow();
virtual void CMFileNew(RTMessage Msg) = [CM_FIRST + CM_FILENEW];
virtual void CMFileOpen(RTMessage Msg) = [CM_FIRST + CM_FILEOPEN];
virtual void CMFileSave(RTMessage Msg) = [CM_FIRST + CM_FILESAVE];
virtual void CMFileSaveAs(RTMessage Msg) =
[CM_FIRST + CM_FILESAVEAS];
TFileWindow(StreamableInit) : TEditWindow(streamableInit) {};
virtual void write (Ropstream os);
virtual Pvoid read (Ripstream is);
private:
virtual const Pchar streamableName() const
{ return "TFileWindow"; }
};
inline Ripstream operator >> ( Ripstream is, RTFileWindow cl )
{ return is >> (RTStreamable)cl; }
inline Ripstream operator >> ( Ripstream is, RPTFileWindow cl )
{ return is >> (RPvoid)cl; }
inline Ropstream operator << ( Ropstream os, RTFileWindow cl )
{ return os << (RTStreamable)cl; }
inline Ropstream operator << ( Ropstream os, PTFileWindow cl )
{ return os << (PTStreamable)cl; }
// Application Class
_CLASSDEF(TApplication)
class _EXPORT TApplication : public TModule {
public:
// WinMain arguments
HINSTANCE hPrevInstance;
int nCmdShow;
PTWindowsObject MainWindow;
HACCEL HAccTable;
PTWindowsObject KBHandlerWnd;
#if defined(WIN31)
// windows 3.1 interface
TApplication(LPSTR AName, HINSTANCE AnInstance,
HINSTANCE APrevInstance, LPSTR ACmdLine, int ACmdShow);
#endif
#if defined(WIN30)
// windows 3.0 interface
TApplication(LPSTR AName, HINSTANCE_30 AnInstance,
HINSTANCE_30 APrevInstance, LPSTR ACmdLine, int ACmdShow);
#endif
~TApplication();
virtual void Run();
virtual BOOL CanClose();
void SetKBHandler(PTWindowsObject AWindowsObject);
// define pure virtual functions derived from Object class
virtual classType isA() const
{ return applicationClass; }
virtual Pchar nameOf() const
{return "TApplication";}
protected:
virtual void InitApplication(); // "first"-instance initialization
virtual void InitInstance(); // each-instance initialization
virtual void InitMainWindow(); // init application main window
virtual void MessageLoop();
/* IdleAction may be redefined in derived classes to do some action when
there are no messages pending. */
virtual void IdleAction() {}
virtual BOOL ProcessAppMsg(LPMSG PMessage);
virtual BOOL ProcessDlgMsg(LPMSG PMessage);
virtual BOOL ProcessAccels(LPMSG PMessage);
virtual BOOL ProcessMDIAccels(LPMSG PMessage);
private:
void __TApplication(LPSTR AName, HINSTANCE AnInstance,
HINSTANCE APrevInstance, LPSTR ACmdLine, int ACmdShow);
}; // end of Application class
/* Performs special handling for the message last retrieved.
Translates keyboard input messages into control selections or
command messages, when appropriate. Dispatches message, if
translated. */
inline BOOL TApplication::ProcessAppMsg(LPMSG PMessage)
{ if ( KBHandlerWnd )
if ( KBHandlerWnd->IsFlagSet(WB_MDICHILD) )
return ProcessMDIAccels(PMessage) ||
ProcessDlgMsg(PMessage) ||
ProcessAccels(PMessage);
else
return ProcessDlgMsg(PMessage) ||
ProcessMDIAccels(PMessage) ||
ProcessAccels(PMessage);
else
return ProcessMDIAccels(PMessage) ||
ProcessAccels(PMessage); }
/* Attempts to translate a message into a control selection if the
currently active OWL window has requested "keyboard handling".
(Some keyboard input messages are translated into control
selection messages). Dispatches message, if translated. */
inline BOOL TApplication::ProcessDlgMsg(LPMSG PMessage)
{ if (KBHandlerWnd && KBHandlerWnd->HWindow)
return IsDialogMessage(KBHandlerWnd->HWindow, PMessage);
else
return FALSE; }
/* Attempts to translate a message into a command message if the
TApplication has loaded an accelerator table. (Keyboard input
messages for which an entry exists in the accelerator table are
translated into command messages.) Dispatches message, if
translated. (Translation of MDI accelerator messages is performed
in ProcessMDIAccels function.) */
inline BOOL TApplication::ProcessAccels(LPMSG PMessage)
{ return HAccTable &&
TranslateAccelerator(
MainWindow->HWindow, HAccTable, PMessage); }
/* Attempts to translate a message into a system command message
for MDI TApplications (whose main window is a TMDIFrame). (Some
keyboard input messages are translated into system commands for
MDI applications). Dispatches message, if translated. */
inline BOOL TApplication::ProcessMDIAccels(LPMSG PMessage)
{ return (PTWindowsObject)(MainWindow->GetClient()) &&
TranslateMDISysAccel(
((PTWindowsObject)(MainWindow->GetClient()))->HWindow, PMessage); }
/* Activates and deactivates "keyboard handling" (translation of
keyboard input into control selections) for the currently active
TWindowsObject by setting the KBHandlerWnd to the parameter passed.
This function is called internally by the OWL whenever a OWL window
is activated. If "keyboard handling" has been requested for the
TWindowsObject, the parameter passed is non-NULL, else NULL is
passed. "Keyboard handling" is requested, by default, for all
modeless dialogs and may be requested for a TWindow via a call to
its EnableKBHandler function. */
inline void TApplication::SetKBHandler(PTWindowsObject AWindowsObject)
{ KBHandlerWnd = AWindowsObject; }
extern PTApplication _EXPOWLFUNC GetApplicationObject();
const int DEFAULT_DICTIONARY_SIZE = 10;
const int DEFAULT_DICTIONARY_INCREMENT = 10;
class _CLASSTYPE TAppDictionaryEntry
{
public:
HANDLE hTask;
PTApplication pApplication;
};
class _CLASSTYPE TAppDictionary
{
int NumEntries;
TAppDictionaryEntry * Table;
public:
TAppDictionary(int InitialCount = DEFAULT_DICTIONARY_SIZE);
~TAppDictionary();
static TAppDictionaryEntry * AllocTable(int Count);
static void FreeTable(TAppDictionaryEntry *pTable);
TAppDictionaryEntry *GrowTable(int Increment =
DEFAULT_DICTIONARY_INCREMENT);
void Add(PTApplication pApplication);
void Delete();
PTApplication Lookup();
};
extern unsigned short far _EXPOWLFUNC OWLGetVersion();
const unsigned short OWLVersion = 0x0110; // Version 1.1
#endif // __OWL1ALL_H