home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 5
/
FreshFish_July-August1994.bin
/
bbs
/
gnu
/
aplusplus-1.01-src.lha
/
src
/
amiga
/
aplusplus-1.01
/
testprgs
/
intuition
/
SimpleWindow_test.cxx
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-09
|
3KB
|
117 lines
/******************************************************************************
*
* $Source: apphome:APlusPlus/RCS/TESTPRGS/intuition/SimpleWindow_test.cxx,v $
*
* Demo for the A++ Library
* Copyright (C) 1994 by Armin Vogt, EMail: armin@uni-paderborn.de
*
* $Revision: 1.5 $
* $Date: 1994/05/09 21:29:34 $
* $Author: Armin_Vogt $
*
******************************************************************************/
#include <APlusPlus/exec/SignalResponder.h>
#include <APlusPlus/intuition/GWindow.h>
extern "C" {
#include <dos/dos.h>
}
// a CTRL-C signal responder from the example in the docs
class MySRSP : public SignalResponder
{
private:
BOOL running; // indicates a received user break to object users
public:
MySRSP() : SignalResponder(SIGBREAKB_CTRL_C,0)
{ running = TRUE; }
~MySRSP() {}
// overload the virtual 'signal received' action callback method.
void actionCallback()
{
cout << "**Break\n";
running = FALSE; // end WaitSignal loop
}
// object users can check with this method if a user break has occurred
BOOL hasNotOccured() { return running==TRUE; }
};
class MyWindow : public GWindow
{
public:
MyWindow(OWNER,AttrList& attrs) : GWindow(owner,attrs)
{
modifyIDCMP(CLASS_NEWSIZE|CLASS_CLOSEWINDOW|CLASS_ACTIVEWINDOW|CLASS_SIZEVERIFY);
}
void On_CLOSEWINDOW(const IntuiMessageC *msg);
void On_ACTIVEWINDOW(const IntuiMessageC *msg);
void On_SIZEVERIFY(const IntuiMessageC *msg);
void handleIntuiMsg(const IntuiMessageC* imsg);
};
void MyWindow::On_CLOSEWINDOW(const IntuiMessageC *msg)
{
cout << "CLOSEWINDOW.\n";
delete this; // it is allowed for WindowCV class to destroy itself
}
void MyWindow::On_ACTIVEWINDOW(const IntuiMessageC *msg)
{
cout << title() << " is ACTIVE.\n";
}
void MyWindow::On_SIZEVERIFY(const IntuiMessageC *msg)
{
cout << "SIZEVERIFY. \n";
}
void MyWindow::handleIntuiMsg(const IntuiMessageC* imsg)
{
switch (imsg->getClass())
{
case CLASS_CLOSEWINDOW :
On_CLOSEWINDOW(imsg); break;
case CLASS_ACTIVEWINDOW :
On_ACTIVEWINDOW(imsg); break;
case CLASS_SIZEVERIFY :
On_SIZEVERIFY(imsg); break;
}
GWindow::handleIntuiMsg(imsg);
}
void APPmain()
{
MySRSP userBreak;
MyWindow *little = new MyWindow(OWNER_NULL,
AttrList( WA_Title,"WindowC - close this to stop.",
WA_Width,300,
WA_Height,150,
WA_MinHeight,20,
WA_DragBar,TRUE,
WA_SizeGadget,TRUE,
WA_DepthGadget,TRUE,
WA_CloseGadget,TRUE,
WA_IDCMP,IDCMP_CLOSEWINDOW|IDCMP_ACTIVEWINDOW,
TAG_END) );
cout << little << "\n";
while (userBreak.hasNotOccured() && APPOK(little)) // APPOK(little) expands to (little!=NULL && little->Ok())
{
SignalResponder::WaitSignal();
}
cout << "main() end.\n";
}