home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / gnu / aplusplus-1.01-src.lha / APlusPlus-1.01 / TESTPRGS / intuition / Listview_test.cxx < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-10  |  6.1 KB  |  202 lines

  1. /******************************************************************************
  2.  *
  3.  *    $Source: apphome:APlusPlus/RCS/TESTPRGS/intuition/Listview_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:28:48 $
  10.  *       $Author: Armin_Vogt $
  11.  *
  12.  ******************************************************************************/
  13.  
  14.  
  15. #include <APlusPlus/exec/SignalResponder.h>
  16. #include <APlusPlus/intuition/GWindow.h>
  17. #include <APlusPlus/intuition/GT_Gadgets/GT_Scroller.h>
  18. #include <APlusPlus/intuition/GT_Gadgets/GT_Listview.h>
  19. #include <APlusPlus/graphics/AutoDrawArea.h>
  20.  
  21. #include <iostream.h>
  22.  
  23. extern "C" {
  24. #include <dos/dos.h>
  25. }
  26.  
  27.  
  28. volatile static char rcs_id[] = "$Id: Listview_test.cxx,v 1.4 1994/05/09 21:28:48 Armin_Vogt Exp Armin_Vogt $";
  29.  
  30.  
  31.  
  32. // a CTRL-C signal responder from the example in the docs
  33. class MySRSP : public SignalResponder
  34. {
  35.     private:
  36.        BOOL running;  // indicates a received user break to object users
  37.    public:
  38.         MySRSP() : SignalResponder(SIGBREAKB_CTRL_C,0)
  39.       { running = TRUE; }
  40.         ~MySRSP() {}    // NEVER FORGET DO DEFINE EVEN AN EMPTY DESTRUCTOR WITH SASC 6.51. THIS IS A KNOWN BUG!!
  41.             
  42.       //  overload the virtual 'signal received' action callback method.
  43.       void actionCallback()
  44.       {
  45.          cout << "**Break\n";
  46.          running = FALSE;  // end WaitSignal loop
  47.       }
  48.         
  49.         // object users can check with this method wether a user break has occurred
  50.       BOOL hasNotOccured() { return running==TRUE; }
  51. };
  52.  
  53.  
  54.  
  55.  
  56. // derive GWindow and add your specific message actions
  57. class MyWindow : public GWindow
  58. {    
  59.     private:
  60.         BOOL running;
  61.    public:
  62.       MyWindow(OWNER,AttrList& attrs) : GWindow(owner,attrs) 
  63.         {  
  64.             if (Ok())    // always check for the correct execution of all base class constructors
  65.             {
  66.                 // up to now, it is necessary to announce the messages this Window class awaits
  67.                 // to the WindowCV base class
  68.                 modifyIDCMP(CLASS_NEWSIZE|CLASS_ACTIVEWINDOW);
  69.                 running = TRUE;
  70.             }
  71.             else running = TRUE;
  72.       }
  73.  
  74.       ~MyWindow() {}
  75.  
  76.  
  77.       void On_CLOSEWINDOW(const IntuiMessageC *msg)
  78.       {
  79.          cout << "CLOSEWINDOW.\n";
  80.              running = FALSE;
  81.       }
  82.       void On_ACTIVEWINDOW(const IntuiMessageC *msg)
  83.       {
  84.          cout << title() << " is ACTIVE.\n";
  85.       }
  86.       void On_SIZEVERIFY(const IntuiMessageC *msg)
  87.       {
  88.          cout << "SIZEVERIFY. \n";
  89.       }
  90.       void handleIntuiMsg(const IntuiMessageC* imsg)
  91.       {
  92.          switch (imsg->getClass())
  93.          {
  94.             case CLASS_CLOSEWINDOW :
  95.                On_CLOSEWINDOW(imsg); break;
  96.             case CLASS_ACTIVEWINDOW :
  97.                On_ACTIVEWINDOW(imsg); break;
  98.             case CLASS_SIZEVERIFY :
  99.                On_SIZEVERIFY(imsg); break;
  100.          }
  101.          GWindow::handleIntuiMsg(imsg);
  102.       }
  103.  
  104.         BOOL isNotClosed() { return running==TRUE; } 
  105. };
  106.  
  107.  
  108.  
  109. void APPmain()
  110. {
  111.    MySRSP userBreak;
  112.     
  113.     NeXTBorder background("helvetica.font",13);
  114.  
  115.    MyWindow *mainWindow = new MyWindow(OWNER_NULL,
  116.    AttrList(   WA_Title,"WindowC - close this to stop.",
  117.       WA_Width,300,
  118.       WA_Height,150,
  119.       WA_MinHeight,50,
  120.       WA_MinWidth,50,
  121.       WA_MaxHeight,1000,
  122.       WA_MaxWidth,1000,
  123.       WA_DragBar,TRUE,
  124.       WA_SizeGadget,TRUE,
  125.       WA_DepthGadget,TRUE,
  126.       WA_CloseGadget,TRUE,
  127.       WA_IDCMP,TRUE,
  128.         GOB_BorderObj(&background),
  129.         GOB_BackgroundColor,4,
  130.         GOB_BorderTitle, (UBYTE*)" GT_Listview & GT_Scroller ",
  131.       TAG_END) );
  132.  
  133.  
  134.    ListC labels;
  135.    #define LABEL_CNT (4*6)
  136.  
  137.  
  138.     // create a sufficient number of NodeC objects that hold the strings as names
  139.    NodeC lnode[LABEL_CNT]= {
  140.       (UBYTE*)"This ", (UBYTE*)"is ", (UBYTE*)"a ", (UBYTE*)"letter", (UBYTE*)"for", (UBYTE*)"you.",
  141.        (UBYTE*)"Use the ", (UBYTE*)"Scroller gadget", (UBYTE*)"on the right", (UBYTE*)" to scroll ", (UBYTE*)"through ", (UBYTE*)" the entry list..",
  142.       (UBYTE*)"Date 01/26/93", (UBYTE*)" by Armin Vogt", (UBYTE*)"You see a GT_Scroller ", (UBYTE*)"connected", (UBYTE*)"with a", (UBYTE*)"GT_Listview.",
  143.       (UBYTE*)"This", (UBYTE*)"is", (UBYTE*)"only", (UBYTE*)"a simple example.", (UBYTE*)"But take a look", (UBYTE*)"at the code.."
  144.       };
  145.     /* IF YOU DO NOT CAST THE STRINGS INTO (UBYTE*), SAS and GCC both seem not to terminate,
  146.      * at least with 6MB RAM
  147.      */
  148.      
  149.     // add the created nodes to the ListC object
  150.    for (int i=LABEL_CNT-1;i>=0; i--)
  151.       labels.addHead(&lnode[i]);
  152.  
  153.  
  154.    GT_Listview *listView = new GT_Listview(mainWindow,
  155.     AttrList(    GOB_LeftFromLeftOfParent,      3,
  156.                     GOB_TopFromTopOfParent,        3,
  157.                     GOB_RightFromRightOfParent,   -40,
  158.                   GOB_BottomFromBottomOfParent, -3,
  159.                     GA_Immediate,    TRUE,
  160.                     GA_RelVerify,  TRUE,             
  161.                     GTLV_Top,    1,                                // initialise with 1
  162.                   GTLV_Labels,         &labels,            // the ListC object is compatible to a List structure
  163.                   GTLV_ShowSelected,   NULL,
  164.                   LAYOUTA_Spacing,     2,
  165.                   TAG_END) );
  166.  
  167.  
  168.    GT_Scroller *scroller = new GT_Scroller(mainWindow, 
  169.     AttrList(    GOB_LeftFromRightOfPred,    5,
  170.                   GOB_TopFromTopOfPred,        0,
  171.                   GOB_RightFromRightOfParent,-5,
  172.                     GOB_BottomFromBottomOfPred, 0,
  173. /*      GA_Immediate,TRUE,*/
  174.                   GA_RelVerify,  TRUE,                  
  175.                   PGA_Freedom,   LORIENT_VERT,
  176.                     
  177.                   CONSTRAINT( GTSC_Top, listView, GTLV_Top),    // initialise with GTLV_Top (=1)
  178. /* This constraint doesn't make sense since Listview does not report about scroll movements */
  179.                     
  180.                   GTSC_Total,    LABEL_CNT,
  181.                   GTSC_Visible,  1,
  182.                   GTSC_Arrows,   16,
  183.                   GT_IDCMP,      SLIDERIDCMP,
  184.                   TAG_END) );
  185.  
  186.     // GTLV_Top is initialised from GTSC_Top, which has been initialised from GTLV_Top before
  187.     // ==> GTLV_Top remains 1
  188.     listView->setAttributes(AttrList(CONSTRAINT(GTLV_Top,scroller,GTSC_Top),TAG_END));
  189.     
  190.    mainWindow->refreshGList();        // display objects
  191.  
  192.     /* As soon as the mainWindow deletes itself after having received CLASS_CLOSEWINDOW
  193.      * the loop terminates since the Ok() check within APPOK(mainWindow) fails to be TRUE.
  194.      */
  195.    while (userBreak.hasNotOccured() && APPOK(mainWindow) && mainWindow->isNotClosed())
  196.    {
  197.       SignalResponder::WaitSignal();
  198.    }
  199.  
  200.    cout << "cleaned up. goodbye.\n";
  201. }
  202.