home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- *
- * $Source: apphome:APlusPlus/RCS/TESTPRGS/graphics/Canvas_test.cxx,v $
- *
- * Demo for the A++ Library
- * Copyright (C) 1994 by Armin Vogt, EMail: armin@uni-paderborn.de
- *
- * $Revision: 1.4 $
- * $Date: 1994/05/09 21:26:39 $
- * $Author: Armin_Vogt $
- *
- ******************************************************************************/
-
-
- volatile static char rcs_id[] = "$Id: Canvas_test.cxx,v 1.4 1994/05/09 21:26:39 Armin_Vogt Exp Armin_Vogt $";
-
-
- //** This demo can use ITransponders as alternative to the Constraints.
- //** To compile with ITransponders define USE_ITP.
-
-
-
- extern "C" {
- #include <dos/dos.h>
- }
-
- #include <APlusPlus/exec/SignalResponder.h>
- #include <APlusPlus/intuition/GWindow.h>
- #include <APlusPlus/intuition/GT_Gadgets/GT_Scroller.h>
- #include <APlusPlus/intuition/BoopsiGadget.h>
- #include <APlusPlus/graphics/Canvas.h>
-
-
- //------- use ITransponders instead of Constraints --------
- //#define USE_ITP
-
-
- BOOL running = TRUE;
- BOOL close2 = FALSE;
-
- class MySRSP : public SignalResponder
- {
- public:
- MySRSP(BYTE signal) : SignalResponder(signal,0) {}
- ~MySRSP() {}
- // overload the virtual 'signal received' action callback method.
- void actionCallback()
- {
- cout << "**Break\n";
- running = FALSE;
- }
- };
- class MyCanvas : public Canvas
- {
- public:
- MyCanvas(GOB_OWNER,AttrList& attrs) : Canvas(gob_owner,attrs) { }
- ~MyCanvas() {}
-
- void drawSelf()
- {
- setAPen(1);
- move(10,10);
- text((UBYTE*)"Hey, this is a canvas demo.");
- move(10,30);
- for (XYVAL x=30;x<900;x+=30)
- {
- move(10+x,30+x/6);
- draw(x,200);
- setAPen(1);
- }
- move(30,900);
- text((UBYTE*)"You're still there! Move up..");
-
- }
- void callback(const IntuiMessageC *imsg)
- {
- cout << "Canvas: mouse action!\n";
- }
- };
-
- class MyWindow : public GWindow
- {
- private:
- void init();
-
- public:
- MyWindow(OWNER,AttrList& attrs) : GWindow(owner,attrs) { init(); }
-
- void On_CLOSEWINDOW(const IntuiMessageC *msg)
- {
- cout << "CLOSEWINDOW.\n";
- delete this;
- running = FALSE;
- }
- void On_ACTIVEWINDOW(const IntuiMessageC *msg)
- {
- cout << title() << " is ACTIVE.\n";
- }
- void On_SIZEVERIFY(const IntuiMessageC *msg)
- {
- cout << "SIZEVERIFY. \n";
- }
- virtual void 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 MyWindow::init()
- {
- modifyIDCMP(CLASS_NEWSIZE|CLASS_CLOSEWINDOW|CLASS_ACTIVEWINDOW|CLASS_SIZEVERIFY \
- |CLASS_GADGETDOWN|CLASS_GADGETUP|CLASS_MOUSEMOVE);
- }
-
-
- void APPmain()
- {
- MySRSP sr(SIGBREAKB_CTRL_C);
- BevelBox bevelBoxBorder;
- LineBorder lineBorder;
-
- MyWindow *little = new MyWindow(OWNER_NULL,
- AttrList( WA_Title,"WindowC - close this to stop.",
- WA_Width,300,
- WA_Height,150,
- WA_MinWidth,200,
- WA_MinHeight,100,
- WA_MaxHeight,600,
- WA_MaxWidth,600,
- WA_DragBar,TRUE,
- WA_SizeGadget,TRUE,
- WA_DepthGadget,TRUE,
- WA_CloseGadget,TRUE,
- WA_IDCMP,IDCMP_CLOSEWINDOW,
- WA_SmartRefresh,TRUE,
- // GOB_BorderObj(&lineBorder),
- TAG_END) );
-
- #ifdef USE_ITP
- MapITP PGA2Canvas(NULL, AttrList(PGA_Top,CNV_ViewY,TAG_END) ),
- GTSC2Canvas(NULL, AttrList(GTSC_Top,CNV_ViewX,TAG_END) );
-
- /* special ITransponder with the ability to serve two receiver objects. */
- class C2S : public ITransponder
- {
- IntuiObject *receiver2;
-
- void sendNotification(AttrList& attrs)
- {
- _dout("C2S::sendNotification received n.s. = "<<attrs<<"\n");
-
- attrs.mapAttrs(CNV_Width,GTSC_Total, CNV_VisibleX,GTSC_Visible, CNV_ViewX,GTSC_Top,
- CNV_Height,PGA_Total, CNV_VisibleY,PGA_Visible, CNV_ViewY,PGA_Top,
- TAG_END);
- _dout("C2S: map to: "<<attrs<<endl);
- // each receivers gets his own attrs it can work on
- if (OK(receiver1)) receiver1->setAttributes(AttrList(attrs));
- if (OK(receiver2)) receiver2->setAttributes(attrs);
- }
- public:
- C2S(IntuiObject *rcv1=NULL,IntuiObject *rcv2=NULL)
- {
- setReceivers(rcv1,rcv2);
- }
- void setReceivers(IntuiObject *rcv1,IntuiObject *rcv2)
- {
- receiver1 = rcv1; receiver2 = rcv2;
- }
-
- };
-
- C2S canvas2Scrollbars;
- #endif
-
- MyCanvas *canvas = new MyCanvas(little,
- AttrList( GOB_LeftFromLeftOfParent,0,
- GOB_TopFromTopOfParent,0,
- GOB_RightFromRightOfParent,-18,
- GOB_BottomFromBottomOfParent,-18,
- GOB_BorderObj(&bevelBoxBorder),
- CNV_Width,100,
- CNV_Height,1000,
- CNV_GranularityX,5,
- CNV_ViewX,1,
- #ifdef USE_ITP
- ITRANSPONDER(&canvas2Scrollbars),
- #endif
- TAG_END) );
-
- #ifdef USE_ITP
- PGA2Canvas.setReceiver(canvas);
- GTSC2Canvas.setReceiver(canvas);
- #endif
-
- BoopsiGadget *boopsiG = new BoopsiGadget(little,
- (UBYTE*)"propgclass",
- AttrList( GOB_LeftFromRightOfPred,2,
- GOB_TopFromTopOfParent,0,
- GOB_RightFromRightOfParent,0,
- GOB_BottomFromBottomOfPred,0,
- GOB_BorderObj(&bevelBoxBorder),
- GA_Immediate,TRUE,
- GA_RelVerify,TRUE,
- PGA_Freedom,FREEVERT,
- ICA_TARGET,ICTARGET_IDCMP,
- PGA_NewLook,TRUE,
- #ifdef USE_ITP
- PGA_Top,0,
- PGA_Visible,0,
- PGA_Total,0,
- ITRANSPONDER(&PGA2Canvas),
- #else
- CONSTRAINT(PGA_Top,canvas,CNV_ViewY),
- CONSTRAINT(PGA_Visible,canvas,CNV_VisibleY),
- CONSTRAINT(PGA_Total,canvas,CNV_Height),
- #endif
- TAG_END) );
-
- GT_Scroller *gtscG = new GT_Scroller(little,
- AttrList( GOB_LeftFromLeftOfParent,0,
- GOB_TopFromBottomOfPred,2,
- GOB_RightFromLeftOfPred,0,
- GOB_BottomFromBottomOfParent,0,
- // GOB_BorderObj(&bevelBoxBorder),
- GA_Immediate,TRUE,
- GA_RelVerify,TRUE,
- PGA_Freedom,LORIENT_HORIZ,
- GTSC_Arrows,16,
- #ifdef USE_ITP
- GTSC_Top,0,
- GTSC_Visible,0,
- GTSC_Total,0,
- ITRANSPONDER(>SC2Canvas),
- #else
- CONSTRAINT(GTSC_Top,canvas,CNV_ViewX),
- CONSTRAINT(GTSC_Visible,canvas,CNV_VisibleX),
- CONSTRAINT(GTSC_Total,canvas,CNV_Width),
- #endif
- TAG_END) );
-
- #ifdef USE_ITP
- canvas2Scrollbars.setReceivers(boopsiG,gtscG);
- #else
- canvas->setAttributes( AttrList(
- CONSTRAINT(CNV_ViewX,gtscG,GTSC_Top),
- CONSTRAINT(CNV_ViewY,boopsiG,PGA_Top),
- TAG_END) );
- #endif
-
- little->refreshGList(); // display the gadgets
-
- while (running)
- {
- SignalResponder::WaitSignal();
- }
-
- cout << "main() end.\n";
- }
-