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 / graphics / Canvas_test.cxx < prev    next >
C/C++ Source or Header  |  1994-05-09  |  7KB  |  268 lines

  1. /******************************************************************************
  2.  *
  3.  *    $Source: apphome:APlusPlus/RCS/TESTPRGS/graphics/Canvas_test.cxx,v $
  4.  *
  5.  *    Demo for the A++ Library
  6.  *    Copyright (C) 1994 by Armin Vogt, EMail: armin@uni-paderborn.de
  7.  *
  8.  *       $Revision: 1.4 $
  9.  *       $Date: 1994/05/09 21:26:39 $
  10.  *       $Author: Armin_Vogt $
  11.  *
  12.  ******************************************************************************/
  13.  
  14.  
  15. volatile static char rcs_id[] = "$Id: Canvas_test.cxx,v 1.4 1994/05/09 21:26:39 Armin_Vogt Exp Armin_Vogt $";
  16.  
  17.  
  18. //**  This demo can use ITransponders as alternative to the Constraints.
  19. //**  To compile with ITransponders define USE_ITP.
  20.  
  21.  
  22.  
  23. extern "C" {
  24. #include <dos/dos.h>
  25. }
  26.  
  27. #include <APlusPlus/exec/SignalResponder.h>
  28. #include <APlusPlus/intuition/GWindow.h>
  29. #include <APlusPlus/intuition/GT_Gadgets/GT_Scroller.h>
  30. #include <APlusPlus/intuition/BoopsiGadget.h>
  31. #include <APlusPlus/graphics/Canvas.h>
  32.  
  33.  
  34. //------- use ITransponders instead of Constraints --------
  35. //#define USE_ITP 
  36.  
  37.  
  38. BOOL running = TRUE;
  39. BOOL close2 = FALSE;
  40.  
  41. class MySRSP : public SignalResponder
  42. {
  43.    public:
  44.       MySRSP(BYTE signal) : SignalResponder(signal,0) {}
  45.       ~MySRSP() {}
  46.       // overload the virtual 'signal received' action callback method.
  47.       void actionCallback()
  48.       {
  49.          cout << "**Break\n";
  50.          running = FALSE;
  51.       }
  52. };
  53. class MyCanvas : public Canvas
  54. {
  55.    public:
  56.       MyCanvas(GOB_OWNER,AttrList& attrs) : Canvas(gob_owner,attrs) { }
  57.       ~MyCanvas() {}
  58.         
  59.       void drawSelf()
  60.       {
  61.          setAPen(1);
  62.          move(10,10);
  63.          text((UBYTE*)"Hey, this is a canvas demo.");
  64.          move(10,30);
  65.          for (XYVAL x=30;x<900;x+=30)
  66.             {
  67.                move(10+x,30+x/6); 
  68.                draw(x,200);
  69.                setAPen(1);
  70.             }
  71.          move(30,900);
  72.          text((UBYTE*)"You're still there! Move up..");
  73.          
  74.       }
  75.         void callback(const IntuiMessageC *imsg)
  76.         {
  77.             cout << "Canvas: mouse action!\n";
  78.         }
  79. };
  80.  
  81. class MyWindow : public GWindow
  82. {
  83.    private:
  84.       void init();
  85.  
  86.    public:
  87.       MyWindow(OWNER,AttrList& attrs) : GWindow(owner,attrs) { init(); }
  88.       
  89.       void On_CLOSEWINDOW(const IntuiMessageC *msg)
  90.       {
  91.          cout << "CLOSEWINDOW.\n";
  92.          delete this;
  93.          running = FALSE;
  94.       }
  95.       void On_ACTIVEWINDOW(const IntuiMessageC *msg)
  96.       {
  97.          cout << title() << " is ACTIVE.\n";
  98.       }
  99.       void On_SIZEVERIFY(const IntuiMessageC *msg)
  100.       {
  101.          cout << "SIZEVERIFY. \n";
  102.       }
  103.       virtual void handleIntuiMsg(const IntuiMessageC* imsg)
  104.       {
  105.          switch (imsg->getClass())
  106.          {
  107.             case CLASS_CLOSEWINDOW :
  108.                On_CLOSEWINDOW(imsg); break;
  109.             case CLASS_ACTIVEWINDOW :
  110.                On_ACTIVEWINDOW(imsg); break;
  111.             case CLASS_SIZEVERIFY :
  112.                On_SIZEVERIFY(imsg); break;
  113.          }
  114.          GWindow::handleIntuiMsg(imsg);
  115.       }
  116. };
  117.  
  118. void MyWindow::init()
  119. {
  120.    modifyIDCMP(CLASS_NEWSIZE|CLASS_CLOSEWINDOW|CLASS_ACTIVEWINDOW|CLASS_SIZEVERIFY \
  121.     |CLASS_GADGETDOWN|CLASS_GADGETUP|CLASS_MOUSEMOVE);
  122. }
  123.  
  124.  
  125. void APPmain()
  126. {
  127.    MySRSP sr(SIGBREAKB_CTRL_C);
  128.     BevelBox bevelBoxBorder;
  129.     LineBorder lineBorder;
  130.     
  131.    MyWindow *little = new MyWindow(OWNER_NULL,
  132.    AttrList(    WA_Title,"WindowC - close this to stop.",
  133.       WA_Width,300,
  134.       WA_Height,150,
  135.         WA_MinWidth,200,
  136.       WA_MinHeight,100,
  137.       WA_MaxHeight,600,
  138.       WA_MaxWidth,600,
  139.       WA_DragBar,TRUE,
  140.       WA_SizeGadget,TRUE,
  141.       WA_DepthGadget,TRUE,
  142.       WA_CloseGadget,TRUE,
  143.       WA_IDCMP,IDCMP_CLOSEWINDOW,
  144.         WA_SmartRefresh,TRUE,
  145.     //    GOB_BorderObj(&lineBorder),
  146.       TAG_END) );
  147.  
  148. #ifdef USE_ITP
  149.    MapITP PGA2Canvas(NULL, AttrList(PGA_Top,CNV_ViewY,TAG_END) ),
  150.              GTSC2Canvas(NULL, AttrList(GTSC_Top,CNV_ViewX,TAG_END) );
  151.         
  152.     /* special ITransponder    with the ability to serve two receiver objects. */
  153.    class C2S : public ITransponder
  154.     {
  155.             IntuiObject *receiver2;
  156.  
  157.               void sendNotification(AttrList& attrs)
  158.             {
  159.                 _dout("C2S::sendNotification received n.s. = "<<attrs<<"\n");
  160.                                                 
  161.                 attrs.mapAttrs(CNV_Width,GTSC_Total, CNV_VisibleX,GTSC_Visible, CNV_ViewX,GTSC_Top,
  162.                                    CNV_Height,PGA_Total, CNV_VisibleY,PGA_Visible,  CNV_ViewY,PGA_Top,
  163.                                     TAG_END);
  164.                 _dout("C2S: map to: "<<attrs<<endl);
  165.                 // each receivers gets his own attrs it can work on
  166.                 if (OK(receiver1))    receiver1->setAttributes(AttrList(attrs)); 
  167.                 if (OK(receiver2))    receiver2->setAttributes(attrs);
  168.            }
  169.         public:
  170.                 C2S(IntuiObject *rcv1=NULL,IntuiObject *rcv2=NULL)
  171.                 {
  172.                     setReceivers(rcv1,rcv2);
  173.                 }
  174.                 void setReceivers(IntuiObject *rcv1,IntuiObject *rcv2)
  175.                 {
  176.                     receiver1 = rcv1; receiver2 = rcv2;
  177.                 }
  178.  
  179.     };                                                         
  180.     
  181.     C2S canvas2Scrollbars;
  182. #endif
  183.     
  184.     MyCanvas *canvas = new MyCanvas(little, 
  185.     AttrList(  GOB_LeftFromLeftOfParent,0,
  186.       GOB_TopFromTopOfParent,0,
  187.       GOB_RightFromRightOfParent,-18,
  188.       GOB_BottomFromBottomOfParent,-18,
  189.         GOB_BorderObj(&bevelBoxBorder),
  190.       CNV_Width,100,
  191.       CNV_Height,1000,
  192.         CNV_GranularityX,5,
  193.         CNV_ViewX,1,
  194. #ifdef USE_ITP        
  195.         ITRANSPONDER(&canvas2Scrollbars),
  196. #endif
  197.       TAG_END) );
  198.  
  199. #ifdef USE_ITP        
  200.     PGA2Canvas.setReceiver(canvas);
  201.    GTSC2Canvas.setReceiver(canvas);        
  202. #endif
  203.     
  204.     BoopsiGadget *boopsiG = new BoopsiGadget(little,  
  205.       (UBYTE*)"propgclass",
  206.     AttrList(    GOB_LeftFromRightOfPred,2,
  207.       GOB_TopFromTopOfParent,0,
  208.       GOB_RightFromRightOfParent,0,
  209.       GOB_BottomFromBottomOfPred,0,
  210.         GOB_BorderObj(&bevelBoxBorder),
  211.       GA_Immediate,TRUE,
  212.       GA_RelVerify,TRUE,
  213.       PGA_Freedom,FREEVERT,
  214.         ICA_TARGET,ICTARGET_IDCMP,
  215.       PGA_NewLook,TRUE,
  216. #ifdef USE_ITP
  217.         PGA_Top,0,
  218.         PGA_Visible,0,
  219.         PGA_Total,0,
  220.         ITRANSPONDER(&PGA2Canvas),
  221. #else
  222.         CONSTRAINT(PGA_Top,canvas,CNV_ViewY),
  223.         CONSTRAINT(PGA_Visible,canvas,CNV_VisibleY),
  224.         CONSTRAINT(PGA_Total,canvas,CNV_Height),
  225. #endif        
  226.       TAG_END) );
  227.    
  228.     GT_Scroller *gtscG = new GT_Scroller(little,  
  229.     AttrList(    GOB_LeftFromLeftOfParent,0,
  230.       GOB_TopFromBottomOfPred,2,
  231.       GOB_RightFromLeftOfPred,0,
  232.       GOB_BottomFromBottomOfParent,0,
  233. //        GOB_BorderObj(&bevelBoxBorder),
  234.       GA_Immediate,TRUE,
  235.       GA_RelVerify,TRUE,
  236.       PGA_Freedom,LORIENT_HORIZ,
  237.         GTSC_Arrows,16,
  238. #ifdef USE_ITP        
  239.         GTSC_Top,0,
  240.         GTSC_Visible,0,
  241.         GTSC_Total,0,
  242.         ITRANSPONDER(>SC2Canvas),
  243. #else
  244.         CONSTRAINT(GTSC_Top,canvas,CNV_ViewX),
  245.         CONSTRAINT(GTSC_Visible,canvas,CNV_VisibleX),
  246.         CONSTRAINT(GTSC_Total,canvas,CNV_Width),
  247. #endif                        
  248.       TAG_END) );
  249.    
  250. #ifdef USE_ITP
  251.     canvas2Scrollbars.setReceivers(boopsiG,gtscG);
  252. #else
  253.     canvas->setAttributes( AttrList(
  254.         CONSTRAINT(CNV_ViewX,gtscG,GTSC_Top),
  255.         CONSTRAINT(CNV_ViewY,boopsiG,PGA_Top),
  256.         TAG_END) );
  257. #endif
  258.         
  259.     little->refreshGList();     // display the gadgets
  260.         
  261.    while (running)
  262.    {
  263.       SignalResponder::WaitSignal();
  264.    }
  265.  
  266.    cout << "main() end.\n";
  267. }
  268.